Friday, March 21, 2025
21 changes · master
Enhancements to existing features
When abandoned cart emails are enabled, the system will now only contact shoppers whose carts were abandoned after the feature was turned on. This avoids sending unexpected marketing emails for older carts and helps businesses manage customer communication more appropriately.
Original PR description
Before this commit: - Enabling the abandoned cart email feature in settings triggered emails for both old and new abandoned carts by default. After this commit: - Abandoned cart emails will only be sent for carts abandoned after the feature is activated. Affected Version: Master Task: 4512486
Brazilian goods EDI requests now include the unit of measure for each order or invoice line. This makes tax submissions more complete and helps external tax services such as AvaTax receive the product details they need for compliance processing.
Original PR description
Make our goods EDI request a bit more complete by including the UOM per line. task-4117133
Point of Sale now relies on server data as the main source of truth, reducing duplicate record tracking and improving consistency across related POS features. It also avoids sending unchanged records back to the server, which can reduce unnecessary network activity and improve loading performance.
Original PR description
This commit enhances the related model by using the server data as the single source of truth, eliminating the need to maintain a separate list of connected records. This improves loading times and ensures consistency. Records updated from backend call responses now retain the same reference, facilitating development. Additionally, a dirty-check mechanism has been implemented to prevent syncing records to the server unless they have been updated, reducing unnecessary network operations.
The Field Service task search view no longer includes the Archived filter. This simplifies the search options and makes the interface less cluttered for users looking for active field service work.
Original PR description
This commit removes the Archived filter in search view of project.task model in Field Service app as we did in project to reduce the number of filters inside the search view.
The appointment page navigation now better matches the look and structure used on other website pages. This creates a more consistent browsing and search experience for visitors, including using appointment icons in search results.
Original PR description
The goal is to provide visual consistency between sub navigation on website pages. Community PR: https://github.com/odoo/odoo/pull/188504 task-4259418
This update introduces shared tools for handling formatted text in many Enterprise apps, helping screens display rich content more consistently. It mainly improves internal reliability and maintainability for features such as documents, planning, signing, social posts, barcode flows, and website tools, with limited direct change for end users.
Odoo Studio now better handles report editing for models that do not yet have records by disabling tabs that depend on sample data, making the screen easier to understand. It also streamlines how Studio loads model details, improving consistency behind the scenes.
Resolved issues and error corrections
The VoIP interface now displays country flags correctly no matter which page users open it from. This fixes a visual issue caused by flag image links only working from the home page.
Original PR description
When opening the VoIP interface from any page other than the home page, it doesn't show the flag as the uri for the flag was relative. This commit fixes that by changing the relative uri (`base/...) to an absolute uri.
Code cleanup and technical improvements
This update reorganizes internal calendar view components used by Appointment and Planning. It simplifies how calendar data is handled behind the scenes, making the code easier to maintain without introducing notable changes for end users.
Miscellaneous changes
Also: - Add some missing gettext + proper list formattings - Fix some incorrect English since the modules haven't been translated yet so no translations will be lost. Note that the English of "Allow to export Working Entries to your Social Secretariat" was purposely left bad since it's used in other already translated modules + it's expected that only Belgians will be using the modules and/or the modules will be used only in French/Dutch Forward-Port-Of: odoo/enterprise#81873 Forward-Port-O
Original PR description
Also: - Add some missing gettext + proper list formattings - Fix some incorrect English since the modules haven't been translated yet so no translations will be lost. Note that the English of "Allow to export Working Entries to your Social Secretariat" was purposely left bad since it's used in other already translated modules + it's expected that only Belgians will be using the modules and/or the modules will be used only in French/Dutch Forward-Port-Of: odoo/enterprise#81873 Forward-Port-Of: odoo/enterprise#81841
Original PR description
**Proof of concept, not yet validated by anyone** Alternative version with separate functions: https://github.com/odoo/enterprise/pull/80163 \* = documents, frontdesk, knowledge, planning, project_enterprise, sale_planning, sign, social, social_twitter, stock_barcode, stock_barcode_mrp, stock_barcode_picking_batch, voip, web_cohort, web_enterprise, web_gantt, web_grid, website_helpdesk_forum, website_studio Enterprise counter-part. https://github.com/odoo/odoo/pull/199394
The grid view’s internal structure was simplified so there is now one main model responsible for preparing grid data. This should make future customization and maintenance of grid-based features, such as timesheets and planning-related views, easier and less error-prone without changing the visible user experience.
Original PR description
Before this commit, the GridModel class contained a GridDataPoint to let that additional to fetch the grid data and build the different elements inside the grid view (rows, columns, sections, cells). This concept is a bit complex since the developer who wants to do customisation does not really know if he should do the customisation in GridDataPoint or GridModel. This commit merges the GridDataPoint into GridModel to only have one "real model" in the grid to facilitate the eventual customisation to do for the grid view (like the ones made for grid view of timesheets). task-4354264
Steps to reproduce: - Install `sale_subscription` - Create a sub with a discount - Confirm and invoice it - Renew the sub without the discount - Confirm the renewal - Remove the discount on the original sub via the shell since it's locked (simulate first year discount removal) - Cancel the renewal Issue: MRR log is now negative, this is due to how the way `amount_signed` is computed during the churn event creation. Recurring monthly is now greater because we deleted the first year dis
Original PR description
Steps to reproduce: - Install `sale_subscription` - Create a sub with a discount - Confirm and invoice it - Renew the sub without the discount - Confirm the renewal - Remove the discount on the original sub via the shell since it's locked (simulate first year discount removal) - Cancel the renewal Issue: MRR log is now negative, this is due to how the way `amount_signed` is computed during the churn event creation. Recurring monthly is now greater because we deleted the first year discount, which results in negative MRR. https://github.com/odoo/enterprise/blob/5a7b55f9e059c3b54492e184d1e2429779399d08/sale_subscription/models/sale_order_log.py#L174 Solution: Compute `amount_signed` using the sum of the previous logs. Forward-Port-Of: odoo/enterprise#81833 Forward-Port-Of: odoo/enterprise#80872
When no partner is set on the bank transaction, we do not show the draft items among candidates. Reason : avoid showing too many irrelevant candidates quickly making the feature unusable. But if the user filters the candidate and selects a partner, then show the draft items of this partner among the candidates. Even though the partner filter is a conscious one (input by the user) and not computed by the partner on the bank transaction. This is done by adding a 'posted' filter to the lis
Original PR description
When no partner is set on the bank transaction, we do not show the draft items among candidates. Reason : avoid showing too many irrelevant candidates quickly making the feature unusable. But if the user filters the candidate and selects a partner, then show the draft items of this partner among the candidates. Even though the partner filter is a conscious one (input by the user) and not computed by the partner on the bank transaction. This is done by adding a 'posted' filter to the list view that is automatically added when no partner is set in the statement. task-4554569 Forward-Port-Of: odoo/enterprise#80682
In order to comply with the EU Measuring Instruments Directive, the code for weighing products must be verified with a checksum to ensure it has not been modified. This commit adds an endpoint for retrieving the checksum of the relevant scale code, as well as refactoring of the code to make it as simpler and to reduce the amount of code that needs to be certified. Community PR: https://github.com/odoo/odoo/pull/189846 task-3929839 Forward-Port-Of: odoo/enterprise#80790 Forward-Port-
Original PR description
In order to comply with the EU Measuring Instruments Directive, the code for weighing products must be verified with a checksum to ensure it has not been modified. This commit adds an endpoint for retrieving the checksum of the relevant scale code, as well as refactoring of the code to make it as simpler and to reduce the amount of code that needs to be certified. Community PR: https://github.com/odoo/odoo/pull/189846 task-3929839 Forward-Port-Of: odoo/enterprise#80790 Forward-Port-Of: odoo/enterprise#75269
Issue: - Hovering over the overtime column in the timesheet grid shows the wrong value. when the employee has flexible hours. Steps To Reproduce: - Go to the timesheet grid. - Record time for an employee with flexible hours. - Hover over the weekly overtime column. Solution: - Add the full-time required hours to the overtime calculation when the employee has flexible hours. opw-[4528395](https://www.odoo.com/web#id=4528395&view_type=form&model=project.task) F
Original PR description
Issue:
- Hovering over the overtime column in the timesheet grid shows the wrong value.
when the employee has flexible hours.
Steps To Reproduce:
- Go to the timesheet grid.
- Record time for an employee with flexible hours.
- Hover over the weekly overtime column.
Solution:
- Add the full-time required hours to the overtime calculation when the employee has flexible hours.
opw-[4528395](https://www.odoo.com/web#id=4528395&view_type=form&model=project.task)
Forward-Port-Of: odoo/enterprise#81706
Forward-Port-Of: odoo/enterprise#81057Handle suggested visual improvements including: 1. Put labels & icon on one line 2. Change font size of signed items dropped on document (reduce it) => more realistic with real documents 3. Active signer name should be in bold 4. By default, sidebar should be closed 5. Remove placeholder of radio & checkboxes 6. When dropping a selection field, popup opens => focus should be on the multiline input (cursor should be into it) 7. Should not be able to save a selection field if I haven't ad
Original PR description
Handle suggested visual improvements including: 1. Put labels & icon on one line 2. Change font size of signed items dropped on document (reduce it) => more realistic with real documents 3. Active…
Handle suggested visual improvements including: 1. Put labels & icon on one line 2. Change font size of signed items dropped on document (reduce it) => more realistic with real documents 3. Active signer name should be in bold 4. By default, sidebar should be closed 5. Remove placeholder of radio & checkboxes 6. When dropping a selection field, popup opens => focus should be on the multiline input (cursor should be into it) 7. Should not be able to save a selection field if I haven't added at least one option 8. If I have added some signers and haven't added any sign items linked to the signer, I should see a warning remark in the send wizard "Some signers have no related sign items." 9. In the send wizard, optional message should be at least 5 lines and remove padding 10. In the send wizard, rename the "add certificate reference" 11. Reduce the hovering effect (when you hover sign items, don't make the sign items overlap ____________________________________________________________________________________________________________ task-id: 4646328 Forward-Port-Of: odoo/enterprise#81484
In this commit, we fix the latest step of tour. We can't click on primary or secondary button ... make no sense. As the primary button download the pdf file and there is no test to ensure the file is well downloaded, it make more sense to click on close the modal. With the fix in https://github.com/odoo/odoo/pull/202089 and without the correction, the tour was timeout exceeded. Forward-Port-Of: odoo/enterprise#81672 Forward-Port-Of: odoo/enterprise#81596
Original PR description
In this commit, we fix the latest step of tour. We can't click on primary or secondary button ... make no sense. As the primary button download the pdf file and there is no test to ensure the file is well downloaded, it make more sense to click on close the modal. With the fix in https://github.com/odoo/odoo/pull/202089 and without the correction, the tour was timeout exceeded. Forward-Port-Of: odoo/enterprise#81672 Forward-Port-Of: odoo/enterprise#81596
### Issue: Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode app. #### Use case 1 (split move): - Create a storable product P tracked by lot - Adjust the onHand quantity to put 2 quants in stock: - quant1: Location: WH/Stock, lot_id: LOT0001, quantity: 3.0 - quant2: Location: WH/Stock, lot_id: LOT0002, quantity: 3.0 - Create and confirm a Deli
Original PR description
### Issue: Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode…
### Issue:
Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode app.
#### Use case 1 (split move):
- Create a storable product P tracked by lot
- Adjust the onHand quantity to put 2 quants in stock:
- quant1: Location: WH/Stock, lot_id: LOT0001, quantity: 3.0
- quant2: Location: WH/Stock, lot_id: LOT0002, quantity: 3.0
- Create and confirm a Delivery order for 3 x P
> The move of the delivery should have reserved 3 units form LOT0001
- Enter the barcode app, scan you DO-name
- Scan your product barcode then scan LOT002 three times
- Leave the barcode app and come back
#### > The barcode line 3/3 was updated to 3/6: 0/3 LOT001 and 3/3 LOT002.
#### Use case 2 (split move line):
- Create 2 storable products P and COMP.
- Adjust the onHand quantity to put 10 units of COMP in stock.
- Create a bill of material for P with one line: - 1 x COMP
- Create and confirm an MO for 10 units of P.
- Set the qty_producing to 5 units -> 5 units of comp are reserved
- Enter the barcode app, scan you MO-name
- The component line should be 5/5 since 5 units are reserved.
- Adjust the registration to 1/5.
- Leave the barcode app and come back
#### > The barcode line 1/5 was updated to 1/1 and 0/9 instead of 0/4.
### Cause of the Issue:
In both cases, the problem comes from the fact we leave the barcode with a different reservation than the initial one.
In the first use case, a new move will be created with a quantity of 3 in order to handle the new line created with LOT002 as soon as you have scanned your products. Therefore even though you entered the barcode app with a reservation demand of 3 units you leave it with 2 move lines with a cumulative quantity of 3 + 3 = 6:
- line1: quantity: 3, lot_id: LOT001, picked: False
- line2: quantity: 3, lot_id: LOT002, picked: True The next time you enter the app you will therefore see a reservation demand of 6 rather than 3.
In the second use case however, a move line is simply created by the `split_uncompleted_moves` when you exit the barcode app: https://github.com/odoo/enterprise/blob/0f4e8ce54be746db02e9f4a6974e387d90608a08/stock_barcode_mrp/models/stock_move.py#L18-L29
And the quantity of the new move line is based on the `prodcut_uom_qty` of the move rather than the initial reservation demand (quantity when entering barcode). This explains why reservation demand changed from 5 to 10 when you left and came back.
Community: odoo/odoo#193465
opw-4353884 and opw-4417870
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/enterprise#81447
Forward-Port-Of: odoo/enterprise#77068The authorized signatory image is resized and loses it's aspect ratio. To fix, the w-100 (100% width) class is removed. OPW-4586108 Forward-Port-Of: odoo/enterprise#81613
Original PR description
The authorized signatory image is resized and loses it's aspect ratio. To fix, the w-100 (100% width) class is removed. OPW-4586108 Forward-Port-Of: odoo/enterprise#81613
Same logic as: https://github.com/odoo/enterprise/pull/79947 rb-145524 rb-145525 Forward-Port-Of: odoo/enterprise#81763
Original PR description
Same logic as: https://github.com/odoo/enterprise/pull/79947 rb-145524 rb-145525 Forward-Port-Of: odoo/enterprise#81763
This commit removes deprecated operations, associated with code that was deleted from the OPERATIONS_WHITELIST in commit (1). It made no longer sense to list those operations as they are no longer callable. (1) 2a27ee64c19d1a467fd99e15d375af16abfaaa70 Forward-Port-Of: odoo/enterprise#81739
Original PR description
This commit removes deprecated operations, associated with code that was deleted from the OPERATIONS_WHITELIST in commit (1). It made no longer sense to list those operations as they are no longer callable. (1) 2a27ee64c19d1a467fd99e15d375af16abfaaa70 Forward-Port-Of: odoo/enterprise#81739