Friday, March 14, 2025
64 changes · saas-18.2
Resolved issues and error corrections
Accounting demo data now checks whether related demo records are available before using them. This prevents test and installation failures in cases where demo data is being installed selectively, without changing the normal demo-data installation experience.
Original PR description
Check if demo data is present instead of referencing it directly, this allows to test installing demo data while not relying on demo data being installed. No changes for regular installation with demo data, while no demo installation will have very minimal new records when loading account demo data. Runbot Error 134673
Point of Sale now creates all required local data tables before reading stored data, preventing errors during local or offline access. It also skips unnecessary empty data updates, improving reliability without changing the user workflow.
Original PR description
Previously, tables defined in DataServiceOptions but missing from relations were not created, causing failures when reading local data via `getLocalDataFromIndexedDB`. Additionally, empty delete or add operations triggered unnecessary transactions. This fix addresses these issues by: - Ensuring all missing tables are correctly created. - Avoiding unnecessary transactions caused by empty delete/add operations.
This fixes the layout of Colombian DIAN-related journal settings so required localization fields appear in the right place and remain readable. Users configuring sales or purchase journals in South American localizations can now see the relevant fields below the Reload DIAN Configuration button as intended.
Original PR description
For the Reload DIAN Configuration button, a newly added class modifies the `colspan` of the surrounding `<div>`, forcing it to `colspan="1"` and causing the fields to be positioned next to the button incorrectly. **To Reproduce:** 1. Install the Accounting app and the `l10n_co_dian` module. 2. Navigate to Accounting > Configuration > Journals. 3. Open a Sales or Purchase Journal. 4. Observe that some localization fields are missing, misplaced, or unreadable. Community PR: odoo/odoo#201227 Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4601714) opw-4601714
The VoIP app was updated to stop relying on an outdated mobile phone field in contact records. This helps avoid incorrect or missing caller and contact details when using VoIP features.
Original PR description
backport of #78996
Code cleanup and technical improvements
This update centralizes how related purchase orders are searched from sales order lines. It reduces duplicated logic, making future changes safer and easier to maintain without changing the user experience.
Original PR description
This commit add a helper method for defining the purchase order search domain. The goal is to avoid code duplication in overridden methods and simplify future maintenance of code. If any modifications to the search domain can now be made in a single place, which will improving maintainability. Task-4578812 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
**Issue** Re-installing Project is not possible if the Project Share Wizard has been used shortly before the module uninstallation. **Cause** The `project_share_wizard_res_partner_rel` table for the `partner_ids` field of the `project.share.wizard` is not dropped at uninstall (this is a known ORM limitation) and if it contains rows, restoring the foreign keys constraint for the `project_share_wizard_id` column will fail. **Solution** Ensure the table is empty after uninstall. **Steps
Original PR description
**Issue** Re-installing Project is not possible if the Project Share Wizard has been used shortly before the module uninstallation. **Cause** The `project_share_wizard_res_partner_rel` table for the…
**Issue** Re-installing Project is not possible if the Project Share Wizard has been used shortly before the module uninstallation. **Cause** The `project_share_wizard_res_partner_rel` table for the `partner_ids` field of the `project.share.wizard` is not dropped at uninstall (this is a known ORM limitation) and if it contains rows, restoring the foreign keys constraint for the `project_share_wizard_id` column will fail. **Solution** Ensure the table is empty after uninstall. **Steps to reproduce** - Project Kanban View > 3 dots > Share - Add a recipient and Send: this should add a row to the `project_share_wizard_res_partner_rel` table. - Uninstall Project shortly after (before the row is deleted by the auto-vacuum). - Try to re-install Project: ``` The operation cannot be completed: another model requires the record being deleted. If possible, archive it instead. Model: Unknown (unknown) Constraint: project_share_wizard_res_partner_r_project_share_wizard_id_fkey ``` opw-4593125 Forward-Port-Of: odoo/odoo#201712 Forward-Port-Of: odoo/odoo#200555
Scenario: - create marketing email in 17.0 or above - use the Cover widget - change the cover image to get a base64 endoded image - send the mail Result: no image is sent Cause: commit 1605b81b12e0dee78905e6eb3526fdb7e4908050 could have issue when parsing the CSS because of having inside a CSS value eg. url("data:image/webp;base64,..."), then when the CSS was modified, the background image would be broken (with a :undefined after the value). Fix: instead of replacing all the style to change t
Original PR description
Scenario:
- create marketing email in 17.0 or above
- use the Cover widget
- change the cover image to get a base64 endoded image
- send the mail
Result: no image is sent
Cause: commit 1605b81b12e0dee78905e6eb3526fdb7e4908050 could have issue
when parsing the CSS because of having inside a CSS value eg.
url("data:image/webp;base64,..."), then when the CSS was modified, the
background image would be broken (with a :undefined after the value).
Fix: instead of replacing all the style to change the border-style,
update it with regex.
opw-4613524
Forward-Port-Of: odoo/odoo#201685
Forward-Port-Of: odoo/odoo#201394Steps to reproduce the bug: - Create a storable product “P1”: - UoM: Kg - Create a delivery order: - product: P1 - qty: 100 g - Mark the delivery as "To Do" - Set the quantity to 100 g - Go to the product form of P1 → Update quantity Problem: The reserved quantity is set to 100 kg instead of 0.1 kg opw-4638315 Forward-Port-Of: odoo/odoo#201431 Forward-Port-Of: odoo/odoo#201237
Original PR description
Steps to reproduce the bug:
- Create a storable product “P1”:
- UoM: Kg
- Create a delivery order:
- product: P1
- qty: 100 g
- Mark the delivery as "To Do"
- Set the quantity to 100 g
- Go to the product form of P1 → Update quantity
Problem:
The reserved quantity is set to 100 kg instead of 0.1 kg
opw-4638315
Forward-Port-Of: odoo/odoo#201431
Forward-Port-Of: odoo/odoo#201237### Steps to reproduce: - In the settings enable purchase > dropshipping - Create a new user "BOB". Enable debug mode and set it as a portal user. Note: you can click on the wheel to change its password. - Create a product FP tracked by SN, "BOB" as vendor and a bom of type subcontracting: 1 x COMP (tracked by SN), subcontracted by "BOB" - On COMP, check the routes "Buy" and "Dropship Subcontractor on Order" and set a vendor price list. - Create and confirm a purchase order for 2 units of
Original PR description
### Steps to reproduce: - In the settings enable purchase > dropshipping - Create a new user "BOB". Enable debug mode and set it as a portal user. Note: you can click on the wheel to change its…
### Steps to reproduce: - In the settings enable purchase > dropshipping - Create a new user "BOB". Enable debug mode and set it as a portal user. Note: you can click on the wheel to change its password. - Create a product FP tracked by SN, "BOB" as vendor and a bom of type subcontracting: 1 x COMP (tracked by SN), subcontracted by "BOB" - On COMP, check the routes "Buy" and "Dropship Subcontractor on Order" and set a vendor price list. - Create and confirm a purchase order for 2 units of FP for BOB - A dropship Purchase Order is created for 2 units of COMP > confirm it - In the Portal view, as BOB, return to the MO related to FP - Click on the "burger" icon of the move and try to change the qty_producing or set a SN for the finished product. #### > you trigger and access right error. ### Cause of the issue: Changing the qty_producing or the serial number of the finished product triggers a call of the `_set_qty_producting`: https://github.com/odoo/odoo/blob/5fb046e7278778cdbefe179d3258a7185a03a1b8/addons/mrp/models/mrp_production.py#L793-L796 During this call, the pickings linked to the MO will be fetchded to determine if the MO is waiting for components to arrive or if the reservation can already be done. https://github.com/odoo/odoo/blob/5fb046e7278778cdbefe179d3258a7185a03a1b8/addons/mrp/models/mrp_production.py#L1223-L1224 However, the portal user does not have the access right to read this record and you are not saved by the `Stock Pickings Subcontractor`, `ir.rule` as this is a dropdhip. ### Note: It was not possible to trigger the issue in 17.0 because prior to: https://github.com/odoo/odoo/blob/5fb046e7278778cdbefe179d3258a7185a03a1b8/addons/mrp/models/mrp_production.py#L466 The dropshipping picking was not linked to the MO and hence we didn't try to access the values of any record we didn't have access to. opw-4485186 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198814
*: portal, website, web_editor Enhance user experience by resolving UI inconsistencies and ensuring readability and contrast between the dropdown active / hover states and their inner text. **Global** - Updated hover effects to use `body-tertiary-bg` instead of `gray-100`, aligning with Bootstrap 5.3's styling approach. - Added color-contrast function's variables to allow easier use in `bootstrap_overridden_frontend` **Dropdowns** - Adjusted active state colors to prevent conflicts
Original PR description
*: portal, website, web_editor Enhance user experience by resolving UI inconsistencies and ensuring readability and contrast between the dropdown active / hover states and their inner text.…
*: portal, website, web_editor Enhance user experience by resolving UI inconsistencies and ensuring readability and contrast between the dropdown active / hover states and their inner text. **Global** - Updated hover effects to use `body-tertiary-bg` instead of `gray-100`, aligning with Bootstrap 5.3's styling approach. - Added color-contrast function's variables to allow easier use in `bootstrap_overridden_frontend` **Dropdowns** - Adjusted active state colors to prevent conflicts between the primary active color and dropdown item text color. - Differentiate two active states: - Active menu entries (current page) ➡️ Primary color - Active feedback on click ➡️ color-contrast of background color - Updated the `o_extra_menu_items` dropdown to adapt the borders to the user theme settings, removing the hardcoded `gray-200` value. **Search & Misc** - Replaced `-webkit-search-cancel-button` with Bootstrap's `btn-close` design introducing a mixin for contextual color adjustments to match the input color. - Changed portal search input type from `text` to `search` ensuring proper styling and semantic. task-3969685 | Before | After | | --- | --- | |  |  | | |  | |  |  | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201351 Forward-Port-Of: odoo/odoo#170922
Previously, the epigrafe validation error was only triggered for non-'is_sale' documents. As a result, invoices without a defined epigrafe failed silently until submission to TicketBAI, causing an unclear TicketBAI error. This fix ensures that the user error appears for invoices as well, preventing the misleading "El XML no cumple el esquema" error. Steps to reproduce: - Set up a Spanish freelance company - Change tax agency to Bizkaia - Try to send an invoice The TicketBAi error `B4
Original PR description
Previously, the epigrafe validation error was only triggered for non-'is_sale' documents. As a result, invoices without a defined epigrafe failed silently until submission to TicketBAI, causing an unclear TicketBAI error.
This fix ensures that the user error appears for invoices as well, preventing the misleading "El XML no cumple el esquema" error.
Steps to reproduce:
- Set up a Spanish freelance company
- Change tax agency to Bizkaia
- Try to send an invoice
The TicketBAi error `B4_1000001: El XML no cumple el esquema.[Linea:17 Columna:5] Error:cvc-complex-type.2.4.b: The content of element 'Ingreso' is not complete. One of '{Renta}' is expected.`
opw-4559069
Forward-Port-Of: odoo/odoo#200012Description of the issue/feature this PR addresses: After installation or uninstallation, trigger the autovacuum cron so that it executes ASAP. Current behavior before PR: Installing and uninstalling modules may create a lot of garbage in the file store, and that garbage seem to last for too long. In particular, many asset files will be regenerated, and old assets immediately become garbage. Desired behavior after PR is merged: After installation or uninstallation, trigger the autovacu
Original PR description
Description of the issue/feature this PR addresses: After installation or uninstallation, trigger the autovacuum cron so that it executes ASAP. Current behavior before PR: Installing and uninstalling modules may create a lot of garbage in the file store, and that garbage seem to last for too long. In particular, many asset files will be regenerated, and old assets immediately become garbage. Desired behavior after PR is merged: After installation or uninstallation, trigger the autovacuum cron so that it executes ASAP. Ideally, it shouldn't be run before old assets are discarded. So maybe the cron should be triggered after some little delay. task-3970360 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#197128
## Versions: 16.0+ ## Issue: When changing the website language from the cart page, the product description is not translated while all other elements of the page are. ## Steps to reproduce: Install at least 2 languages available on website; From the shop, add a product (e.g. "Customizable Desk") to cart; Move to the cart and change language. ## Cause: Description is retrieved without being recomputed with selected language. opw-4485686 Forward-Port-Of: odoo/odoo#201250 Forwar
Original PR description
## Versions: 16.0+ ## Issue: When changing the website language from the cart page, the product description is not translated while all other elements of the page are. ## Steps to reproduce: Install at least 2 languages available on website; From the shop, add a product (e.g. "Customizable Desk") to cart; Move to the cart and change language. ## Cause: Description is retrieved without being recomputed with selected language. opw-4485686 Forward-Port-Of: odoo/odoo#201250 Forward-Port-Of: odoo/odoo#198073
Versions -------- - 16.0+ Steps ----- 1. Have a product with a "No variant" or customer attribute; 2. add product to a sales order. Issue ----- There is a blank line between the product name & attribute descriptor. Cause ----- The `_get_sale_order_line_multiline_description_variants` method returns either an empty string, or a string that starts with 2 newlines. Solution -------- Start with only 1 newline. opw-4585174 Forward-Port-Of: odoo/odoo#201686 Forward-Port-Of:
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have a product with a "No variant" or customer attribute; 2. add product to a sales order. Issue ----- There is a blank line between the product name & attribute descriptor. Cause ----- The `_get_sale_order_line_multiline_description_variants` method returns either an empty string, or a string that starts with 2 newlines. Solution -------- Start with only 1 newline. opw-4585174 Forward-Port-Of: odoo/odoo#201686 Forward-Port-Of: odoo/odoo#201011
Live chat sessions are accessible to live chat managers so they should be able to join or invite anyone to said session. task-4637836 https://github.com/odoo/upgrade/pull/7372 Forward-Port-Of: odoo/odoo#201652 Forward-Port-Of: odoo/odoo#201321
Original PR description
Live chat sessions are accessible to live chat managers so they should be able to join or invite anyone to said session. task-4637836 https://github.com/odoo/upgrade/pull/7372 Forward-Port-Of: odoo/odoo#201652 Forward-Port-Of: odoo/odoo#201321
- Activate wave transfers and group by product or any other, easy to see it by product. - Create a sales order with two different products in the sales order lines - Changed the delivery date in the other info tab. - When confirming the sales order, two transfers will be created, each will have one product. Current behavior: - One picking will respect the scheduled date and the other one will have it for today. Expected: - Both picking have the sale order schedule date. It happens
Original PR description
- Activate wave transfers and group by product or any other, easy to see it by product. - Create a sales order with two different products in the sales order lines - Changed the delivery date in the other info tab. - When confirming the sales order, two transfers will be created, each will have one product. Current behavior: - One picking will respect the scheduled date and the other one will have it for today. Expected: - Both picking have the sale order schedule date. It happens because the picking copy miss some data opw-4571808 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#201535
Before this commit, making a search on name in the overview of the Time Off application without Time Off rights would give an access error. To reproduce: - Connect with a user without Time Off rights (Marc Demo for example) - Go on Time Off > Overview - Make a search on the name - An access error is raised while it shouldn't This commit changes the _search_name method by removing the explicit call to `leave_id` in the domain part not restricted to officers. Forward-Port-Of: odoo/odoo#
Original PR description
Before this commit, making a search on name in the overview of the Time Off application without Time Off rights would give an access error. To reproduce: - Connect with a user without Time Off rights (Marc Demo for example) - Go on Time Off > Overview - Make a search on the name - An access error is raised while it shouldn't This commit changes the _search_name method by removing the explicit call to `leave_id` in the domain part not restricted to officers. Forward-Port-Of: odoo/odoo#200311
Before this commit, since the introduction of the `phone_get_region_data_for_number` function (2d027ad), there was a fallback in case the import failed. However, the fallback method had an incorrect name. Forward-Port-Of: odoo/odoo#201700
Original PR description
Before this commit, since the introduction of the `phone_get_region_data_for_number` function (2d027ad), there was a fallback in case the import failed. However, the fallback method had an incorrect name. Forward-Port-Of: odoo/odoo#201700
Until now, the after_sub are only sent after the start of the event Forward-Port-Of: odoo/odoo#201701
Original PR description
Until now, the after_sub are only sent after the start of the event Forward-Port-Of: odoo/odoo#201701
This commit fixes an undeterministic behavior error in POS. Changing the number of products with "⌫", "8" does not recalculate the number of free products. To recalculate, you must type "⌫", "⌫", "1", "8". 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#201603
Original PR description
This commit fixes an undeterministic behavior error in POS. Changing the number of products with "⌫", "8" does not recalculate the number of free products. To recalculate, you must type "⌫", "⌫", "1", "8". 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#201603
As per the XRechnung invoice standard, the Buyer Reference (BT-10) is now a mandatory field to comply with German law. source: https://en.e-rechnung-bund.de/e-invoicing-faq/xrechnung/ opw-4531928 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201214
Original PR description
As per the XRechnung invoice standard, the Buyer Reference (BT-10) is now a mandatory field to comply with German law. source: https://en.e-rechnung-bund.de/e-invoicing-faq/xrechnung/ opw-4531928 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201214
- Fix issue where the price was displayed on every product card (like in product screen). To fix this we want to only display the price of the card in combo choice. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201672 Forward-Port-Of: odoo/odoo#201437
Original PR description
- Fix issue where the price was displayed on every product card (like in product screen). To fix this we want to only display the price of the card in combo choice. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201672 Forward-Port-Of: odoo/odoo#201437
Have a many2many_tags field, in a form view for instance, with multiple tags. Focus its input, and then quickly press `Backspace` multiple times. Before this commit, there were 2 problems. First, if there was an onchange on that field, the onchange was triggered multiple times with the same forget command, especially on a slow-ish network. Second, there could be a crash, but to reproduce it the timing had to be precise: backspace should have been pressed when a previous tag deletion was al
Original PR description
Have a many2many_tags field, in a form view for instance, with multiple tags. Focus its input, and then quickly press `Backspace` multiple times. Before this commit, there were 2 problems. First, if…
Have a many2many_tags field, in a form view for instance, with multiple tags. Focus its input, and then quickly press `Backspace` multiple times. Before this commit, there were 2 problems. First, if there was an onchange on that field, the onchange was triggered multiple times with the same forget command, especially on a slow-ish network. Second, there could be a crash, but to reproduce it the timing had to be precise: backspace should have been pressed when a previous tag deletion was already processed by the model (i.e. the tag is no longer in the list), but the DOM wasn't updated yet. This could be done more easily then it sounds, by quickly pressing backspace on a many2many_tags with a lot of tags. The related opw is about the second issue, as the first one isn't obversable functionally. However, testing the second one is really tricky, even impossible without going white-box. We thus wrote a test for the first issue only, as the fix for both is actually the same. opw-4596936 Forward-Port-Of: odoo/odoo#201667 Forward-Port-Of: odoo/odoo#201164
Currently the search on total_route_ids always returns `[('id', 'in', [])]` as filtered_domain on an empty recordset returns False. This PR fixes that by first searching on the categories before filtering using the domain --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201542
Original PR description
Currently the search on total_route_ids always returns `[('id', 'in', [])]` as filtered_domain on
an empty recordset returns False.
This PR fixes that by first searching on the categories before filtering using the domain
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#201542If a chat window is closed with the escape key while the composer is focused, the focus out event is never triggered and the focus flag of the composer is never reset. When this flag is kept, new messages received in this channel are automatically marked as read, even if the messages are not actually visible. task-4643664 Forward-Port-Of: odoo/odoo#201586
Original PR description
If a chat window is closed with the escape key while the composer is focused, the focus out event is never triggered and the focus flag of the composer is never reset. When this flag is kept, new messages received in this channel are automatically marked as read, even if the messages are not actually visible. task-4643664 Forward-Port-Of: odoo/odoo#201586
In saas-18.3 we added base module for IoT modules, but this module was not part of the sparse-checkout on IoT Box images, leading to odoo not starting after a checkout. Forward-Port-Of: odoo/odoo#201698
Original PR description
In saas-18.3 we added base module for IoT modules, but this module was not part of the sparse-checkout on IoT Box images, leading to odoo not starting after a checkout. Forward-Port-Of: odoo/odoo#201698
Steps to reproduce: ------------------- - Install 'Project' module - Create a new project - Create 20 tasks and set a large image as `Kanban Cover` for each task (for test purposes, create multiple stages and move the tasks inside them to ensure that all tasks are visible and loaded by default) - Open the Odoo instance in a new incognito browser (or erase cache) - Login and open the created tasks in kanban view Issue: ------ Kanban view is slow to load. Cause: ------ Retrie
Original PR description
Steps to reproduce: ------------------- - Install 'Project' module - Create a new project - Create 20 tasks and set a large image as `Kanban Cover` for each task (for test purposes, create multiple stages and move the tasks inside them to ensure that all tasks are visible and loaded by default) - Open the Odoo instance in a new incognito browser (or erase cache) - Login and open the created tasks in kanban view Issue: ------ Kanban view is slow to load. Cause: ------ Retrieving the covers in their original quality/size. Solution: --------- Hardcode the image height and width in the call of the route so that the retrieved image is cropped/resized. opw-4438965 Forward-Port-Of: odoo/odoo#199395
When importing an xml invoice, we display a generic error in case of Exception. This is useful from a technical point of view but this is obscur for the user. With this commit, in case of a UserError, we add the error message in the chatter. Let's assume a wrong configuration and steps like this: - Belgian demo company, `account_peppol` installed and activated - Make sure there are no moves in `Vendor Bills` journal - On the account 600000, set `Allowed Journals` to be any journal different
Original PR description
When importing an xml invoice, we display a generic error in case of Exception. This is useful from a technical point of view but this is obscur for the user. With this commit, in case of a…
When importing an xml invoice, we display a generic error in case of Exception. This is useful from a technical point of view but this is obscur for the user. With this commit, in case of a UserError, we add the error message in the chatter. Let's assume a wrong configuration and steps like this: - Belgian demo company, `account_peppol` installed and activated - Make sure there are no moves in `Vendor Bills` journal - On the account 600000, set `Allowed Journals` to be any journal different from `Vendor Bills` - From the journal dashboard, vendor bills journal, click on `Fetch from peppol`, then go to the bil that has been created -> In the chatter you will see the error message: "Error importing attachment '2_demo_vendor_bill' as invoice (decoder=_import_invoice_ubl_cii)" This is because we raise the constrains `account_move_line._check_constrains_account_id_journal_id`, but the user will never know until we display the UserRrror message in the chatter. opw-4513344 Forward-Port-Of: odoo/odoo#201566 Forward-Port-Of: odoo/odoo#200694
Before this commit, the field matching of the pivots was changed in place instead of using `this.history`, which caused issues with the undo/redo. Task: 4646822 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#201599
Original PR description
Before this commit, the field matching of the pivots was changed in place instead of using `this.history`, which caused issues with the undo/redo. Task: 4646822 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#201599
This commit fixes a malformed CSS rule (introduced in commit [1]) trying to define the `font-size` of the mentions. In a nutshell, the `rfs()` Bootstrap's mixin has two arguments: - the first is the base size - the second is the property to apply the calculated size to In this case, it generated the following malformed rule: `0.8125rem: 0.8125rem;`. As this rule isn't applied anyway and the visual result is OK, this commit simply removes it. [1]: https://github.com/odoo/odoo/pull/1
Original PR description
This commit fixes a malformed CSS rule (introduced in commit [1]) trying to define the `font-size` of the mentions. In a nutshell, the `rfs()` Bootstrap's mixin has two arguments: - the first is the base size - the second is the property to apply the calculated size to In this case, it generated the following malformed rule: `0.8125rem: 0.8125rem;`. As this rule isn't applied anyway and the visual result is OK, this commit simply removes it. [1]: https://github.com/odoo/odoo/pull/170765 Forward-Port-Of: odoo/odoo#201517
We faced a [warning](https://github.com/odoo/odoo/pull/186467/files#diff-f4c0e9f9d6736a6c5313479e63a48eee140d0e3249932cdcf82d69d0bb7865b1R144) because this update doing a try_loading is called in `post-` scripts (after the module is loaded) and not in `end-` scripts (when all modules are loaded). All l10n_* modules were changed in this PR: https://github.com/odoo/odoo/pull/183359 Regarding the changes in this PR related to Registry: https://github.com/odoo/odoo/pull/186467 see: https://gi
Original PR description
We faced a [warning](https://github.com/odoo/odoo/pull/186467/files#diff-f4c0e9f9d6736a6c5313479e63a48eee140d0e3249932cdcf82d69d0bb7865b1R144) because this update doing a try_loading is called in `post-` scripts (after the module is loaded) and not in `end-` scripts (when all modules are loaded). All l10n_* modules were changed in this PR: https://github.com/odoo/odoo/pull/183359 Regarding the changes in this PR related to Registry: https://github.com/odoo/odoo/pull/186467 see: https://github.com/odoo/odoo/pull/191749 upg-2436225 **Reference Image**  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201096
…CIG or CUP is present **Issue:** When only one of the CIG or CUP fields is filled in the Electronic Invoicing tab, without specifying an Origin Document, the system still allows sending the e-invoice to the tax agency, even though the data is incomplete. **Steps to Reproduce:** 1. Install the Accounting app 2. Install the l10n_it_edi module 3. Navigate to Accounting > Customers > Invoices 4. Select or create an invoice 5. Choose a customer with a PA index 6. Open the Electronic Inv
Original PR description
…CIG or CUP is present **Issue:** When only one of the CIG or CUP fields is filled in the Electronic Invoicing tab, without specifying an Origin Document, the system still allows sending the…
…CIG or CUP is present **Issue:** When only one of the CIG or CUP fields is filled in the Electronic Invoicing tab, without specifying an Origin Document, the system still allows sending the e-invoice to the tax agency, even though the data is incomplete. **Steps to Reproduce:** 1. Install the Accounting app 2. Install the l10n_it_edi module 3. Navigate to Accounting > Customers > Invoices 4. Select or create an invoice 5. Choose a customer with a PA index 6. Open the Electronic Invoicing tab 7. Fill in either the CIG or CUP field, but leave the Origin Document Type empty 8. Click Send & Print 9. No error is displayed and the e-invoice XML can be sent Expected Behavior: An error should be triggered, preventing the e-invoice from being sent if the Origin Document Type is missing, even when only one of CIG or CUP is present. Actual Behavior: The system allows sending the e-invoice despite missing critical information, leading to incomplete data submission. **Root Cause** The existing validation only checks if both CIG and CUP are missing, but it does not account for cases where only one is filled while the Origin Document is still absent. **Fix** The condition has been updated to trigger an error whenever the Origin Document Type is missing, even if only one of CIG or CUP is present. Opw-4590205 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198758
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#201507
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 Forward-Port-Of: odoo/odoo#201507
When we have more than 100 users, we send e-mails in an endless loop because we always process the same records. After this change, we send all e-mails in one call. Backport of odoo/odoo#199091 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199661
Original PR description
When we have more than 100 users, we send e-mails in an endless loop because we always process the same records. After this change, we send all e-mails in one call. Backport of odoo/odoo#199091 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199661
Problem --------- When the certificate or the key is created through SQL INSERT, the compute functions are not triggered. This lead to the 'loading_error' field to remain FALSE. Since the condition that checked whether or not to display the loading error message was "loading_error == ''", it meant that the message would be display when it was equal to FALSE. Instead, we now just check if there is a loading error message with 'not loading_error' which solves the issue and makes it more ro
Original PR description
Problem --------- When the certificate or the key is created through SQL INSERT, the compute functions are not triggered. This lead to the 'loading_error' field to remain FALSE. Since the condition that checked whether or not to display the loading error message was "loading_error == ''", it meant that the message would be display when it was equal to FALSE. Instead, we now just check if there is a loading error message with 'not loading_error' which solves the issue and makes it more robust. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201574
The email domain eim.ae is associated with Etisalat, a major telecommunications provider in the United Arab Emirates. Addresses ending with @eim.ae are commonly used by individuals and businesses in the UAE, similar to how @gmail.com addresses are used globally. That's why we should not use it for detect it similar leads. Reproduce --- - Install crm - Create a lead - Add email with @eim.ae as domain - BUG: Similar lead identified based on the email domain opw-4506179 Forward-Port-
Original PR description
The email domain eim.ae is associated with Etisalat, a major telecommunications provider in the United Arab Emirates. Addresses ending with @eim.ae are commonly used by individuals and businesses in the UAE, similar to how @gmail.com addresses are used globally. That's why we should not use it for detect it similar leads. Reproduce --- - Install crm - Create a lead - Add email with @eim.ae as domain - BUG: Similar lead identified based on the email domain opw-4506179 Forward-Port-Of: odoo/odoo#198963
Before this commit, when opening and closing emoji picker quickly, it could crash with the following error: ``` TypeError: Cannot read properties of null (reading 'querySelector') ``` Steps to reproduce: - Open website editor - Add a new content block - In content block, add banner with `/banner` - spam click quickly on the banner icon This happens because when clicking very quickly on emoji picker button, the `EmojiPicker` component is in a mounted state and the `gridRef.el` is u
Original PR description
Before this commit, when opening and closing emoji picker quickly, it could crash with the following error: ``` TypeError: Cannot read properties of null (reading 'querySelector') ``` Steps to…
Before this commit, when opening and closing emoji picker quickly, it could crash with the following error: ``` TypeError: Cannot read properties of null (reading 'querySelector') ``` Steps to reproduce: - Open website editor - Add a new content block - In content block, add banner with `/banner` - spam click quickly on the banner icon This happens because when clicking very quickly on emoji picker button, the `EmojiPicker` component is in a mounted state and the `gridRef.el` is undefined, thus resulting in the crash when attempting `gridRef.el.querySelector` The grid has no reason to not be in the template. However, the `useRef()` has a special check to determine whether the ref is attached to DOM, and when not then it returns `null`. The website editor uses web editor, which itself mount the emoji picker in a popover. The click handler closes the popover if it was open and re-opens the emoji picker. Close of popover, when too fast, results to destroying popover before the emoji picker, which detaches the emoji picker from DOM, therefore all refs are `null`. The `EmojiPicker` is about to be destroyed, but for a fraction of time it can re-render itself and access to null refs. Emoji picker relies heavily on template to model its matrice of emojis for keyboard navigation and managing overflow of the category navbar. That's why mounting the emoji picker results to 2 renderings. Because of quick mount/unmount, overlay and double rendering of emoji picker, all this puts sometimes the emoji picker in a case of being status "mounted", in a fragment, and calling useEffect to set the active emoji in the grid. This requires `gridRef.el`, which is unfortunately `null` because of being in fragment, thus leading to the crash. This commit fixes the issue by making the code more defensive against `gridRef.el` not be set, to tackle the case the component is in a fragment while it's being unmounted. `navbarRef.el` could also be `null` for a similar reason but instead of useEffect this is triggered from ResizeObserver. Forward-Port-Of: odoo/odoo#201452
[Commit] introduced a `z-index` change for the `form_statusbar` element, which resulted in that element overlapping with the fullscreen view for the `mass_mailing` html_field. The `z-index` of `o_mass_mailing_iframe_ancestor_fullscreen` is adjusted to be just 1 lower than `oe_snippets` (the snippets sidebar), hopefully preventing overlaps in the future. [Commit]: https://github.com/odoo/odoo/commit/a7864fcbc00d245df76b62bbed421b5171dbd4d4 task-4643999 Forward-Port-Of: odoo/odoo#201
Original PR description
[Commit] introduced a `z-index` change for the `form_statusbar` element, which resulted in that element overlapping with the fullscreen view for the `mass_mailing` html_field. The `z-index` of `o_mass_mailing_iframe_ancestor_fullscreen` is adjusted to be just 1 lower than `oe_snippets` (the snippets sidebar), hopefully preventing overlaps in the future. [Commit]: https://github.com/odoo/odoo/commit/a7864fcbc00d245df76b62bbed421b5171dbd4d4 task-4643999 Forward-Port-Of: odoo/odoo#201450
In Belgium, certain tax grids (e.g., 81, 82) in the VAT report force negative amounts to 0, as the amounts are carried over to the next period. However, this behavior confuses users, especially VAT experts, as they see 0 instead of the actual negative amount. To improve clarity: - Negative values are now displayed instead of being forced to 0. - The carryover mechanism remains unchanged, and the explanatory infobullet is still displayed. Task-4589150 Description of the issue/feature t
Original PR description
In Belgium, certain tax grids (e.g., 81, 82) in the VAT report force negative amounts to 0, as the amounts are carried over to the next period. However, this behavior confuses users, especially VAT experts, as they see 0 instead of the actual negative amount. To improve clarity: - Negative values are now displayed instead of being forced to 0. - The carryover mechanism remains unchanged, and the explanatory infobullet is still displayed. Task-4589150 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#198606
In [1] when the web client was rewritten in OWL, the `noContextKeys` parameter behavior was lost (only the `shadow` `settings` was used). In [2] the `_rpc` was overridden, losing the `noContextKeys` parameter. Because of each of these, even though the HTML Editor always fetched a `en_US` version of the page for edition, upon save, the current user's language was being used upon save, leading to the loss of translations. This commit fixes the issue by removing the mentioned keys from the co
Original PR description
In [1] when the web client was rewritten in OWL, the `noContextKeys` parameter behavior was lost (only the `shadow` `settings` was used). In [2] the `_rpc` was overridden, losing the `noContextKeys`…
In [1] when the web client was rewritten in OWL, the `noContextKeys` parameter behavior was lost (only the `shadow` `settings` was used). In [2] the `_rpc` was overridden, losing the `noContextKeys` parameter. Because of each of these, even though the HTML Editor always fetched a `en_US` version of the page for edition, upon save, the current user's language was being used upon save, leading to the loss of translations. This commit fixes the issue by removing the mentioned keys from the context in the `legacyEnv.session.rpc` rather than getting rid of that parameter completely because since [3] the user context is always included in the rpc context - which would restore the language. Steps to reproduce: - Set user's language to Dutch. - Add Dutch as the default language of a website. - Create a new Dutch page. - Drop an accordion snippet. - Switch website preview to English. - Translate the first title. - Save. - Edit the page with the HTML Editor (English version is edited). - Make some minor change, even adding a space is enough. - Save. => Dutch text was lost and replaced by the last saved version. [1]: https://github.com/odoo/odoo/commit/0573acae2306bf5da2005852da9323ddc59e5431#diff-851c304e3f2a64138c1ff0f3de9856184dbfa0114da3fd76af0309eabe72043eR134 [2]: https://github.com/odoo/odoo/commit/55f1680c74d3b64c3319ba114f7ba3e3f7b49be3 [3]: https://github.com/odoo/odoo/commit/2192480ed1262a13db8e6b0dd945ea91dee91aa9 opw-3493355 Forward-Port-Of: odoo/odoo#201306 Forward-Port-Of: odoo/odoo#142894
### Issue: MO with a tracked finished product are actually splited at validation. However, the qties of the MO are usually set by default to fulfill the maximal demand. As such, component registrations performed form the shopfloor might be completely override by the MO split. ### Steps to reproduce: - Create 2 storable products tracked by SN: FP and COMP - Create a BOM for you final product FP: - 1 x COMP - 1 operation with an instruction of type "Register Consumed Materials
Original PR description
### Issue: MO with a tracked finished product are actually splited at validation. However, the qties of the MO are usually set by default to fulfill the maximal demand. As such, component…
### Issue:
MO with a tracked finished product are actually splited at validation. However, the qties of the MO are usually set by default to fulfill the maximal demand. As such, component registrations performed form the shopfloor might be completely override by the MO split.
### Steps to reproduce:
- Create 2 storable products tracked by SN: FP and COMP
- Create a BOM for you final product FP:
- 1 x COMP
- 1 operation with an instruction of type "Register Consumed Materials" for COMP
- Put 2 serial numbers in WH/Stock for COMP: SN01, SN02
- Create and confirm an MO for 2 units of FP using that BOM
> SN01 and SN02 should be reserved on the move raw
- Go to the shopfloor to the MO
- Click on Register component SN02 > Validate
- Click on the [+] button of the register Production
- Mark the MO as Done > Close Production
> You trigger a consumption warning dialog telling you that you registered more consumed quantity than expected (2 instead of 1) This dialog should not appear in the first place as you registered only 1 unit but suppose it is ok and continue
- Click on "Set quantities and validate"
- Go back to your MO in the back end
#### > It was closed using SN01 rather than the SN you registered.
### Cause of the issue:
Confirming the MO confirmed the move raw and a reservation was made for 2 units as the MO is not splitted yet. However, since the final product is tracked this MO will end up splitted. When you register consumption, the serial number of one of the move line related to the raw move will be updated and the line will be picked:
https://github.com/odoo/enterprise/blob/d4ff42fbcfa3dd297c6cb838b5b03955f12f02a4/mrp_workorder/models/quality.py#L519-L525 However, since at least one of the move line of the move raw is picked the move its self will become picked:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/stock/models/stock_move.py#L208-L212 This is problematic as picked picked move by pass the set_qty_producing so from now if you were to adapt the qty producing of the MO you would not affect the quantity of the raw move (which is currently at 2: one unpicked move line with SN01 and one picked with SN02): https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1218-L1228 Finally, when you click on the Close production, a `_split_productions` process will be started and adpat the demand of the move raw to 1: https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1831-L1832 Since the quantity set on the move exceeds this new demand the consumption warning. Note that at this point the backorders of the initial MO were already created and confirm without you dialog to be resolved so that the reservations of these splitted MO could not reserve the SN01 that is still used by your move. Finally, when you "Set quantities and validate" it will adpat the quantity and unreserve the picked move line as this decrease process does not prioritise to unlink unpicked move lines first:
### Fix:
Since registration process through shopfloor and barcode are expected to create picked move lines which will adpat the picked state of the move and since picking the move will automatically pick all the move line, a move line that is not picked in a picked move is a move line that is not expected to be kept. We therefore unlik these move_lines before adapting the demand of the move_raws in the split production.
### Note:
We also tried 2 other fixes of the issue but aborted these other ideas:
1) try to keep only picked move line at the Validation of the registration component process but this change of behavior was aborted since if instead of clicking on validate you click on "Continue consumption and then on the top right cross button", you would technically have registered only the first SN but you would fall in the situation as above and trigger the same issue.
2) Adapt the condition of that makes a move raw by pass the _set_qty_producing:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1219-L1221 Since the move is picked for the wrong reason we would instead use: `all(ml.pikced for ml in move.move_line_ids)`
However, this would also require to change the process decrease to unreserve picked move last here:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/stock/models/stock_move.py#L361-L365 Changing the loop to
`reversed(move.move_line_ids.sorted(lambda ml: (not ml.picked, ml.id))` And this would not solve the issue starting post 17.0 since we would still bypass the set_qty producing on the next lines:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1223-L1225
Enterprise: https://github.com/odoo/enterprise/pull/79591
opw-4558900
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#198599
Forward-Port-Of: odoo/odoo#198175The SAT added a new type of transport figure "Integrante de Coordinados". This should be available for the carta porte. task-4082068, previous pr for v15 67897 Forward-Port-Of: odoo/enterprise#77932 Forward-Port-Of: odoo/enterprise#73195
Original PR description
The SAT added a new type of transport figure "Integrante de Coordinados". This should be available for the carta porte. task-4082068, previous pr for v15 67897 Forward-Port-Of: odoo/enterprise#77932 Forward-Port-Of: odoo/enterprise#73195
Steps to Reproduce: 1. Create a storable product with inventory tracking and assign a barcode. 2. Create an internal transfer from “Partners/Customers” to “Virtual Locations/Inventory Adjustment”. 3. This will generate two quants, one in Customers and another in Inventory Adjustment. 4. Navigate to Barcode > Inventory Adjustment and scan the product’s barcode. Issue: The scan triggers an inventory adjustment for the “Customer” location instead of the correct stock location. Tech
Original PR description
Steps to Reproduce: 1. Create a storable product with inventory tracking and assign a barcode. 2. Create an internal transfer from “Partners/Customers” to “Virtual Locations/Inventory Adjustment”. 3.…
Steps to Reproduce: 1. Create a storable product with inventory tracking and assign a barcode. 2. Create an internal transfer from “Partners/Customers” to “Virtual Locations/Inventory Adjustment”. 3. This will generate two quants, one in Customers and another in Inventory Adjustment. 4. Navigate to Barcode > Inventory Adjustment and scan the product’s barcode. Issue: The scan triggers an inventory adjustment for the “Customer” location instead of the correct stock location. Technical Explanation: • The system fetches all quants related to the product, including those in Vendor, Customer, and Inventory Adjustment locations. • These locations have IDs lower than the stock location (e.g., Customers = 5, Stock = 8). • The front-end caches this data (dbIdCache) and calls _defaultLocation() to determine the location. • Since the cache is ordered by ID, the first location (Customers, ID 5) is incorrectly selected instead of the stock location (8). • As a result, the inventory adjustment is applied to the wrong location. Proposed Fix: • Filter the results to include only internal locations when fetching quants. • This prevents non-internal locations (Vendor, Customers, Inventory Adjustment) from being selected by default. • If a user needs to adjust inventory for an external location, they must first scan the location barcode before scanning the product. Task-4596699 Forward-Port-Of: odoo/enterprise#81398 Forward-Port-Of: odoo/enterprise#81107
### Steps to reproduce: - install "l10n_uk_bacs" - Go to Accounting > Customers > BACS Direct Debit Instruction and create a new one - Fill necessary values and validate - Traceback ### Cause: This [commit](https://github.com/odoo/enterprise/commit/54965c8d62301ba1fa8409709a1a1fd77150f722#diff-e00ec661d761679265d152ef44c96f9f1bb896e7dc148ea8ad7ce94cd3c28e11) changed the field `bacs_ddi_id` in `account.move` to a computed field and moved the storage to `account.payment`. But it did not ch
Original PR description
### Steps to reproduce: - install "l10n_uk_bacs" - Go to Accounting > Customers > BACS Direct Debit Instruction and create a new one - Fill necessary values and validate - Traceback ### Cause: This [commit](https://github.com/odoo/enterprise/commit/54965c8d62301ba1fa8409709a1a1fd77150f722#diff-e00ec661d761679265d152ef44c96f9f1bb896e7dc148ea8ad7ce94cd3c28e11) changed the field `bacs_ddi_id` in `account.move` to a computed field and moved the storage to `account.payment`. But it did not change `_compute_from_moves` which was using SQL queries with `move.bacs_ddi_id`. So the method crashes because the table account_move does not have a column named bacs_ddi_id anymore. ### Solution: Adapt the SQL queries to use `payment.bacs_ddi_id`. opw-4593098 Forward-Port-Of: odoo/enterprise#80893
Steps: - Sales app > Configuration > Quotation Templates. - Create a New template. - In field 'Quote calculator' select 'search more..' - select 'New' button Issue: - New button throws validation error says missing required field 'name', blocking creation. Cause: - default value was not assigned to required field 'name' in respective model. Fix: - Added a default value for 'name' field, so creating a new quote calculator will initially be labeled as 'New Spreadsheet' and can be r
Original PR description
Steps: - Sales app > Configuration > Quotation Templates. - Create a New template. - In field 'Quote calculator' select 'search more..' - select 'New' button Issue: - New button throws validation error says missing required field 'name', blocking creation. Cause: - default value was not assigned to required field 'name' in respective model. Fix: - Added a default value for 'name' field, so creating a new quote calculator will initially be labeled as 'New Spreadsheet' and can be renamed as needed. opw-4552429 Forward-Port-Of: odoo/enterprise#81384 Forward-Port-Of: odoo/enterprise#80439
Previously, the Odoo pivot side panel appeared editable in readonly mode, with buttons enabled but non-functional. This fix ensures that the side panel is visually and functionally disabled by applying the same styling as spreadsheet pivot side panel. Task: [4640254](https://www.odoo.com/odoo/project/2328/tasks/4640254) Forward-Port-Of: odoo/enterprise#81201
Original PR description
Previously, the Odoo pivot side panel appeared editable in readonly mode, with buttons enabled but non-functional. This fix ensures that the side panel is visually and functionally disabled by applying the same styling as spreadsheet pivot side panel. Task: [4640254](https://www.odoo.com/odoo/project/2328/tasks/4640254) Forward-Port-Of: odoo/enterprise#81201
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131 Forward-Port-Of: odoo/enterprise#81296 Forward-Port-Of: odoo/enterprise#81226
Original PR description
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131 Forward-Port-Of: odoo/enterprise#81296 Forward-Port-Of: odoo/enterprise#81226
- Fix access rights (again) on employee view for wage statements - Fix condition on ACC rule that prevents manual edition of payslip lines Forward-Port-Of: odoo/enterprise#81317
Original PR description
- Fix access rights (again) on employee view for wage statements - Fix condition on ACC rule that prevents manual edition of payslip lines Forward-Port-Of: odoo/enterprise#81317
When printing an invoice in the l10n_mx_edi module, a traceback occurs if the client's language is empty. This happens because the system previously defaulted to es_ES, which may not be activated. Steps to Reproduce: 1. Install the l10n_mx_edi module and switch to a Mexican company. 2. Enable multiple languages in the system. 3. Create an invoice and leave the customer's language empty (no language set). 4. Print the invoice. 5. Issue: A traceback occurs due to the missing es_ES langua
Original PR description
When printing an invoice in the l10n_mx_edi module, a traceback occurs if the client's language is empty. This happens because the system previously defaulted to es_ES, which may not be activated. Steps to Reproduce: 1. Install the l10n_mx_edi module and switch to a Mexican company. 2. Enable multiple languages in the system. 3. Create an invoice and leave the customer's language empty (no language set). 4. Print the invoice. 5. Issue: A traceback occurs due to the missing es_ES language. Now, there is no fallback to es_ES when the client's language is empty. The amount-to-text conversion strictly relies on `self.partner_id.lang. If no language is set, the conversion translates to the user's language. opw-4572245 Forward-Port-Of: odoo/enterprise#80879
Steps fo reproduce : - create a product (in the inventory tab, the route should be 'Manufacture') - click on the smart button 'bill of materials' - create a BOM for this product with at least one operation - in the quality app navigate to Quality Control/Control Points - create a new control point - in the field product select the product that you created - in the operations field select "YourCompany: Manufacturing" - in the work order operation field select the operation that you wrote
Original PR description
Steps fo reproduce : - create a product (in the inventory tab, the route should be 'Manufacture') - click on the smart button 'bill of materials' - create a BOM for this product with at least one…
Steps fo reproduce : - create a product (in the inventory tab, the route should be 'Manufacture') - click on the smart button 'bill of materials' - create a BOM for this product with at least one operation - in the quality app navigate to Quality Control/Control Points - create a new control point - in the field product select the product that you created - in the operations field select "YourCompany: Manufacturing" - in the work order operation field select the operation that you wrote in the BOM you created (if multiple operations with the same name make sure that you selected the one linked with the BOM) - in the type field select "Measure" - in the norm field enter a unit of measure with at least an upper case - create a manufacturing order for this product - open the shop floor app and on the manufacturing order you created select the quality check point Current Behavior: The unit of measure appears in lower case. This could change its meaning for instance form MW (mega-watt) to mw (mili-watt) Expected Behavior: The unit of measure string should respect the letter case wrote by the user Cause of the issue: In the xml file, inside the <span> tag the class was "text-lowercase" Fix: I removed this class from the span https://github.com/odoo/enterprise/blob/43e7aec36ddee8a3ff3de8793427a183dfd29b30/mrp_workorder/static/src/mrp_display/dialog/mrp_quality_check_confirmation_dialog.xml#L47 opw-4584509 Forward-Port-Of: odoo/enterprise#81274
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168 Forward-Port-Of: odoo/enterprise#79828
Original PR description
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168 Forward-Port-Of: odoo/enterprise#79828
If ´fcm_token´ if invalidated by Google, our OCN service will now be able to save the updated token. https://firebase.google.com/docs/cloud-messaging/manage-tokens Forward-Port-Of: odoo/enterprise#81318
Original PR description
If ´fcm_token´ if invalidated by Google, our OCN service will now be able to save the updated token. https://firebase.google.com/docs/cloud-messaging/manage-tokens Forward-Port-Of: odoo/enterprise#81318
Before this commit, if the `property_warehouse_id` field is set on the current user inside the test, the expected warehouse could not be found with the search made on the test (if more than one warehouse exists on the second company used in the test). This commit makes sure the test expects the right warehouse by calling the `_get_default_warehouse_id` defined in `res.users` model to assert the stock move is done in the default warehouse of the current user. Forward-Port-Of: odoo/enterprise#
Original PR description
Before this commit, if the `property_warehouse_id` field is set on the current user inside the test, the expected warehouse could not be found with the search made on the test (if more than one warehouse exists on the second company used in the test). This commit makes sure the test expects the right warehouse by calling the `_get_default_warehouse_id` defined in `res.users` model to assert the stock move is done in the default warehouse of the current user. Forward-Port-Of: odoo/enterprise#81309
- Adding 'Demo Mode' option in the DIAN settings section - Adding demo mode bypasses to the relevant methods to imitate recieving a positive response from DIAN without sending anything task-4087930 Forward-Port-Of: odoo/enterprise#80826 Forward-Port-Of: odoo/enterprise#79086
Original PR description
- Adding 'Demo Mode' option in the DIAN settings section - Adding demo mode bypasses to the relevant methods to imitate recieving a positive response from DIAN without sending anything task-4087930 Forward-Port-Of: odoo/enterprise#80826 Forward-Port-Of: odoo/enterprise#79086
**Steps to reproduce:** 1.Go to Documents > Configuration > Settings: -Enable Accounting (Centralize accounting files and documents) -Open Journals and synchronize a chosen journal with a workspace 2.Create a new activity type with: `action`: `Upload Document` `folder_id`: The same workspace we set in the settings 3.Create a journal entry in the journal you chose 4.Add the new activity to the journal entry. 5.Upload a document. **Issue:** The attachment is up
Original PR description
**Steps to reproduce:** 1.Go to Documents > Configuration > Settings: -Enable Accounting (Centralize accounting files and documents) -Open Journals and synchronize a chosen journal with a workspace…
**Steps to reproduce:**
1.Go to Documents > Configuration > Settings:
-Enable Accounting (Centralize accounting files and documents)
-Open Journals and synchronize a chosen journal with a workspace
2.Create a new activity type with:
`action`: `Upload Document`
`folder_id`: The same workspace we set in the settings
3.Create a journal entry in the journal you chose
4.Add the new activity to the journal entry.
5.Upload a document.
**Issue:**
The attachment is uploaded, but we get a Missing Record error for an `ir.attachment` record, and the activity isn't set to done
**Cause:**
This commit was meant to prevent this issue: https://github.com/odoo/enterprise/commit/6c4bbf2fe0577fe1f4fc9f6a408c5904eb1cf92b
What it is meant to do is to add a `no_document` flag to prevent the creation of two documents when an attachment is uploaded to an activity, since the second one will by unlinked, along with the attachment. See:
https://github.com/odoo/enterprise/blob/a46594b2d3529d86a40a1567e0e4e0207399a3a8/documents/models/mail_activity.py#L41
But a particular case was not included:
- if the attachment fits at least one of these criteria:
- attachment of a misc operation
- first attachment of an invoice
- xml file after it has been succesfully registered as move attachment
- if the journal in which the entry was created is synchronized with the activity's workspace
In this case, a second document is created, since we don't check for the flag `no_document` in this flow.
see:
https://github.com/odoo/enterprise/blob/28b6a5d30274f4265c978433b8d02b758d9a032e/documents_account/models/ir_attachment.py#L24
and:
https://github.com/odoo/enterprise/blob/85c139237015a7c3f1233eb9d977ead126b7d7d6/documents_account/models/account_move.py#L87
**Solution:**
Added a check for the `no_document` flag before calling `_update_or_create_document`
opw-4547561
Forward-Port-Of: odoo/enterprise#80662## Problem When reversing an invoice and making a credit note on a subscription, the email template was still "Invoice: Sending" instead of choosing the credit note template "Credit Note: Sending". The condition on the following code was always True, meaning the super method, that is used to decide which template to take in case of a credit note, was never called. https://github.com/odoo/enterprise/blob/eb1eff85d2119a34997067fedb602e963a5d6f02/sale_subscription/models/account_move_send.py#L9-L1
Original PR description
## Problem When reversing an invoice and making a credit note on a subscription, the email template was still "Invoice: Sending" instead of choosing the credit note template "Credit Note: Sending". The condition on the following code was always True, meaning the super method, that is used to decide which template to take in case of a credit note, was never called. https://github.com/odoo/enterprise/blob/eb1eff85d2119a34997067fedb602e963a5d6f02/sale_subscription/models/account_move_send.py#L9-L14 ## Steps to reproduce - Take an invoice created through a subscription, reverse it (credit note action) - Try to send it - See that the email template is "Invoice: Sending" and not "Credit Note: Sending" ## Fix A condition was added to differentiate an invoice from a credit note. opw-4455155 Forward-Port-Of: odoo/enterprise#81143 Forward-Port-Of: odoo/enterprise#79331
To reproduce: - Install delivery_fedex_rest and enter API credentials for FedEx US, also turn on return label generation. - Enable packages in inventory settings. - New delivery to Azure Interior, 1x product 5555, save and Put in Pack (FedEx Box 1kg). - Add another line with 1x product 5555, save and Put in Pack again (FedEx Box 1kg). - Validate the picking. Current behaviour: Crashes when trying to create the return label with nondescript error coming from FedEx. Expected behaviour:
Original PR description
To reproduce: - Install delivery_fedex_rest and enter API credentials for FedEx US, also turn on return label generation. - Enable packages in inventory settings. - New delivery to Azure Interior, 1x…
To reproduce: - Install delivery_fedex_rest and enter API credentials for FedEx US, also turn on return label generation. - Enable packages in inventory settings. - New delivery to Azure Interior, 1x product 5555, save and Put in Pack (FedEx Box 1kg). - Add another line with 1x product 5555, save and Put in Pack again (FedEx Box 1kg). - Validate the picking. Current behaviour: Crashes when trying to create the return label with nondescript error coming from FedEx. Expected behaviour: Ideally, a correctly validated picking with generated return labels. However, this appears to currently not be supported by the FedEx REST API... (multi-package single-shot return shipments of print label type) We compromise and will create the outgoing shipment as usual, but not the return shipment in case of multi-package shipments. A helpful message informing the user of this limitation will be put in the chatter of the picking instead of the generated return label in this specific case. opw-4556415 Forward-Port-Of: odoo/enterprise#81326
Steps to reproduce: - open the trial balance with a company having some account groups (like BE company) - activate the hierarchy and subtotals filter - create an annotation for an account - press outside the popover to save the annotation - open the annotation popover -> The annotation is no longer visible Other similar issue - create an annotation (with again hierarchy activated) - directly create another one -> The popover disappear and no annotations are visible Cause of
Original PR description
Steps to reproduce: - open the trial balance with a company having some account groups (like BE company) - activate the hierarchy and subtotals filter - create an annotation for an account - press outside the popover to save the annotation - open the annotation popover -> The annotation is no longer visible Other similar issue - create an annotation (with again hierarchy activated) - directly create another one -> The popover disappear and no annotations are visible Cause of the issue: When grouping per hierarchy, the line ids contains some unnecessary components for these grouping per account groups, which need to be filtered out with the helper function already created to handle this case. opw-4546653 Forward-Port-Of: odoo/enterprise#81333
When using a custom engine, and defining warnings that should be displayed on the report, it has been detected that data were not up to date since the only flush made in the report generation is in the _get_lines() function. The existing flush_all() is therefore called 'too late' when generating a report. To solve it, another flush_all() is called at the beginning of the report generation. Forward-Port-Of: odoo/enterprise#81203
Original PR description
When using a custom engine, and defining warnings that should be displayed on the report, it has been detected that data were not up to date since the only flush made in the report generation is in the _get_lines() function. The existing flush_all() is therefore called 'too late' when generating a report. To solve it, another flush_all() is called at the beginning of the report generation. Forward-Port-Of: odoo/enterprise#81203
Partner bank account number with valid IBAN will be rewrite with space to be more human readable(ex: 'BE17 4126 1491 9710'). However bank transaction uses the raw number('BE17412614919710') so there is no match during validation of SEPA payment transactions. This commit proposes to use sanitized_acc_number from mandate partner bank account. opw-4536189 Forward-Port-Of: odoo/enterprise#81238
Original PR description
Partner bank account number with valid IBAN will be rewrite with space to be more human readable(ex: 'BE17 4126 1491 9710').
However bank transaction uses the raw number('BE17412614919710') so there is no match during validation of SEPA payment transactions.
This commit proposes to use sanitized_acc_number from mandate partner bank account.
opw-4536189
Forward-Port-Of: odoo/enterprise#81238Translation tool `_` does not work inside a generator, but new tool* based on the environment (`env._`) does. This commit fixes the issue in upsell activity lines. *https://github.com/odoo/odoo/commit/b794f0f332f473deb2c04eba60baf4761db3b508 Forward-Port-Of: odoo/enterprise#81347
Original PR description
Translation tool `_` does not work inside a generator, but new tool* based on the environment (`env._`) does. This commit fixes the issue in upsell activity lines. *https://github.com/odoo/odoo/commit/b794f0f332f473deb2c04eba60baf4761db3b508 Forward-Port-Of: odoo/enterprise#81347
### Issue: MO with a tracked finished product are actually splited at validation. However, the qties of the MO are usually set by default to fulfill the maximal demand. As such, component registrations performed form the shopfloor might be completely override by the MO split. ### Steps to reproduce: - Create 2 storable products tracked by SN: FP and COMP - Create a BOM for you final product FP: - 1 x COMP - 1 operation with an instruction of type "Register Consumed Materials
Original PR description
### Issue: MO with a tracked finished product are actually splited at validation. However, the qties of the MO are usually set by default to fulfill the maximal demand. As such, component…
### Issue:
MO with a tracked finished product are actually splited at validation. However, the qties of the MO are usually set by default to fulfill the maximal demand. As such, component registrations performed form the shopfloor might be completely override by the MO split.
### Steps to reproduce:
- Create 2 storable products tracked by SN: FP and COMP
- Create a BOM for you final product FP:
- 1 x COMP
- 1 operation with an instruction of type "Register Consumed Materials" for COMP
- Put 2 serial numbers in WH/Stock for COMP: SN01, SN02
- Create and confirm an MO for 2 units of FP using that BOM
> SN01 and SN02 should be reserved on the move raw
- Go to the shopfloor to the MO
- Click on Register component SN02 > Validate
- Click on the [+] button of the register Production
- Mark the MO as Done > Close Production
> You trigger a consumption warning dialog telling you that you registered more consumed quantity than expected (2 instead of 1) This dialog should not appear in the first place as you registered only 1 unit but suppose it is ok and continue
- Click on "Set quantities and validate"
- Go back to your MO in the back end
#### > It was closed using SN01 rather than the SN you registered.
### Cause of the issue:
Confirming the MO confirmed the move raw and a reservation was made for 2 units as the MO is not splitted yet. However, since the final product is tracked this MO will end up splitted. When you register consumption, the serial number of one of the move line related to the raw move will be updated and the line will be picked:
https://github.com/odoo/enterprise/blob/d4ff42fbcfa3dd297c6cb838b5b03955f12f02a4/mrp_workorder/models/quality.py#L519-L525 However, since at least one of the move line of hte move raw is picked the move its self will become picked:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/stock/models/stock_move.py#L208-L212 This is problematic as picked picked move by pass the set_qty_producing so from now if you were to adapt the qty producing of the MO you would not affect the quantity of the raw move (which is currently at 2: one unpicked move line with SN01 and one picked with SN02): https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1218-L1228 Finally, when you click on the Close production, a `_split_productions` process will be started and adpat the demand of the move raw to 1: https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1831-L1832 Since the quantity set on the move exceeds this new demand the consumption warning. Note that at this point the backorders of the initial MO were already created and confirm without you dialog to be resolved so that the reservations of these splitted MO could not reserve the SN01 that is still used by your move. Finally, when you "Set quantities and validate" it will adpat the quantity and unreserve the picked move line as this decrease process does not prioritise to unlink unpicked move lines first:
### Fix:
Since registration process through shopfloor and barcode are expected to create picked move lines which will adpat the picked state of the move and since picking the move will automatically pick all the move line, a move line that is not picked in a picked move is a move line that is not expected to be kept. We therefore unlik these move_lines before adapting the demand of the move_raws in the split production.
### Note:
We also tried 2 other fixes of the issue but aborted these other ideas:
1) try to keep only picked move line at the Validation of the registration component process but this change of behavior was aborted since if instead of clicking on validate you click on "Continue consumption and then on the top right cross button", you would technically have registered only the first SN but you would fall in the situation as above and trigger the same issue.
2) Adapt the condition of that makes a move raw by pass the _set_qty_producing:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1219-L1221 Since the move is picked for the wrong reason we would instead use: `all(ml.pikced for ml in move.move_line_ids)`
However, this would also require to change the process decrease to unreserve picked move last here:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/stock/models/stock_move.py#L361-L365 Changing the loop to
`reversed(move.move_line_ids.sorted(lambda ml: (not ml.picked, ml.id))` And this would not solve the issue starting post 17.0 since we would still bypass the set_qty producing on the next lines:
https://github.com/odoo/odoo/blob/f9e362c45414001077738c2462e9e030f865ec36/addons/mrp/models/mrp_production.py#L1223-L1225
Community: https://github.com/odoo/odoo/pull/198175
opw-4558900
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/enterprise#80821
Forward-Port-Of: odoo/enterprise#79591Before this PR: - The SDD Mandate model was accessible only to invoicing users. - As a result, read-only users could not view payment records because some fields attempted to access the SDD Mandate model. After this PR: - Fields related to the SDD Mandate model are now restricted to invoicing users using the appropriate access groups. - This ensures that read-only users can view payment records without encountering access issues. Forward-Port-Of: odoo/enterprise#80336
Original PR description
Before this PR: - The SDD Mandate model was accessible only to invoicing users. - As a result, read-only users could not view payment records because some fields attempted to access the SDD Mandate model. After this PR: - Fields related to the SDD Mandate model are now restricted to invoicing users using the appropriate access groups. - This ensures that read-only users can view payment records without encountering access issues. Forward-Port-Of: odoo/enterprise#80336
Small oversight in odoo/enterprise#79245. Don't hide the entire group for service products. Visibility for goods/service products is determined per field below. opw-4601199 Forward-Port-Of: odoo/enterprise#80324
Original PR description
Small oversight in odoo/enterprise#79245. Don't hide the entire group for service products. Visibility for goods/service products is determined per field below. opw-4601199 Forward-Port-Of: odoo/enterprise#80324