Sunday, March 2, 2025
9 changes · saas-18.2
Enhancements to existing features
The Vendor Bills smart button on partner records is now provided by the Accounting app instead of Purchase. This keeps the button available where accounting users expect it while avoiding duplicate buttons when both apps are installed or updated.
Original PR description
Move the Vendor Bills smart button from the `purchase` module to the `account` module. The views records in `purchase` module are kept as but made empty so that if the user updates the `account` module, it will also update the `purchase` module and hide the smart button from the `purchase` to only keep the new one from the `account` module. task-4584035
Miscellaneous changes
CUP and CIG fields for the Italian Localization are available in account moves and are used when the buyer is a Public Administration or utilizes public funds for payment. However, in some cases, these fields are already necessary in the Sales Order. Therefore, this commit adds the CUP and CIG fields to eligible Sales Orders and automatically adds said fields to the Invoice generated from the SO. The fields Origin Document Type, Origin Document Name, Origin Document Date are also added to
Original PR description
CUP and CIG fields for the Italian Localization are available in account moves and are used when the buyer is a Public Administration or utilizes public funds for payment. However, in some cases, these fields are already necessary in the Sales Order. Therefore, this commit adds the CUP and CIG fields to eligible Sales Orders and automatically adds said fields to the Invoice generated from the SO. The fields Origin Document Type, Origin Document Name, Origin Document Date are also added to the Sales Order. If the fields are filled, then the values are passed to the invoice. If the fields are empty, then the Origin Document fields in the invoice are filled with information about the SO which originated it. Task [link](https://www.odoo.com/odoo/project/967/tasks/4290997) task-4290997 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#197267
In the current implementation, updating translations for a `blog.post` via the route `/web/dataset/call_kw/blog.post/web_update_field_translations` fails to apply changes when the post has already been translated once. This issue is caused by how the system fetches `website.default_lang_id` from the request. __Current behavior before commit:__ When editing a previously translated field for `blog.post` or `product.template`, the system retrieves the website from the request to determin
Original PR description
In the current implementation, updating translations for a `blog.post` via the route `/web/dataset/call_kw/blog.post/web_update_field_translations` fails to apply changes when the post has already…
In the current implementation, updating translations for a `blog.post` via the route `/web/dataset/call_kw/blog.post/web_update_field_translations` fails to apply changes when the post has already been translated once. This issue is caused by how the system fetches `website.default_lang_id` from the request. __Current behavior before commit:__ When editing a previously translated field for `blog.post` or `product.template`, the system retrieves the website from the request to determine the `source_lang`. This is used to search for the original term in the source language and update its translation. However, due to the `website=True` parameter not being set for the controller,the system defaults to English (`source_lang = 'en_US'`). As a result: 1. The system searches for the original word in English, even if it exists in another language. 2. The translation update fails because the original word cannot be found in English. __Description of the fix:__ A new controller was introduced to specifically handle translation updates, ensuring the correct language is fetched and the translation logic is applied correctly. __Steps to reproduce the issue:__ 1. Add 2 or more languages to the website. 2. Set the default language to any language other than English (US). 3. Create a blog post and write text in the default language. 4. Switch to another language, translate the text and save. 5. Edit the translated text again. The last edits are not saved. - bug introduced in: [#06346b0][1] - opw-4239512 [1]: https://github.com/odoo/odoo/commit/06346b049a3a13a9a8b63a4f60151ec24fabb59e Forward-Port-Of: odoo/odoo#195794 Forward-Port-Of: odoo/odoo#184415
If there are IAP accounts that share the same token, it would cause a crash when fetching the accounts information from the IAP server. It wasn't anticipated that two IAP account records could share the same token. This doesn't happen under normal circumstances, it can only happen if the accounts were manually duplicated (which should never be done). The error actually only happens for duplicated SMS accounts, as the function `_get_account_info` in which the crash occurs is compatible with
Original PR description
If there are IAP accounts that share the same token, it would cause a crash when fetching the accounts information from the IAP server. It wasn't anticipated that two IAP account records could share the same token. This doesn't happen under normal circumstances, it can only happen if the accounts were manually duplicated (which should never be done). The error actually only happens for duplicated SMS accounts, as the function `_get_account_info` in which the crash occurs is compatible with recordset containing > 1 record in the main definition, but not in the override of the SMS module. opw-4571624 Forward-Port-Of: odoo/odoo#199451
Steps: - Install account app. - Go to invoice add a product. - Update product description from invoice line. - Print invoice. Issue: - Product name is missing in PDF file. Cause: - Updating line name remove product name from line name and only add newly added string description. In `product_label_section_and_note_field` widget we only display description without product name in description input even description contains product name in it but when user update that description input
Original PR description
Steps: - Install account app. - Go to invoice add a product. - Update product description from invoice line. - Print invoice. Issue: - Product name is missing in PDF file. Cause: - Updating line name remove product name from line name and only add newly added string description. In `product_label_section_and_note_field` widget we only display description without product name in description input even description contains product name in it but when user update that description input we forgot to take product name into account. Fix: - Take product name into account when updating description from that widget. opw-4599839 opw-4603802 opw-4571431 Forward-Port-Of: odoo/odoo#199529
**Issue:** The COA for the French localization has been updated in 2025. Some accounts have been replaced or removed and the reports have been updated with the new formulas. However, the reports from 2024 are still needed for those who need to print a report for 2024. **Solution:** Restore the old reports from 2024 as variants. opw-4566689 opw-4590293 opw-4572865 Forward-Port-Of: odoo/enterprise#80358 Forward-Port-Of: odoo/enterprise#79946
Original PR description
**Issue:** The COA for the French localization has been updated in 2025. Some accounts have been replaced or removed and the reports have been updated with the new formulas. However, the reports from 2024 are still needed for those who need to print a report for 2024. **Solution:** Restore the old reports from 2024 as variants. opw-4566689 opw-4590293 opw-4572865 Forward-Port-Of: odoo/enterprise#80358 Forward-Port-Of: odoo/enterprise#79946
### Issue: Since 18.0, the catalog is used in certain actions of the shopfloor However, if you leave the catalog fast enough after your last change (something of the order of ~0.5 sec in localhost), you can trigger a reload of the shopfloor records and call a `web_read` prior to the update of these records. ### Note: This is easily reproducible by hand in localhost and should worsen if you have server delay. In addition, it makes it impossible to write a proper tour involving the catalo
Original PR description
### Issue: Since 18.0, the catalog is used in certain actions of the shopfloor However, if you leave the catalog fast enough after your last change (something of the order of ~0.5 sec in localhost),…
### Issue: Since 18.0, the catalog is used in certain actions of the shopfloor However, if you leave the catalog fast enough after your last change (something of the order of ~0.5 sec in localhost), you can trigger a reload of the shopfloor records and call a `web_read` prior to the update of these records. ### Note: This is easily reproducible by hand in localhost and should worsen if you have server delay. In addition, it makes it impossible to write a proper tour involving the catalog in the shopfloor. ### Steps to reproduce: - Create a product with a bom and an operation op1 - Create and confirm an MO for 1 unit of that product - Go to the shopfloor > on the operation > wheel > Add component - Add a component to be consumed in that operation - Close the catalog fast (using ESC for instance) #### > While the componenet was correctly added to the MO and linked to the WO it is not visible on the shopfloor. ### Cause of the issue: When a product is added from the catalog it triggers an rpc call to update the data's of the MO (notably creating a new raw move): https://github.com/odoo/odoo/blob/193c9a49dfc039ee93fbc8e171819236697b5c50/addons/product/static/src/product_catalog/kanban_record.js#L62-L69 https://github.com/odoo/odoo/blob/193c9a49dfc039ee93fbc8e171819236697b5c50/addons/mrp/models/mrp_production.py#L2898-L2901 On the other hand, closing the product catalog will reload the mrp record that started the action that opened the catalog: https://github.com/odoo/enterprise/blob/c1346dd2279bf3882b47b260b8d03ef9651ffaf1/mrp_workorder/static/src/mrp_display/dialog/mrp_menu_dialog.js#L41-L45 Since this reload is currently not waiting for the update of the record the associated `web_read` might be called prior to the last update of the record and the newly created raw moves might not be displayed. ### Fix: We use the props option of the action opening the catalog to transfer a callback to reload the records when all the record update promisses are resolved. #### To be more precise: The `ProductCatalogKanbanController` component contains a list of promises (initially empty): `catalogKanbanUpdates` aswell as an optional callback props `onCatalogUpdated`. This list is going to be populated each time that a `ProductCatalogKanbanRecord` make a quantity update (used stock moves on the mrp.production). To populate this array of promises a method is defined in the controller: `pushCatalogKanbanUpdate`. This method needs to be called by the `KanbanRecords` an hence is transported using xpath from the `ProductCatalogKanbanController` to the `ProductCatalogKanbanRecord` via the `ProductCatalogKanbanRenderer`. Once the controller is detroyed (and hence each kanban record that had to update a quantity started its call) if a callback was given to the props of the Kanban controller we wait for all the update promises to be resolved and we call that call back. opw-4199156 --- Forward-Port-Of: odoo/enterprise#79190 Forward-Port-Of: odoo/enterprise#74151
Following feedbacks from partners and clients, we add the following improvements: - Employee Address on the payslip - Employee bank account on the payslip - Private phone and email on the employee view Forward-Port-Of: odoo/enterprise#80366
Original PR description
Following feedbacks from partners and clients, we add the following improvements: - Employee Address on the payslip - Employee bank account on the payslip - Private phone and email on the employee view Forward-Port-Of: odoo/enterprise#80366
We cannot properly handle the case where one line is shipped from multiple addresses. But we gave up too early: just because one sale line is linked to multiple stock moves doesn't necessarily mean that's the case. Here's an example that uses a single warehouse: 1/ create a sale order with one line with qty 2 2/ confirm the sale order 3/ validate the picking with qty 1 and create backorder for the other 4/ create the invoice from the sale order 5/ compute taxes No line-level address
Original PR description
We cannot properly handle the case where one line is shipped from multiple addresses. But we gave up too early: just because one sale line is linked to multiple stock moves doesn't necessarily mean that's the case. Here's an example that uses a single warehouse: 1/ create a sale order with one line with qty 2 2/ confirm the sale order 3/ validate the picking with qty 1 and create backorder for the other 4/ create the invoice from the sale order 5/ compute taxes No line-level address is sent because len(line.sale_line_ids.move_ids) is 2. This causes Avatax to calculate taxes based on the company address which could result in wrong taxes. After this commit, we only set None if a line was sent from warehouses with different addresses (partner_id). opw-4486746 Forward-Port-Of: odoo/enterprise#80326 Forward-Port-Of: odoo/enterprise#78556