Tuesday, March 25, 2025
28 changes · saas-18.1
Resolved issues and error corrections
Point of Sale receipts now avoid showing the same lot number more than once when order data is synced from the checkout interface. This keeps customer receipts clearer and more accurate for products tracked by lot or serial number.
Original PR description
- Filter pack_lot_ids to exclude non-numeric IDs when syncing data from the UI, ensuring lot numbers are not duplicated on the receipt. task-id: 4633355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The ticket screen now shows order times in the user's local time zone instead of UTC. This reduces confusion for stores and staff operating outside UTC and makes ticket information easier to interpret consistently.
Original PR description
Before this commit: ========== - The order time was displayed in UTC on the ticket screen, which could confuse users in different time zones. After this commit: ========== - The order time will be displayed in the user's local timezone for better clarity and consistency. task-4661637
Miscellaneous changes
The werkzeug version is parsed by using the `__version__` attribute which is deprecated since 3.0.0. This leads to an error when running Odoo in Debian trixie that provides werkzeug 3.1.3. See - pallets/werkzeug#2772 - https://packages.debian.org/trixie/python-werkzeug-doc > Also remove the unused import of `warning` Forward-Port-Of: odoo/odoo#203143
Original PR description
The werkzeug version is parsed by using the `__version__` attribute which is deprecated since 3.0.0. This leads to an error when running Odoo in Debian trixie that provides werkzeug 3.1.3. See - pallets/werkzeug#2772 - https://packages.debian.org/trixie/python-werkzeug-doc > Also remove the unused import of `warning` Forward-Port-Of: odoo/odoo#203143
Loyalty history for gift cards was not working properly. The history was not being updated when a gift card was used in a POS order. Steps to reproduce: ------------------- * Create some gift cards * Use one in the PoS to make an order > Observation: The history is not updated accordingly Why the fix: ------------ Instead of relying only on `coupon_updates` we check that card id provided exist before creating the history record. opw-4546985-1 Forward-Port-Of: odoo/odoo#200693
Original PR description
Loyalty history for gift cards was not working properly. The history was not being updated when a gift card was used in a POS order. Steps to reproduce: ------------------- * Create some gift cards * Use one in the PoS to make an order > Observation: The history is not updated accordingly Why the fix: ------------ Instead of relying only on `coupon_updates` we check that card id provided exist before creating the history record. opw-4546985-1 Forward-Port-Of: odoo/odoo#200693
Since [1] the widget displayed on a server action form view when it is set up as "Update a o2m field on a record" was not displaying the fields in the proper way. Before: the value field was a text field expecting the user to input the record id by hand. After: the value field is now a many2one selector. [1]: https://github.com/odoo/odoo/commit/0a744accc2aaa965d5353e854317895d822ad954 Forward-Port-Of: odoo/odoo#203156 Forward-Port-Of: odoo/odoo#202930
Original PR description
Since [1] the widget displayed on a server action form view when it is set up as "Update a o2m field on a record" was not displaying the fields in the proper way. Before: the value field was a text field expecting the user to input the record id by hand. After: the value field is now a many2one selector. [1]: https://github.com/odoo/odoo/commit/0a744accc2aaa965d5353e854317895d822ad954 Forward-Port-Of: odoo/odoo#203156 Forward-Port-Of: odoo/odoo#202930
Before this commit, there was a bug that could be reproduced this way: - Add a whitespace at the end of the class attribute of the footer main snippet (e.g. by using the HTML editor) - Enter edit mode - Click on the footer - Discard the editor => Bug: a popup shows up saying you are about to lose changes... while you did not make any. This commit fixes that specific issue, also extending the test that was introduced at [1], although as advertised many "no changes" flow are still marki
Original PR description
Before this commit, there was a bug that could be reproduced this way: - Add a whitespace at the end of the class attribute of the footer main snippet (e.g. by using the HTML editor) - Enter edit mode - Click on the footer - Discard the editor => Bug: a popup shows up saying you are about to lose changes... while you did not make any. This commit fixes that specific issue, also extending the test that was introduced at [1], although as advertised many "no changes" flow are still marking the page as dirty (e.g. just hovering any editor panel option). Note that there seems to be a deeper issue (although with no real breaking consequences) with the code surrounding this (see inline code comments), hopefully we won't have to care about this once the new HTML editor lands in master. [1]: https://github.com/odoo/odoo/commit/8e1bce010be2df8bd7144364fcbbe509d0441695 Forward-Port-Of: odoo/odoo#202039
**Problem**: When copying text from the editor that contains `nbsp`, pasting it into a code editor results in invalid characters, causing issues like compilation errors. **Solution**: Replace `nbsp` with normal spaces when copying text. **Steps to Reproduce**: 1. Add text: `"a b"` (with double spaces). 2. Copy the text. 3. Paste it into a **code editor**. - **Issue**: The invisible `nbsp` causes compilation errors. **opw-4645678** --- I confirm I have signed the CLA and re
Original PR description
**Problem**: When copying text from the editor that contains `nbsp`, pasting it into a code editor results in invalid characters, causing issues like compilation errors. **Solution**: Replace `nbsp` with normal spaces when copying text. **Steps to Reproduce**: 1. Add text: `"a b"` (with double spaces). 2. Copy the text. 3. Paste it into a **code editor**. - **Issue**: The invisible `nbsp` causes compilation errors. **opw-4645678** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202904
When applying a global discount on a sale order, the fixed taxe shouldn't be consider in a discount. It might be counter intuitive, as a x% discount isn't a discount on the total amount but of the total fixed taxe excluded amount, but is how it should be done. Consider a 100% discount with a product with an ecotax: the ecotax needs to be paid, the sale order can never go down under that amount, yet the product is 100% discounted. opw-4584784 Forward-Port-Of: odoo/odoo#202024
Original PR description
When applying a global discount on a sale order, the fixed taxe shouldn't be consider in a discount. It might be counter intuitive, as a x% discount isn't a discount on the total amount but of the total fixed taxe excluded amount, but is how it should be done. Consider a 100% discount with a product with an ecotax: the ecotax needs to be paid, the sale order can never go down under that amount, yet the product is 100% discounted. opw-4584784 Forward-Port-Of: odoo/odoo#202024
In this commit: ========== Will now automatically assign a lot/serial number to the order line, if there is only one available option to choose from. Task: 4654071 Forward-Port-Of: odoo/odoo#202444
Original PR description
In this commit: ========== Will now automatically assign a lot/serial number to the order line, if there is only one available option to choose from. Task: 4654071 Forward-Port-Of: odoo/odoo#202444
**Problem**: The Translate/AI buttons should only be disabled when selecting non-editable content or an unsplittable node. Currently, they are disabled incorrectly when selecting multiple paragraphs. **Solution**: Disable Translate/AI buttons only when a non-editable content or an unsplittable node is selected. **Steps to Reproduce**: 1. Add two paragraphs. 2. Select all the text. 3. **Issue**: The Translate button is disabled but should be enabled. **opw-4629920** --- I confir
Original PR description
**Problem**: The Translate/AI buttons should only be disabled when selecting non-editable content or an unsplittable node. Currently, they are disabled incorrectly when selecting multiple paragraphs. **Solution**: Disable Translate/AI buttons only when a non-editable content or an unsplittable node is selected. **Steps to Reproduce**: 1. Add two paragraphs. 2. Select all the text. 3. **Issue**: The Translate button is disabled but should be enabled. **opw-4629920** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201529
- add option to `image` widget to accept a relation for preview_image to enable fetching images from `hr.employee.public` Task: 4626795 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201748
Original PR description
- add option to `image` widget to accept a relation for preview_image to enable fetching images from `hr.employee.public` Task: 4626795 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201748
the Subject input value is supposed to start with S0 instead of S00 Screenshot of where the tour fails:  build_error-116092 Forward-Port-Of: odoo/odoo#202013
Original PR description
the Subject input value is supposed to start with S0 instead of S00 Screenshot of where the tour fails:  build_error-116092 Forward-Port-Of: odoo/odoo#202013
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode a
Original PR description
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce:…
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode app and come back to the record. #### > The subline related to SN1 displays now a demand of 0. A new barcode line has been created with a demand of 1 for SN1. In short an extra record was created unecessarily. ### Cause of the issue: In the barcode app the demand of each line is measured by the quantity present on its move lines. In our set up, the move is related to 2 moves lines with a quantity of 1 that are not picked. Scanning SN1 will update the qty_done of its line to 1. As such, the move line quantity will be set from 1 to 1 and the move line will be picked: https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move_line.py#L58-L61 In turns, the picked state of the move will be set to picked: https://github.com/odoo/odoo/blob/7bc38562f1988ba15525c04168e30c06a8f1d33c/addons/stock/models/stock_move.py#L208-L212 Now, editing the qty done of the move once more from 1 to 0 to reset the reservation will not revert the process for 2 reasons: 1. The quantity of the move line will be reset form its current value to 0, altering the demand of the barcode line to 0. 2. Even if the move line was unpicked in this process, the picked compute method of the move will never reset the picked state as the compute method can only set a True value. We therefore end up with a picked move without any picked move line and for which one of the picked move line has a quantity of 0. Now, leaving the barcode app will launch the split_uncompleted_moves method in order to not lose the changes made to the record and since the move is picked for the wrong reason, the move will be splitted in 2 instead of escaping the split process. https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move.py#L21-L22 Enterprise: https://github.com/odoo/enterprise/pull/80675 opw-4600565 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202591 Forward-Port-Of: odoo/odoo#200167
Forward-Port-Of: odoo/odoo#203055
Original PR description
Forward-Port-Of: odoo/odoo#203055
The base.group_multi_company group is needed when the test is run without the demo data. Adding this group allows the stock.stock_location_customers location to be added to the stock rule’s search domain. This location is necessary for the stock rule to be found. Runbot error: 161249 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202799
Original PR description
The base.group_multi_company group is needed when the test is run without the demo data. Adding this group allows the stock.stock_location_customers location to be added to the stock rule’s search domain. This location is necessary for the stock rule to be found. Runbot error: 161249 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202799
Purpose of this PR: - Check `isSelectionInEditable` before `setSelection` to avoid error when selection is outside the editor. task-4639982 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202215
Original PR description
Purpose of this PR: - Check `isSelectionInEditable` before `setSelection` to avoid error when selection is outside the editor. task-4639982 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202215
Steps to reproduce the bug: - Create a storable product “P1”: - Can be rented: True - tracked by quantity - BoM: - type: kit - component: C1 - Create a rental order with one unit of P1 - confirm it - Click on pickup: - validate the wizard Problem: A user error is triggered: "You should update the components' quantity instead of directly updating the quantity of the kit product." This happens because the system attempts to update the available
Original PR description
Steps to reproduce the bug:
- Create a storable product “P1”:
- Can be rented: True
- tracked by quantity
- BoM:
- type: kit
- component: C1
- Create a rental order with one unit of P1
- confirm it
- Click on pickup:
- validate the wizard
Problem:
A user error is triggered:
"You should update the components' quantity instead of directly updating the quantity of the kit product."
This happens because the system attempts to update the available quantity of the kit product in the quants.
opw-4572337
Forward-Port-Of: odoo/odoo#202703**[FIX] website_payment: fix donation button preview on drag** Steps to reproduce: - Enter edit mode. - If not already installed, click the "Donation Button" in the snippet menu to install the "website_payment" app. - Start dragging the "Donation Button" without dropping it onto the page to display its preview. - Bug: Prefilled buttons are displayed in the preview when they shouldn't be. This bug was introduced by commit [1], where the prefilled buttons were added to the "s_donat
Original PR description
**[FIX] website_payment: fix donation button preview on drag** Steps to reproduce: - Enter edit mode. - If not already installed, click the "Donation Button" in the snippet menu to install the "website_payment" app. - Start dragging the "Donation Button" without dropping it onto the page to display its preview. - Bug: Prefilled buttons are displayed in the preview when they shouldn't be. This bug was introduced by commit [1], where the prefilled buttons were added to the "s_donation" snippet template so that they would be visible in the "s_donation" preview in the snippets dialog. Unfortunately, this change also made them visible for the inner "Donation Button" snippet, which shouldn't be the case. [1]: https://github.com/odoo/odoo/commit/edf81c13d8f2f6d29a77d68cbfa0dc9216da3c2a Forward-Port-Of: odoo/odoo#202829
The system automatically fill the Bank Account info on invoices, however this does not work as expected when the move type is changed after creation Steps to reproduce: - Create an invoice, set partner with bank account defined - Switch to credit note - Check 'Other info' tab Issue: Bank Partner will be left blank, but it should be the partner bank account opw-4640629 Forward-Port-Of: odoo/odoo#202609 Forward-Port-Of: odoo/odoo#202369
Original PR description
The system automatically fill the Bank Account info on invoices, however this does not work as expected when the move type is changed after creation Steps to reproduce: - Create an invoice, set partner with bank account defined - Switch to credit note - Check 'Other info' tab Issue: Bank Partner will be left blank, but it should be the partner bank account opw-4640629 Forward-Port-Of: odoo/odoo#202609 Forward-Port-Of: odoo/odoo#202369
Before this commit: The test `test_rounding_half_up` do un-consistantly fail on the `totalIs("1.20")` check. According to the screenshot, the total value is 1.25 This may be related to a rounding issue, but I suspect that another test product is wrongly selected instead. The test select a product with a name containing `Product Test 1.2` this is expected to select the product with the exact same name. But I do suspect that it can also sometime wrongly select the product `Product Test 1.2
Original PR description
Before this commit:
The test `test_rounding_half_up` do un-consistantly fail on the `totalIs("1.20")` check.
According to the screenshot, the total value is 1.25
This may be related to a rounding issue, but I suspect that another test product is wrongly selected instead.
The test select a product with a name containing `Product Test 1.2` this is expected to select the product with the exact same name. But I do suspect that it can also sometime wrongly select the product `Product Test 1.25` as it starts the same.
After this commit:
The name of the product is modified in the demo data and test to avoid ambiguity with the contains operator
Note: I don't really know why the issue start to happen only now
rb-161265
Forward-Port-Of: odoo/odoo#202865Fixed the `Request Owner` field to list all users in the selected companies. The previous domain was based on `company_id`, which was computed from the selected `category_id`. However, if no category was selected (`category_id` was null), no `request_owner_id` was listed. The new fix computes all selected companies from `self.env`. task-4637199 Forward-Port-Of: odoo/enterprise#82028 Forward-Port-Of: odoo/enterprise#81096
Original PR description
Fixed the `Request Owner` field to list all users in the selected companies. The previous domain was based on `company_id`, which was computed from the selected `category_id`. However, if no category was selected (`category_id` was null), no `request_owner_id` was listed. The new fix computes all selected companies from `self.env`. task-4637199 Forward-Port-Of: odoo/enterprise#82028 Forward-Port-Of: odoo/enterprise#81096
Steps to reproduce: - With an ES company setup - Create and confirm invoice with: - Spanish partner - Amount > 3005.06 (mod347 threshold) - Type for mod 347: Regular operation - Create and confirm a jounral entry with: - Payable account, debit 4000 - Receivable account, credit 4000 - Type for mod 347: Regular operation - Check Mod 347 Tax Report Issue: 'Total number of persons and entities' shows 0 This occurs because some lines of mod 347 report need to be grouped by
Original PR description
Steps to reproduce: - With an ES company setup - Create and confirm invoice with: - Spanish partner - Amount > 3005.06 (mod347 threshold) - Type for mod 347: Regular operation - Create and confirm a jounral entry with: - Payable account, debit 4000 - Receivable account, credit 4000 - Type for mod 347: Regular operation - Check Mod 347 Tax Report Issue: 'Total number of persons and entities' shows 0 This occurs because some lines of mod 347 report need to be grouped by partner, only keeping the partners whose balance for the line is above 3005.06€, so we first get all the partners that match the domain but don't reach the threshold. We exclude these partners with a 'NOT IN' clause. However, when the partner is not set, a NULL values is retrieved causing the clause to be evaluated NULL instead of False and the total count will be 0 opw-4544950 Forward-Port-Of: odoo/enterprise#81954 Forward-Port-Of: odoo/enterprise#81687
The Expense Account column was missing from the Asset Models list view. task-4402982 Forward-Port-Of: odoo/enterprise#80256 Forward-Port-Of: odoo/enterprise#78432
Original PR description
The Expense Account column was missing from the Asset Models list view. task-4402982 Forward-Port-Of: odoo/enterprise#80256 Forward-Port-Of: odoo/enterprise#78432
Steps to reproduce: 1. In recruitment app, generate an offer for an applicant. 2. Send the offer by email and sign it by both parties. Bug: The generated sign request is not linked to the offer using the reference_doc field. Fix: Link the offer to the sign request upon creation in the submit endpoint. task-4607475 Forward-Port-Of: odoo/enterprise#80391
Original PR description
Steps to reproduce: 1. In recruitment app, generate an offer for an applicant. 2. Send the offer by email and sign it by both parties. Bug: The generated sign request is not linked to the offer using the reference_doc field. Fix: Link the offer to the sign request upon creation in the submit endpoint. task-4607475 Forward-Port-Of: odoo/enterprise#80391
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode a
Original PR description
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce:…
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode app and come back to the record. #### > The subline related to SN1 displays now a demand of 0. A new barcode line has been created with a demand of 1 for SN1. In short an extra record was created unecessarily. ### Cause of the issue: In the barcode app the demand of each line is measured by the quantity present on its move lines. In our set up, the move is related to 2 moves lines with a quantity of 1 that are not picked. Scanning SN1 will update the qty_done of its line to 1. As such, the move line quantity will be set from 1 to 1 and the move line will be picked: https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move_line.py#L58-L61 In turns, the picked state of the move will be set to picked: https://github.com/odoo/odoo/blob/7bc38562f1988ba15525c04168e30c06a8f1d33c/addons/stock/models/stock_move.py#L208-L212 Now, editing the qty done of the move once more from 1 to 0 to reset the reservation will not revert the process for 2 reasons: 1. The quantity of the move line will be reset form its current value to 0, altering the demand of the barcode line to 0. 2. Even if the move line was unpicked in this process, the picked compute method of the move will never reset the picked state as the compute method can only set a True value. We therefore end up with a picked move without any picked move line and for which one of the picked move line has a quantity of 0. Now, leaving the barcode app will launch the split_uncompleted_moves method in order to not lose the changes made to the record and since the move is picked for the wrong reason, the move will be splitted in 2 instead of escaping the split process. https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move.py#L21-L22 Community: https://github.com/odoo/odoo/pull/200167 opw-4600565 Forward-Port-Of: odoo/enterprise#81786 Forward-Port-Of: odoo/enterprise#80675
This test tour fails on sunday. Reason: - Here in the test create timesheets in previous week to check overtime in timesheets. - The formula works as today - current week day --> gives monday of this week - But on when it sunday it gives monday of previous week. - Timesheets are further created the previous weeks if given monday. - But we only go one week previous to check Fix: - Selecting next monday if weekday is sunday as we go back one previous week in tour. task-4667966
Original PR description
This test tour fails on sunday. Reason: - Here in the test create timesheets in previous week to check overtime in timesheets. - The formula works as today - current week day --> gives monday of this week - But on when it sunday it gives monday of previous week. - Timesheets are further created the previous weeks if given monday. - But we only go one week previous to check Fix: - Selecting next monday if weekday is sunday as we go back one previous week in tour. task-4667966 Forward-Port-Of: odoo/enterprise#81975
Steps to reproduce the bug: - Create a storable product “P1”: - Can be rented: True - tracked by quantity - BoM: - type: kit - component: C1 - Create a rental order with one unit of P1 - confirm it - Click on pickup: - validate the wizard Problem: A user error is triggered: "You should update the components' quantity instead of directly updating the quantity of the kit product." This happens because the system attempts to update the available q
Original PR description
Steps to reproduce the bug:
- Create a storable product “P1”:
- Can be rented: True
- tracked by quantity
- BoM:
- type: kit
- component: C1
- Create a rental order with one unit of P1
- confirm it
- Click on pickup:
- validate the wizard
Problem:
A user error is triggered:
"You should update the components' quantity instead of directly updating the quantity of the kit product."
This happens because the system attempts to update the available quantity of the kit product in the quants.
opw-4572337
Forward-Port-Of: odoo/enterprise#81845Fw-port Transifex translations from major version to non-major versions Also copied changes done in v18 by https://github.com/odoo/enterprise/commit/717db6525383a181ae0d211989824ddd1413712b: In Swiss localization: - Re-added in help descriptions that were removed in field overrides since they nicely describe what the codes represent - removed f-string that wasn't exporting with older version of Babel as it wasn't needed Will fix opw-4614757
Original PR description
Fw-port Transifex translations from major version to non-major versions Also copied changes done in v18 by https://github.com/odoo/enterprise/commit/717db6525383a181ae0d211989824ddd1413712b: In Swiss localization: - Re-added in help descriptions that were removed in field overrides since they nicely describe what the codes represent - removed f-string that wasn't exporting with older version of Babel as it wasn't needed Will fix opw-4614757