Monday, May 5, 2025
44 changes
6 changes
Resolved issues and error corrections
This update adjusts the bank reconciliation widget so its buttons and editable line actions display more reliably. It helps accounting users work through reconciliation with fewer visual issues or misplaced controls.
Miscellaneous changes
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. Forward-Port-Of: odoo/enterprise#83466 Forward-Port-Of: odoo/enterprise#83217
Original PR description
In this commit we remove checkDelay from codebase because it is no longer used since https://github.com/odoo/odoo/pull/194508 has been merged. Forward-Port-Of: odoo/enterprise#83466 Forward-Port-Of: odoo/enterprise#83217
Forward-Port-Of: odoo/enterprise#84325 Forward-Port-Of: odoo/enterprise#80561
Original PR description
Forward-Port-Of: odoo/enterprise#84325 Forward-Port-Of: odoo/enterprise#80561
12 changes
Resolved issues and error corrections
This fixes New Zealand invoice PDFs so they show only the correct document title when printed. It prevents confusing output where multiple possible invoice titles appeared on the same PDF.
Original PR description
### Steps to reproduce: - Install "l10n_nz" and switch company - Create an invoice - Click "Print" - On the generated PDF all possible document titles show ### Cause: This [commit](https://github.com/odoo/odoo/commit/af06243092fd194c993451ea9c165be9ec2b4188) changed the way the invoices title were displayed but it has a typo: it hasn't deleted the xpath like in `l10n_au` but added the change inside the xpath. ### Solution: Remove the xpath. opw-4710851
8 changes
Enhancements to existing features
The web enterprise interface now uses standard browser cache controls when loading menus instead of adding a unique timestamp to each request. This keeps menu loading behavior reliable while using a cleaner, more maintainable approach.
Original PR description
…ument Before this commit, a unique (timestamp) argument was sent to prevent the browser from caching the calls to `/web/webclient/load_menus`. This is not the correct way to prevent the browser from caching, in this commit we will use the cache options of the fetch function, see [1][2]. [1]: https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch [2]: https://developer.mozilla.org/en-US/docs/Web/API/RequestInit
18 changes
Resolved issues and error corrections
This fix corrects Spanish localization tax data so automated checks no longer fail due to an incorrect tax classification. It helps keep Spanish accounting configurations reliable, including cases affected by the Canary Islands chart of accounts split.
Original PR description
…l10n_es_type Probably forgotten to update the agriculture changes when splitting the csv file for the Canary Islands CoA. Runbot error 161596 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
A traceback occurs when attempting to view the 'Hierarchy and Subtotals' of an Account Group with a Financial Budget set in the 'Profit and Loss' report. Steps to reproduce: ------------------- * Open Accounting in debug mode * In Configuration > Accounting > Financial Budgets create a new budget * In Configuration > Accounting > Account Groups create a new group * Open Reporting > Statement Report > Profit and Loss * Select the budget and Hierarchy and Subtotals * Click on Revenues
Original PR description
A traceback occurs when attempting to view the 'Hierarchy and Subtotals' of an Account Group with a Financial Budget set in the 'Profit and Loss' report. Steps to reproduce: ------------------- *…
A traceback occurs when attempting to view the 'Hierarchy and Subtotals' of an
Account Group with a Financial Budget set in the 'Profit and Loss' report.
Steps to reproduce:
-------------------
* Open Accounting in debug mode
* In Configuration > Accounting > Financial Budgets create a new budget
* In Configuration > Accounting > Account Groups create a new group
* Open Reporting > Statement Report > Profit and Loss
* Select the budget and Hierarchy and Subtotals
* Click on Revenues
* Traceback
> Observation:
File '/home/odoo/src/enterprise/18.0/account_reports/models/account_report.py', line 1035, in compute_group_totals
hierarchy_total + (column.get('no_format') or 0.0) if isinstance(hierarchy_total, float) else hierarchy_total
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'float' and 'str'
Why the fix:
------------
Add float verification to ensure valid operation in the hierarchy.
opw-4628498
Forward-Port-Of: odoo/enterprise#84564
Forward-Port-Of: odoo/enterprise#83302Currently, the “Unpaid” and “Late” buttons in the sale journal dashboard used the total invoice amount instead of the remaining due amount when account_3way_match was installed. Steps to reproduce: - Install account_3way_match - Create and partially pay an invoice - Go to the dashboard - The displayed amount should reflect the residual, but it shows the full amount This fix restores the expected behavior by using the same logic as the original `_get_open_sale_purchase_query` to compute
Original PR description
Currently, the “Unpaid” and “Late” buttons in the sale journal dashboard used the total invoice amount instead of the remaining due amount when account_3way_match was installed. Steps to reproduce: - Install account_3way_match - Create and partially pay an invoice - Go to the dashboard - The displayed amount should reflect the residual, but it shows the full amount This fix restores the expected behavior by using the same logic as the original `_get_open_sale_purchase_query` to compute `amount_total` and `amount_total_company`. opw-4731478 Forward-Port-Of: odoo/enterprise#83823
Forward-Port-Of: odoo/enterprise#84045 Forward-Port-Of: odoo/enterprise#84014
Original PR description
Forward-Port-Of: odoo/enterprise#84045 Forward-Port-Of: odoo/enterprise#84014
This fixes an issue where sending and printing a Hungarian invoice could fail if the company VAT number was not set, especially in demo NAV credential mode. Users can now complete the invoice send and print flow without encountering an unexpected error in that scenario.
Original PR description
When vat is unset in Company and user tries to send & print invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_hu_edi`` module > Switch to ``HU Company`` - Open ``HU…
When vat is unset in Company and user tries to send & print invoice, a traceback will appear. Steps to reproduce the error: - Install ``l10n_hu_edi`` module > Switch to ``HU Company`` - Open ``HU Company`` > Unset vat field > Save - Go to Invoicing > Configuration > Settings > NAV Credentials > Mode: Demo > Save - Create a new invoice > Confirm > Send & Print > Send & Print Traceback: ``` QWebException: Error while render the template TypeError: argument of type 'bool' is not iterable Template: ir.ui.view(2872,) Path: /t/t[1]/base:taxpayerId Node: <ns0:taxpayerId xmlns:ns0="http://schemas.nav.gov.hu/OSA/3.0/base" t-out="vat[:8]"/> ``` https://github.com/odoo/odoo/blob/33b728c5917b06dd8ab46c48b160e3cf24ddc1ba/addons/l10n_hu_edi/models/res_company.py#L95-L96 For NAV Credentials(Mode: Demo), Credentials are not required. https://github.com/odoo/odoo/blob/33b728c5917b06dd8ab46c48b160e3cf24ddc1ba/addons/l10n_hu_edi/data/template_invoice.xml#L124-L131 When user unset the vat field , ``vat`` will be False. It will lead to the above traceback. sentry-6242690591 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Issue: = - Updating presets on multiple POS setups at once caused a singleton error. Fix: = - Now processes each POS configuration individually to prevent the error. Related PR: https://github.com/odoo/odoo/pull/196800 Task: 4523232 Forward-Port-Of: odoo/odoo#208223
Original PR description
Issue: = - Updating presets on multiple POS setups at once caused a singleton error. Fix: = - Now processes each POS configuration individually to prevent the error. Related PR: https://github.com/odoo/odoo/pull/196800 Task: 4523232 Forward-Port-Of: odoo/odoo#208223
**Steps to reproduce:** - Create a service with "Create on Order" = `Project & Task` and "Invoicing Policy" = `Based on Delivered Quantity (Manual)`. - Create a quotation using this service as a product. - Create a new line in Timesheet with the Project of the service. - The Sales Order Item field updates automatically. - If manually modified, the item no longer appears in the lists of `name_search` or `web_search_read`. **Issue:** Inconsistent behavior on the domain used for the Sale O
Original PR description
**Steps to reproduce:** - Create a service with "Create on Order" = `Project & Task` and "Invoicing Policy" = `Based on Delivered Quantity (Manual)`. - Create a quotation using this service as a product. - Create a new line in Timesheet with the Project of the service. - The Sales Order Item field updates automatically. - If manually modified, the item no longer appears in the lists of `name_search` or `web_search_read`. **Issue:** Inconsistent behavior on the domain used for the Sale Order Item showed in the Timesheet app. **Fix:** Removed `qty_delivered_method` domain filtering to allow sale order line with any `qty_delivered_method` to be used in the Timesheet app. opw-4710840 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207681
Following this commit : - getRenderedReceipt method is optimised to pass dynamic values. - o-employee-name class has been added for applying xpath. Enterprise PR: https://github.com/odoo/enterprise/pull/81559 task-4633156 Forward-Port-Of: odoo/odoo#207731 Forward-Port-Of: odoo/odoo#202003
Original PR description
Following this commit : - getRenderedReceipt method is optimised to pass dynamic values. - o-employee-name class has been added for applying xpath. Enterprise PR: https://github.com/odoo/enterprise/pull/81559 task-4633156 Forward-Port-Of: odoo/odoo#207731 Forward-Port-Of: odoo/odoo#202003
Before this commit, the second and onwards view of the product screen will pull and sort products by the data stored in IndexedDB. The first load of the product screen sorts based on a SQL query, whose sorting may be lost on sequential loads of the product screen. This change maintains the sort sequence to 'product.template' when loading the product screen when IndexedDB exists in the browser. opw-4584724 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/su
Original PR description
Before this commit, the second and onwards view of the product screen will pull and sort products by the data stored in IndexedDB. The first load of the product screen sorts based on a SQL query, whose sorting may be lost on sequential loads of the product screen. This change maintains the sort sequence to 'product.template' when loading the product screen when IndexedDB exists in the browser. opw-4584724 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201640
Before this commit, in Odoo, it was not possible to change an all-day event to a timed event and have it synchronized in Google correctly. This is because were sending to Google both 'date' and 'datetime' info for a single event (since Google stores the previous date and dateTime), which lead to "ERROR 400 Invalid start time." After this commit, the user can successfuly update a timed event to all-day event and vice versa and get it successfully updated in Google, since we now send 'date' as
Original PR description
Before this commit, in Odoo, it was not possible to change an all-day event to a timed event and have it synchronized in Google correctly. This is because were sending to Google both 'date' and 'datetime' info for a single event (since Google stores the previous date and dateTime), which lead to "ERROR 400 Invalid start time." After this commit, the user can successfuly update a timed event to all-day event and vice versa and get it successfully updated in Google, since we now send 'date' as null when the event is timed and 'dateTime' as null when it is an all-day event. task-3965107 Forward-Port-Of: odoo/odoo#205563 Forward-Port-Of: odoo/odoo#177549
Problem: When viewing the project update of a project that timesheets on a service product with standard valuation, the 'cost_of_goods_sold' section is displayed when it should not be. Purpose: The COGS section should only be displayed in the project updates if COGS lines exists in relation to the project. The behavior should stay consistent with v17.0 as with this commit: #203936 Steps to reproduce the issue: 1. Install Purchase, Sales, Project,sale_project, Inventory, Timesheets 2. Cre
Original PR description
Problem: When viewing the project update of a project that timesheets on a service product with standard valuation, the 'cost_of_goods_sold' section is displayed when it should not be. Purpose: The…
Problem: When viewing the project update of a project that timesheets on a service product with standard valuation, the 'cost_of_goods_sold' section is displayed when it should not be. Purpose: The COGS section should only be displayed in the project updates if COGS lines exists in relation to the project. The behavior should stay consistent with v17.0 as with this commit: #203936 Steps to reproduce the issue: 1. Install Purchase, Sales, Project,sale_project, Inventory, Timesheets 2. Create a service product with standard valuation and creates project & task on order 3. Create a sales order with the service product 4. Invoice the sales order and confirm 5. Create another invoice not linked to the sales order but contains project's analytic account 6. Load the project update or dashboard of the project and notice there's a COGS section displayed despite no related COGS invoice line opw-4684445 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208019
This fix solves a specific corner case where the analytic distribution could False by defaulting to an empty list. To reproduce the issue: - Enable analytic accounting. - Create an expense paid by the company with a linked SO. - Disable Analytic Accounting (also ensure the analytic distribution in the journal entry is False at this point) - Try to reset the Expense or its journal entry back to draft. This issue happens because the code assumes that the analytic distribution is always
Original PR description
This fix solves a specific corner case where the analytic distribution could False by defaulting to an empty list. To reproduce the issue: - Enable analytic accounting. - Create an expense paid by the company with a linked SO. - Disable Analytic Accounting (also ensure the analytic distribution in the journal entry is False at this point) - Try to reset the Expense or its journal entry back to draft. This issue happens because the code assumes that the analytic distribution is always a list, which might not since analytic accounting is disabled. opw-4710518 Forward-Port-Of: odoo/odoo#207221
This commit is a hack to work around the module loading order without creating a new bridge module, to fix the issue in stable versions. ### Steps to reproduce: 1. Install both `stock`, `delivery` and `mrp` 2. Create a product with a kit BOM and weight - Set the kit UoM to Unit and the components to Kg - Add a weight to the components too 3. Create SO with the kit product 4. Add shipping (UPS) 5. Delivery product 6. `The unit of measure Unit defined on the order line doesn't bel
Original PR description
This commit is a hack to work around the module loading order without creating a new bridge module, to fix the issue in stable versions. ### Steps to reproduce: 1. Install both `stock`, `delivery`…
This commit is a hack to work around the module loading order without creating a new bridge module, to fix the issue in stable versions. ### Steps to reproduce: 1. Install both `stock`, `delivery` and `mrp` 2. Create a product with a kit BOM and weight - Set the kit UoM to Unit and the components to Kg - Add a weight to the components too 3. Create SO with the kit product 4. Add shipping (UPS) 5. Delivery product 6. `The unit of measure Unit defined on the order line doesn't belong to the same category as the unit of measure Kg` The sale price computed in `stock_delivery` does not take kits into account, which leads to conversion of UoM from different products (and therefore different UoM categories). However, `sale_mrp` already computes the right value for kits. It worked in earlier versions, thanks to the module loading order, but `_compute_sale_price` moved from the module `delivery` to `stock_delivery`. Here is the (simplified) module dependency graph: ``` Odoo 16.0: sale `-> sale_management `-> delivery `-> sale_stock `-> sale_mrp Odoo 17.0: sale `-> delivery `-> stock_delivery `-> sale_stock `-> sale_mrp ``` Odoo sorts modules by depth in the graph, and ordered alphabetically for modules with the same depth. So in Odoo 16.0, `delivery` was loaded before `sale_mrp`, but starting Odoo 17.0, `stock_delivery` is loaded after `sale_mrp` since they both have the same depth. opw-4385052 Forward-Port-Of: odoo/odoo#206753 Forward-Port-Of: odoo/odoo#190750
Before this commit, the test "Message shows up even if channel data is incomplete" would sometimes fail. This happened because it waited for a bus subscription triggered by a call to the `_forceUpdateChannel` method of the bus service. However, this method is debounced, and as a result, the subscription sometimes occurred too late, causing the test to fail. This commit resolves the issue by using `runAllTimers`, which immediately executes the debounced method. fixes runbot-76011 Forward-P
Original PR description
Before this commit, the test "Message shows up even if channel data is incomplete" would sometimes fail. This happened because it waited for a bus subscription triggered by a call to the `_forceUpdateChannel` method of the bus service. However, this method is debounced, and as a result, the subscription sometimes occurred too late, causing the test to fail. This commit resolves the issue by using `runAllTimers`, which immediately executes the debounced method. fixes runbot-76011 Forward-Port-Of: odoo/odoo#208015 Forward-Port-Of: odoo/odoo#207914
<b>Steps to reproduce:</b> 1. Setting > Navigate to Configure Document layout > layout : DIN 5008. 2. Accounting > invoice > PDF without Payment. Note :Ensure the address has at least 33 characters without spaces to trigger the issue. <b>Issue:</b> The footer of the invoice is not displaying correctly — the company name in the bottom left corner is overlapping and not aligned properly. <b>Cause:</b> An upstream PR modified the footer text sizing, leading to layout issues
Original PR description
<b>Steps to reproduce:</b> 1. Setting > Navigate to Configure Document layout > layout : DIN 5008. 2. Accounting > invoice > PDF without Payment. Note :Ensure the address has at least 33 characters…
<b>Steps to reproduce:</b> 1. Setting > Navigate to Configure Document layout > layout : DIN 5008. 2. Accounting > invoice > PDF without Payment. Note :Ensure the address has at least 33 characters without spaces to trigger the issue. <b>Issue:</b> The footer of the invoice is not displaying correctly — the company name in the bottom left corner is overlapping and not aligned properly. <b>Cause:</b> An upstream PR modified the footer text sizing, leading to layout issues when fields contain long values. <b>Solution:</b> Removed the `text-nowrap` class from the company details in the footer section. Improved section alignment using `colspan` and made minor adjustments to footer text sizing. These changes prevent content overlap in the company information section of reports, ensuring proper display regardless of content length. <b>opw: 4731515</b> Before changes applied:  After changes applied:  Forward-Port-Of: odoo/odoo#206774
The Web Studio test suite was adjusted to stay aligned with recent chatter behavior changes from the related community update. This helps keep quality checks reliable without changing the day-to-day user experience.
Original PR description
PR community https://github.com/odoo/odoo/pull/207759 Task-4685400
Users will now see a more helpful message if the OCR service version used by their Odoo installation is no longer supported. This replaces a generic error with clearer guidance, reducing confusion when document scanning cannot proceed.
Original PR description
When the OCR version used in this version of Odoo won't be supported anymore, the users will get a more meaningful message than "An error occurred", the default error message. task-none
Miscellaneous changes
In this commit, we prefer to use click on element instead of press Tab because tab will directly focus the other range period input. Forward-Port-Of: odoo/enterprise#83395 Forward-Port-Of: odoo/enterprise#82937
Original PR description
In this commit, we prefer to use click on element instead of press Tab because tab will directly focus the other range period input. Forward-Port-Of: odoo/enterprise#83395 Forward-Port-Of: odoo/enterprise#82937
The compute method was removed in this commit, but is declared in the field. commit : https://github.com/odoo/enterprise/commit/70d96c44bb834ecbe89b5720ae18a93038301796#diff-2f3d348951d6293f7e805819d7053ac4ec65994bbacc829dac5dc68b00c932c> Traceback: --- `AttributeError: 'product.product' object has no attribute '_compute_pricer_display_price'` This commit removes the compute declaration from the field. sentry-6547636163 Forward-Port-Of: odoo/enterprise#83599
Original PR description
The compute method was removed in this commit, but is declared in the field. commit : https://github.com/odoo/enterprise/commit/70d96c44bb834ecbe89b5720ae18a93038301796#diff-2f3d348951d6293f7e805819d7053ac4ec65994bbacc829dac5dc68b00c932c> Traceback: --- `AttributeError: 'product.product' object has no attribute '_compute_pricer_display_price'` This commit removes the compute declaration from the field. sentry-6547636163 Forward-Port-Of: odoo/enterprise#83599
Currently, the “Unpaid” and “Late” buttons in the sale journal dashboard used the total invoice amount instead of the remaining due amount when account_3way_match was installed. Steps to reproduce: - Install account_3way_match - Create and partially pay an invoice - Go to the dashboard - The displayed amount should reflect the residual, but it shows the full amount This fix restores the expected behavior by using the same logic as the original `_get_open_sale_purchase_query` to compute
Original PR description
Currently, the “Unpaid” and “Late” buttons in the sale journal dashboard used the total invoice amount instead of the remaining due amount when account_3way_match was installed. Steps to reproduce: - Install account_3way_match - Create and partially pay an invoice - Go to the dashboard - The displayed amount should reflect the residual, but it shows the full amount This fix restores the expected behavior by using the same logic as the original `_get_open_sale_purchase_query` to compute `amount_total` and `amount_total_company`. opw-4731478 Forward-Port-Of: odoo/enterprise#83823
Forward-Port-Of: odoo/enterprise#84045 Forward-Port-Of: odoo/enterprise#84014
Original PR description
Forward-Port-Of: odoo/enterprise#84045 Forward-Port-Of: odoo/enterprise#84014
The aim of this commit is slightly changing the chatter's behavior in the bank reconciliation widget. Before this commit, the user activated/deactivated the chatter by clicking on a chatter icon available on each statement line. Although this feature is still existing to activate the chatter, we add a new button on the top corner right where the user can activate / deactivate the chatter. We also change the selected move id when you select another statement line, it's not necessary to click on
Original PR description
The aim of this commit is slightly changing the chatter's behavior in the bank reconciliation widget. Before this commit, the user activated/deactivated the chatter by clicking on a chatter icon available on each statement line. Although this feature is still existing to activate the chatter, we add a new button on the top corner right where the user can activate / deactivate the chatter. We also change the selected move id when you select another statement line, it's not necessary to click on the chatter icon to do it. This commit also introduces a cleaner way of working with several components to activate / deactivate the chatter by using a customer service. task-4750009 [FIX] account_accountant: Remove bus usage and use own service The aim of this commit is removing 2 usages of the event bus where we need to do synchronous calls. This commit will use the brand-new service developed for the bank reconciliation widget. no task id Forward-Port-Of: odoo/enterprise#84283
This fixes an issue where clearing cached Point of Sale order lines could leave some lines behind. The cleanup now removes all affected lines reliably, reducing the chance of checkout or order processing errors.
Original PR description
Before this commit, clearing lines in the sanitize data cache used a forward iteration, which caused some lines to be skipped due to index shifting when deleting items. This could result in only half of the lines being removed and potentially lead to errors. After this commit, order lines are deleted using a backward iteration, ensuring that all lines are properly removed without skipping any. opw-4770945 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an issue where customer review comments and message text could become hard to read when a website shop used a dark theme. The change keeps review text visible against the light review bubbles, improving the shopping experience for visitors and editors.
Original PR description
<b>Steps to reproduce:</b> 1. Website > shop > Open any product > Open Editor(Edit) 2. Customize → Navigate to Customer → Click on Rating. 3. Theme → Navigate to Colors → Navigate to Light & Dark >…
<b>Steps to reproduce:</b> 1. Website > shop > Open any product > Open Editor(Edit) 2. Customize → Navigate to Customer → Click on Rating. 3. Theme → Navigate to Colors → Navigate to Light & Dark > Choose Dark theme. <b>Issue:</b> Website Shop, when using a dark background, the text in write a message box and comment bubbles in reviews sections becomes white making it invisible. <b>Cause:</b> In light mode, the text appears black, making it easy to read. However, when switching to dark mode, the text changes to white, which makes it difficult to read against the light bubble background. <b>Solution:</b> This commit adds class text-black to the comment and description container to improve the visibility. <b>opw : 4724764</b> <b>BUG:</b>    <b>FIX:</b>   
Tasks created from sales orders will again include the relevant sales line description in their title. This makes generated tasks easier to identify and restores expected behavior from earlier versions.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a service product that creates a task on confirm; 2. add product to a SO; 3. add description to the line; 4. confirm the order; 5. go to the task. Issue…
Versions -------- - 18.0+ Steps ----- 1. Have a service product that creates a task on confirm; 2. add product to a SO; 3. add description to the line; 4. confirm the order; 5. go to the task. Issue ----- The task only has the SO and service product name as title. This is different from earlier versions, where it would include the first line of the line's description. Cause ----- When creating a task from an order line, it uses the first line of the line name as part of the task name, and adds the rest to the description. Starting from 18.0, the product & description columns are merged in order & invoice views. A side-effect of this, is that the product name will always be present as the first line of the product, and any added description will start from the second line. Consequently, it's no longer possible to add a description to the line that would get used as task name. Solution -------- Use the first two lines of the sale line name to form a task title. opw-4634149 opw-4637902
This fixes an issue where Point of Sale could use the wrong numbering format for dates and times when a database uses a non-Latin numbering system. It helps ensure receipts, orders, and synchronized device data show date and time values consistently for affected locales.
Original PR description
When a database isn't in ltn format, the datetime numbering system is not set to the correct value. This commit fixes the issue by ensuring that the datetime numbering system is set to the correct value.
Fixed an issue where sale orders with delivered combo products could still appear ready to invoice after the invoice was confirmed. This keeps invoice status accurate for products billed on delivery and helps prevent duplicate or confusing invoicing actions.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a combo product with only items that are invoiced on delivery; 2. add it to a sale order; 3. validate the delivery; 4. create & confirm an invoice. Issue ----- The sale order is still invoicable. Cause ----- The `qty_to_invoice` field for the combo item line isn't being updated when its linked lines were delivered. Solution -------- Add `linked_line_ids.qty_delivered` to the `api.depends` of the compute method. opw-4633972
This change adjusts an internal automated test so it checks that only the valid customer payment is created, rather than relying on a less relevant status value. It helps keep SEPA direct debit quality checks stable without changing customer-facing behavior.
Original PR description
Here we don't really care about the state, we replaced it by just checking that there is only one payment and to the "agrolait" partner since it has a valid mandate. build_error-163134
This update adjusts an internal automated test for SEPA Direct Debit so it checks the important payment details rather than a status that can vary after demo data changes. It helps keep the test suite reliable without changing customer-facing behavior.
Original PR description
There's been quite a lot of refactoring of demo-data and stuff so now the setup may have been changed in the background Here we don't really care about the state, so we can replace it by just checking that there is 2 payments and to the "agrolait" partner and "china_export" partner build_error-163133
Documentation and clarification updates
This pull request adds contributor license agreement records for individual contributors and includes a small compatibility fix for internal lint testing. It helps keep contribution records complete while maintaining automated checks on supported Python versions.
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
Miscellaneous changes
**Problem:** When adding a product that has the landed cost setting activated to a Vendor Bill, the landed cost checkbox was not checked, thus the product was not registered with a landed cost in the Vendor Bill. Adding the product straight from the vendor bill worked fine. **Steps to reproduce:** - Make a product with a landed cost. - Make a new vendor bill and go to the catalog from the Invoice Lines tab. - Search for your product and add it to the Vendor Bill. - Return to the Vendo
Original PR description
**Problem:** When adding a product that has the landed cost setting activated to a Vendor Bill, the landed cost checkbox was not checked, thus the product was not registered with a landed cost in the…
**Problem:** When adding a product that has the landed cost setting activated to a Vendor Bill, the landed cost checkbox was not checked, thus the product was not registered with a landed cost in the Vendor Bill. Adding the product straight from the vendor bill worked fine. **Steps to reproduce:** - Make a product with a landed cost. - Make a new vendor bill and go to the catalog from the Invoice Lines tab. - Search for your product and add it to the Vendor Bill. - Return to the Vendor Bill and see that the landed cost is not checked. **Cause of the issue:** The field is_landed_costs_line is set in an onchange function, thus when adding a product from the catalog the said function is not triggered and the is_landed_costs_line is not applied. https://github.com/odoo/odoo/blob/01058b94d860ab508bc2c013af5fe887e08247d9/addons/stock_landed_costs/models/account_move.py#L61-L66 **Fix:** An override of the create function was added to add the correct landed cost even when the onchange function is not called. With the onchange function and the create function, this ensures that the is_landed_costs_line will be set correctly regardless of where it is created from. opw-4521391 Forward-Port-Of: odoo/odoo#201622
We predict the account to use in an invoice/purchase entries based on product configuration and frequent account used for partner but we do not verify if those accounts are allowed on the specified journal. This can be problematic if the entry is generated from a external file (ex: using Peppol), Odoo should retrieve an account allowed in the journal. Steps to reproduce: 1. Have two purchase journal A and B on the same company 2. Set an expense account that is allowed on one of those journa
Original PR description
We predict the account to use in an invoice/purchase entries based on product configuration and frequent account used for partner but we do not verify if those accounts are allowed on the specified journal. This can be problematic if the entry is generated from a external file (ex: using Peppol), Odoo should retrieve an account allowed in the journal. Steps to reproduce: 1. Have two purchase journal A and B on the same company 2. Set an expense account that is allowed on one of those journal (A) and not the other (B) 3. Create multiple bills with this account on the journal A for partner X 4. Upload a XML bill of partner X in journal B -> The expense account is used based on the bills in journal A -> Error because journal B is not allowed for this account opw-4607733 Forward-Port-Of: odoo/odoo#206104 Forward-Port-Of: odoo/odoo#203664
…dd it in the tax details 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 Forward-Port-Of: odoo/odoo#207100 Forward-Port-Of: odoo/odoo#206052
Original PR description
…dd it in the tax details 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 Forward-Port-Of: odoo/odoo#207100 Forward-Port-Of: odoo/odoo#206052
**Problem:** The problem happens when a service is linked to a task but it's not billed on timesheet. If a quotation is created with this service (which creates the task linked to it) and a timesheet is added to the task, this will trigger a recompute of `purchase_price` (the cost column) of the sale order line in the quotation. If the client had written another cost on the sale order line of the quotation than the original one (coming from the `standard_price` of the product) this will
Original PR description
**Problem:** The problem happens when a service is linked to a task but it's not billed on timesheet. If a quotation is created with this service (which creates the task linked to it) and a timesheet…
**Problem:** The problem happens when a service is linked to a task but it's not billed on timesheet. If a quotation is created with this service (which creates the task linked to it) and a timesheet is added to the task, this will trigger a recompute of `purchase_price` (the cost column) of the sale order line in the quotation. If the client had written another cost on the sale order line of the quotation than the original one (coming from the `standard_price` of the product) this will erase it and set the value back to the standard price of the product. Because the service is not billed on timesheet we don't want a modification of timesheet to affect the cost set on the quotation. **Steps to reproduce:** - In settings, activate the "margins" setting in Sales - Open Sales/products and create a new product - Set the product type as "Service" - Set the "create on order" field as Task - Set the "project" field to an existing project - Set a strictly positive value in the cost field - Set a name and save - Create a new quotation and add the product you just created - Confirm the quotation - In the order lines page, add the cost column - Change the value of the cost column - Click on the "Tasks" smart button - Add a new timesheet in the timesheet page and save - Come back to the sale order via the smart button **Current behavior:** The value of the cost column was reset the the cost of the product **Expected behavior:** Mofifying the timesheets shouldn't impact the cost of a service which is not invoiced on timesheets **Cause of the issue:** Because the sale_timesheet_margin module is installed the _compute_purchase_price method is overriden and depends on analytic_line_ids.amount https://github.com/odoo/odoo/blob/c335d03e776014e0b7172a3f44507404a083aaed/addons/sale_timesheet_margin/models/sale_order_line.py#L8 when this method is called in our flow, because sol.product_id.purchase_price is not null our sale order line will not get filtered out https://github.com/odoo/odoo/blob/c335d03e776014e0b7172a3f44507404a083aaed/addons/sale_timesheet_margin/models/sale_order_line.py#L11 and it will reach the original _compute_purchase_price method were the value of purchase_price will be reset to the value of self.product_id.standard_price https://github.com/odoo/odoo/blob/c335d03e776014e0b7172a3f44507404a083aaed/addons/sale_margin/models/sale_order_line.py#L30 **Fix:** We want to filter out the sale.order.lines for which the computation of purchase_price has been triggered via the analytic_line_ids.amount dependency and for which we don't want the computation to happen (when the service_policy is not "timesheet"). We need to do this without filtering out the sales.order.lines for which the computation of purchase_price has been triggered by a dependency from the original compute_purchase_price method https://github.com/odoo/odoo/blob/11cdfe50bda17b004249546a67708e954b3667fc/addons/sale_margin/models/sale_order_line.py#L20-L21 or another orverride of this method (for now there are two of those : one in sale_expense_margin https://github.com/odoo/odoo/blob/11cdfe50bda17b004249546a67708e954b3667fc/addons/sale_expense_margin/models/sale_order_line.py#L10-L11 and one in sale_stock_margin https://github.com/odoo/odoo/blob/11cdfe50bda17b004249546a67708e954b3667fc/addons/sale_stock_margin/models/sale_order_line.py#L10-L11 ) is_expense is defined in the sale module is_service is defined in the sale_service module service_policy is defined in the sale_project module all those field are available when sale_timesheet_margin is installed opw-4627037 Forward-Port-Of: odoo/odoo#205415
Description of the issue/feature this PR addresses: Wrong address/zip/city in Swiss QR bill template. Current behavior before PR: The template for Swiss QR bills uses the company address, zip code and city. Desired behavior after PR is merged: The template for Swiss QR bills uses the address/zip/city of the creditor's bank account, if available. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207640
Original PR description
Description of the issue/feature this PR addresses: Wrong address/zip/city in Swiss QR bill template. Current behavior before PR: The template for Swiss QR bills uses the company address, zip code and city. Desired behavior after PR is merged: The template for Swiss QR bills uses the address/zip/city of the creditor's bank account, if available. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207640
The SpreadsheetName component is designed to grow indefinitely with the length of its text content. However, this means that it'll end up breaking the page layout. This revisions revisits the component structurea and embedding to prevent it from growing larger than the visible viewport of the client. Task: 4760366 Forward-Port-Of: odoo/enterprise#84410
Original PR description
The SpreadsheetName component is designed to grow indefinitely with the length of its text content. However, this means that it'll end up breaking the page layout. This revisions revisits the component structurea and embedding to prevent it from growing larger than the visible viewport of the client. Task: 4760366 Forward-Port-Of: odoo/enterprise#84410
Version: - saas-17.4 Steps to reproduce: - Create request signature activity for sign request. - Try to send document for sign from activity. Issue: - It will give a traceback to user. Cause: - It will try to create a record for 'sign.request' model and in reference_doc field it was showing wrong value as we are not allowing to create reference_doc for 'sign.request' model. Solution: - Since reference_doc is not supported for 'sign.request', this fix adds a condition to explici
Original PR description
Version: - saas-17.4 Steps to reproduce: - Create request signature activity for sign request. - Try to send document for sign from activity. Issue: - It will give a traceback to user. Cause: - It will try to create a record for 'sign.request' model and in reference_doc field it was showing wrong value as we are not allowing to create reference_doc for 'sign.request' model. Solution: - Since reference_doc is not supported for 'sign.request', this fix adds a condition to explicitly skip setting it for that model task-4416253 Forward-Port-Of: odoo/enterprise#75611
Forward-Port-Of: odoo/enterprise#84045 Forward-Port-Of: odoo/enterprise#84014
Original PR description
Forward-Port-Of: odoo/enterprise#84045 Forward-Port-Of: odoo/enterprise#84014
Before This **PR**: If a company attempted to generate a GST token using a GST number already assigned to another company with a valid token, the system returned an ambiguous error: {'message': 'API access is not available or user expiry duration is less than or equal to auth token expiry duration', 'error_cd': 'AUTH4037'}. This caused confusion for users, as the message did not clearly indicate the issue. After This **PR**: A new function has been introduced to check whether another compa
Original PR description
Before This **PR**:
If a company attempted to generate a GST token using a GST number already assigned to another company with a valid token, the system returned an ambiguous error: {'message': 'API access is not available or user expiry duration is less than or equal to auth token expiry duration', 'error_cd': 'AUTH4037'}. This caused confusion for users, as the message did not clearly indicate the issue.
After This **PR**:
A new function has been introduced to check whether another company has the same GST number and a valid token before sending the request. If such a case is detected, the system now displays a warning, recommending the use of a Tax Unit.
**task**-4636041
Forward-Port-Of: odoo/enterprise#84528
Forward-Port-Of: odoo/enterprise#81218