Saturday, September 28, 2024
21 changes · 18.0
Enhancements to existing features
The Nano website theme now uses a stronger orange and darker grey palette while keeping its existing visual identity. This makes page content stand out more clearly and supports the ongoing redesign toward a higher-contrast look.
Original PR description
This PR fine-tunes the `primary` and `dark` color of the `theme_nano`. As part of the `theme_nano` redesign, the color palette has been adjusted to a `high-contrast` style. The colors remains in the same tones (orange and dark grey) but are more saturated, to emphasis the content of the theme. task-4178081 part of task-4177975 - requires https://github.com/odoo/design-themes/pull/935 | Master | This PR | |--------|--------| |  |  | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When users filter bills by Next Payment Date and start a payment, Odoo now includes all installments due up to that selected date instead of requiring them to change the payment date. This makes scheduled installment payments more intuitive and avoids workarounds that could distort the actual payment date.
Original PR description
The idea is that if a user uses a filter on "Next Payment Date", when he pays, he would expect to pay everything that he needs until this date. For instance, imagine a bill with 3 installments. One that was at the end of last month, one for the end of this week and one in 2 months. You want to pay everything for the end of the week, and make the payment today. Currently, the only way to do so would be to change the payment date (to make them overdue), but that's not the same thing. To solve this, we rely on the context to know if it was in the search domain, and then pay everything up to this date. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now preserves more context when opening records through JSON links across views such as kanban, graph, pivot, calendar, and activity. This helps users land on screens with the right filters, domains, and default values, making shared or redirected links more reliable.
Original PR description
Handle additional parameters like the domain and default values from multiple view types: kanban, graph, pivot, calendar, activity. The code is moved to a separate file because it is a specific feature of Odoo and should not be in the same file as the default `/odoo` route. task-3987268 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The default Contact Us form layout has been updated to make it clearer and easier to read. This improves the first-use website experience by presenting the form in a more structured way for visitors.
Original PR description
This commit makes the default structure of the form in the contact us page more readable and structured. task-4203857 | Before | After | |--------|--------| | <img width="1350" alt="Screenshot 2024-09-23 at 13 49 10" src="https://github.com/user-attachments/assets/6da22b0e-a186-411c-808a-463431ba3cd1"> | <img width="1303" alt="Screenshot 2024-09-23 at 13 50 05" src="https://github.com/user-attachments/assets/79c43425-a7c6-45e8-b05f-759ea6889263"> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
New databases now show ready-made sample dashboards instead of empty charts and tables, helping users quickly understand the value of the dashboard app. Sample content is added across sales, invoicing, events, expenses, live chat, point of sale, restaurant, and timesheet-related dashboards when no real business records exist yet.
Original PR description
Currently, users with an fresh empty database will only see empty dashboards. They will go through a list of empty tables and charts without any data and probably miss the potential of the dashboard app. For a proper onboarding experience, they should be greeted with a sample dashboard to give them a better idea of the dashboard look and use. Technically, we store sample json files to be used when the main model (the model that is used the most in the dashboard) has no records. task-3947773 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo can now synchronize currency exchange rates using the Bank of Thailand service. This helps businesses operating with Thai baht keep rates up to date automatically, using the most recent available rate from the previous day.
Original PR description
Adds the possibility to synchronize exchange rates using the API provided by the Bank Of Thailand (BOT). Rates are synchronized using yesterday as a date, as they do not provide rates for the current day. Task id # 3724438
New users starting with an empty database will now see sample dashboards instead of blank charts and tables. This helps them understand the value and layout of the dashboard app during onboarding, with examples across accounting, CRM, HR, helpdesk, marketing, manufacturing, and related dashboard areas.
Original PR description
Currently, users with an fresh empty database will only see empty dashboards. They will go through a list of empty tables and charts without any data and probably miss the potential of the dashboard app. For a proper onboarding experience, they should be greeted with a sample dashboard to give them a better idea of the dashboard look and use. Technically, we store sample json files to be used when the main model (the model that is used the most in the dashboard) has no records. task-3947773
Resolved issues and error corrections
This fixes an error that could occur after a user was granted an exception to remove a sales lock date. Users can now create or edit invoices with dates before the former lock date without encountering a traceback, improving reliability for accounting workflows.
Original PR description
In commit d8bf86fec7b9a0a3f6e0aef2c4c124bc81bfb898 we allowed removing lock dates with an exception.
But when computing the user lock date based on (parent) company lock dates and user exceptions (`_get_user_lock_date`) we still assume that it is not possible.
This is fixed in this commit.
Reproduce traceback
1. Set Sale Lock Date to 2024/08/31
2. Remove Sale Lock Date with an exception for me forever
3. Create an invoice and try to set the invoice date to a date
before 2024/08/31The cart page now respects mandatory sign-in settings by hiding express checkout for visitors who are not logged in. This prevents shoppers from bypassing required account creation and keeps the checkout flow consistent with the store's policy.
Original PR description
Issue: - When the 'Sign in/up at checkout - mandatory' option is enabled, the 'Express Checkout' button is still visible on the cart page even when the user is not signed in. This causes an inconsistency, as express checkout bypasses the mandatory creation of portal account, which should not be allowed in this mode. Fix: - Added a condition at the t-call of express checkout template to ensure that it is hidden when mandatory sign-in at checkout is activated and user is not signed in. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Printing POS session reports with per-employee details no longer gets stuck or disconnects. The reports are now generated one after the other, ensuring both downloads complete reliably and the print dialog closes correctly.
Original PR description
Steps: - Activate 'login with employees' in settings - Open PoS - Make sales and switch between different employees - Close session - Go to reporting, click on Session Report - Check the box "add a report per each employee" - Click on print, if the report layout wizard comes up, print the report. - Again try to print the report. Issue: Stuck on loading then the connection gets lost Cause: Try to process two async requests parallelly to download reports "session report" and "session report per employee" causing them to get stuck on loading then the connection lost FIX: Instead of trying to process two async requests parallel, we will wait for first one to complete then execute the second one. task - 4191502
Project purchase orders now include orders linked through line-level analytic distributions, so project views show a more accurate purchase count. The update also prevents purchase order project changes from overwriting existing line distributions and improves expense analytic allocation when reinvoicing customers.
Original PR description
Steps to reproduce: ------------------- 1. From the Purchase app, create a purchase order (don't link it to any project with the project field) 2. Add a line on the PO with a distribution 3. On the…
Steps to reproduce:
-------------------
1. From the Purchase app, create a purchase order (don't link it to any project with the project field)
2. Add a line on the PO with a distribution
3. On the line, add the project's analytic account
4. Go to the Project > Top bar > Purchase Orders > The new purchase order is not there
Fix:
-------------------
We should take into account the purchase orders whose lines have an analytic distribution corresponding to the project. We will do a second _read_group() call for that purpose.
- Others fixes: - Still in Purchase app, when changing the project_id of the PO, it changes the analytic distribution of all PO lines (including PO lines with non-empty distribution). To be consistent with SO and SO lines, it should only affect PO lines that do not have their analytic distribution set.
- In Expenses app, when changing the 'Customer to Reinvoice' field of an expense, it should automatically fill in the analytic distribution of the expense with the account
of the project of the sale order linked to the 'Customer to Reinvoice'. The problem is that it does not systematically change the analytic distribution if such account exists.
- When creating an expense from the top bar action, and changing the distribution of the expense (the percentage for instance), it does not get saved on saving the record.
task-4191106
version-18.0
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes how the website handles modern language code formats in the SEO dialog. It prevents errors when editing or generating SEO information for multilingual websites and keeps behavior consistent across Odoo versions.
Original PR description
[1] fixed the correct application of jsToPyLocale and pyToJsLocale conversions due to the new language code format used in the front-end and was forward-ported to master in [2]. The goal of this commit is to backport [2] to ensure the same API is used in both v.18 and master. [1]: https://github.com/odoo/odoo/commit/2cd53220c39f897c346b8174ac65b5dbd950b67f [2]: https://github.com/odoo/odoo/commit/b012952e511f6ec70218d2fd5ead3cb93a2afd9f task-4210172
Manufacturing order overviews now calculate operation costs more accurately when no expected duration was set. Once production starts or is completed, costs use the real recorded duration for machine and labor time, giving businesses a clearer view of actual manufacturing costs.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a point-of-sale restaurant issue where moving an order from one table to another could leave one item behind. Staff can now transfer full table orders reliably, reducing billing mistakes and service delays.
Original PR description
Steps to reproduce : --------------------------- - Install the pos_restaurant module. - Place orders on two separate tables, e.g., Table A and Table B. - Use the action button to transfer the order from Table A to Table B. Issue : --------- The last orderline of the table from where we transfer to another table is not transfered to destination table when there is any orderline having different product which is not present in any of the orderlines of the destination table. Cause : ---------- The for loop on orderlines modifies the orderline reference during iteration, causing the loop to skip some lines because the order.lines is altered mid-iteration. Fix : ------ Intead of updating within iteration we will update all lines after completion of the iteration.
This fix makes invoice payment statuses update correctly when payments are created, confirmed, validated, reconciled, or rejected. Customers now see consistent portal labels such as “Processing payment,” with installment prompts hidden when a payment is already in progress.
Original PR description
Fix the status of invoices when registering a payment. Also improves the portal view depending on the invoice payment state. The following cases assume that no outstanding account is set on the bank…
Fix the status of invoices when registering a payment. Also improves the portal view depending on the invoice payment state. The following cases assume that no outstanding account is set on the bank journal Portal: - In case the invoice payment state is 'in payment', the portal should display "Processing payment", the "Next installment" section should be hidden, and a banner should appear in the popup of the payment (when pressing the "Pay Now" button). Portal list view: - Same payment state should be displayed as in the portal form view, e.g. "Processing Payment" Invoice Payment state: - If a payment is created for an invoice, then the state of the invoice is set to 'in payment' When the invoice is reconciled, and the payment is manually validated (This manual operation of validating the payment will be made automatically in another task) if the payment corresponds to a portion of the invoice amount, the invoice payment state is 'Partial' if the payment corresponds to the full invoice amount, the invoice payment state is 'Paid' If the payment is rejected, then the invoice payment state is reset If the payment is confirmed (before any reco), then the invoice payment state keeps being "in payment" task-4212954 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how taxes are calculated and displayed when prices include tax, especially where rounding can affect invoice totals. It also keeps tax calculation naming consistent between accounting and point of sale, while preserving correct handling for reverse charge taxes.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where batch validation and export buttons could stay hidden for bank journals without payment initiation configured when online payments were installed. This ensures accounting teams can validate and export batch payments from the affected journals as intended.
Original PR description
Before this commit, when account_online_payment was installed and no payment initiation was configured on a bank journal, the batch validation and export buttons never appeared on the batch payments made on this journal.
SEPA direct debit batch validation now handles missing setup information more gracefully, such as absent mandates or creditor identifiers. Users receive clearer, better-timed error messages instead of system crashes, making payment batch preparation easier to correct.
Original PR description
[IMP] account_sepa_direct_debit: better sequence of error messages The check validating the collection date was made before we've checked all mandates are in the right state, yet it depended on the…
[IMP] account_sepa_direct_debit: better sequence of error messages
The check validating the collection date was made before we've checked all mandates are in the right state, yet it depended on the mandates to check the minimum collection date available for this batch. We now make it so we first check all the mandates are valid, for usability.
===================================================
[FIX] account_sepa_direct_debit: Don't crash when validating a batch when the company has no creditor identifier
A check for that already existed in validate_batch, raising an error, but it wasn't called in time, and this caused a traceback because the super call had been moved at the beginning of the function.
===================================================
[IMP] account_sepa_direct_debit: clearer error message
===================================================
[FIX] account_sepa_direct_debit: don't crash when trying to generate a batch containing a single SDD payment without mandate
To reproduce:
1) Create a payment for some new partner, using SEPA Direct Debit. Make sure no mandate exists for this partner.
2) Add the payment created in 1 into a new batch. It must be the only payment in it
3) Try validating the batch
====> Traceback
This is because the query checking which mandates are used for the first time receives an empty tuple for its "mandate_ids" parameter. SQL tries to run "... IN ()", which crashes.
After fixing this bug, the same flow still crashes because we're trying to call max() on an empty sequence in validate_batch in order to compute the pre_notification_period. We fix that by adding a new check in order to redirect the user in case some payments of the batch are missing a mandate.This update corrects problems when registering SEPA Direct Debit payments, especially when creating payments for multiple customers at once. It also improves mandate visibility and ensures collection dates account for payments that are already fully paid, reducing payment processing errors.
Original PR description
This fixes issues that arose in 6aa473d, including: - Payments creations in batch from the list view do not handle the multiple partners case - The blue "Valid mandate available" banner does not show when you're not already using the SDD payment method
Manufacturing order operation costs are now calculated more accurately when production starts or finishes without an expected duration. This improves cost reporting by using actual duration and the relevant machine, labor, and workcenter employee costs where appropriate.
Original PR description
This commit modifies the MO cost of operations. Now, when the production is started and if there is no duration expected on the operation, the mo cost of the operation will be the theorical cost of the real duration (i.e. it will be the result of machine + labour cost for that duration). When the production is done, the same behaviour will be applied, but without the labour cost. The timesheet cost of an operator for the MO cost column is now computed based on the operation's workcenter employee cost.
Publicly shared spreadsheets now reload with the latest saved changes instead of reverting to the original empty or outdated version. This prevents viewers using a shared link from seeing missing content after the owner leaves the spreadsheet, improving reliability for shared documents.
Original PR description
Steps to reproduce: - (as an internal user) - create a new empty spreadsheet - do a couple of changes - Share the spreadsheet Anyone with the link: Viewer - open the link in an new incognito tab - (everything fine at this point) - now, leave the spreadsheet in the backend - reload the public spreadsheet page => everything disapeared When the internal user leaves the spreadsheet, a new snapshot is created and pending revisions are archived. When the public user reloads, the data comes from the field `spreadsheet_data` which is the initial data (not the latest snapshot) and doesn't get any revisions (they are archived) I also added a test which gets pending revisions.