Daily updates from Odoo
Navigate
Branch
Friday, May 8, 2026
283 changes
15 changes
Resolved issues and error corrections
This update prevents errors that occurred when loading paid orders with loyalty cards whose programs had been archived. Previously, the system would fail to open the partner list, causing a disruption in processing transactions. This fix ensures smooth operation for paid orders using loyalty programs, improving the customer experience.
Original PR description
Before this commit, when loading a paid order with a loyalty card that its program had been archived, an error was raised when opening the partner list due to the missing program. opw-6166079 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262128 Forward-Port-Of: odoo/odoo#261501
This update resolves an issue where the branch code field wasn't correctly displayed on the contact form for Odoo's Thailand localization. The fix ensures that branch code information is accurately shown, streamlining data entry for Thai users and improving the accuracy of their records.
Original PR description
Fix the inheritance of branch code field in res.partner form view for Thailand localization. task-6177982
This update resolves an issue where sign templates with read-only date fields were incorrectly flagged as incomplete, preventing users from signing. The fix ensures that these fields are properly recognized and included during the signing process, improving document completion rates. This change ensures consistent functionality across all sign templates.
Original PR description
Version: - saas-19.2 Steps to reproduce: - Create a sign template with a read-only (constant) date field. - Add at least one more sign item (e.g., text/signature). - Try to sign the document. Issue: - Signing is blocked with warning: “Some required items are not filled”. Cause: - Read-only date fields don’t have a value in `item.el.value`. - The system only checks value, so it treats the field as empty. - Even though the date is visible in the document, it is not picked during submission. Solution: - Update date value extraction to also read from `textContent` when value is empty. - This ensures read-only date fields are correctly considered filled. task-6181883 Forward-Port-Of: odoo/enterprise#116009
This update resolves an issue where the system didn't properly validate overtime allocations when changing the time off type. Previously, changes to the time off type didn't trigger a necessary check to ensure sufficient overtime hours were available. Now, the system correctly validates these changes, preventing incorrect allocation adjustments.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install `hr_holidays_attendance` module 2. Time off > configurations > Time off types 3. Create new time off type as follows: * Set…
Steps to reproduce: ------------------------------------- 1. Install `hr_holidays_attendance` module 2. Time off > configurations > Time off types 3. Create new time off type as follows: * Set Approval to Approved by time off officer * Change Take time off In to Hours 4. Save the record and enable Deduct Extra Hours 5. Go to Management > Allocations 6. Create new allocation with created time off type and select 'Audrey Peterson' in Employee 7. Try to save record > Validation Error > Discard changes 8. Change time off type to Paid Time Off > add 'Audrey Peterson' > save record 9. Now change Time Off type to Created Time Off type > Save Observation: ------------------------------------- No Validation Error raised, as the employee and time off type are still the same as they were during creating allocation. Issue: ------------------------------------- In `write` method, there was no any check for the employee if it has enough overtime hours when we change Time off type (`holiday_status_id`) to overtime-deductible leave type. Check was only present in the `create` method: https://github.com/odoo/odoo/blob/a95c639db68f98351c7162de58a041a1c0ee13c5/addons/hr_holidays_attendance/models/hr_leave_allocation.py#L39-L49 Solution: ------------------------------------- 1. Create new function for validate overtime and to create adjustment 2. Added that function to `create` as well as in `write` method 3. Prevents creating a duplicate overtime adjustment for an allocation that already has one opw-5937185 Forward-Port-Of: odoo/odoo#263064 Forward-Port-Of: odoo/odoo#249793
This update resolves a duplication issue in the French Profit and Loss report by removing a redundant account (6492) from the calculation. The change ensures accurate reporting of financial performance for French businesses using Odoo Enterprise. This fix was implemented as an addition to a previous effort to prevent duplicate accounts.
Original PR description
This commit is an addon to this commit[[1]] where we tried to avoid duplicate accounts in the Profit And Loss report. The problem is that we don't exclude the separated account 6492 from the original one (649). This commit adds the removal of this account in the report formula. task-6053784 Here is the coverage: [Profit and loss account (FR) - Accounts Coverage Report (2).xlsx](https://github.com/user-attachments/files/27011824/Profit.and.loss.account.FR.-.Accounts.Coverage.Report.2.xlsx) The correct separation: <img width="837" height="485" alt="image" src="https://github.com/user-attachments/assets/ebe98976-f689-4389-866a-c9a0c8b50534" /> [1]: https://github.com/odoo/enterprise/commit/4587c49c4b220305652150d2f21a95fb7cfa188d Forward-Port-Of: odoo/enterprise#116319 Forward-Port-Of: odoo/enterprise#114858
This update corrects a formatting issue with receipts printed on specific receipt printers (like the TM-T88V) that use 180dpi resolution. The previous setting caused the last portion of the receipt to be cut off, resulting in a less-than-ideal print quality. This fix ensures receipts print correctly on these common printers.
Original PR description
Printers with a 180dpi (so 180 dot per 25.4mm) (like the TM-T88V) have a standard print width of 72mm on an 80mm roll. Which gives 72/25.4*180 = 510.23 dots / pixels So, the manufactures usually defines it as 512 dot grid. Right now, the width is set to 576px, causing the last 65 pixels to not be printed. opw-6087544 opw-6125418 Forward-Port-Of: odoo/odoo#261754
This update ensures that website appointment creations are consistently synchronized with Outlook calendars. Previously, a timing issue prevented new appointments from being added to Outlook, particularly when created during the 12-hour cron sync cycle. This change resolves the synchronization problem, guaranteeing that all website appointments are reflected in a user's Outlook calendar.
Original PR description
Before this change, the "Outlook: synchronization" cron would not create calendar events on Outlook's side in _sync_odoo2microsoft due to a filter for calendar.events written to within 5 minutes of…
Before this change, the "Outlook: synchronization" cron would not create calendar events on Outlook's side in _sync_odoo2microsoft due to a filter for calendar.events written to within 5 minutes of microsoft_last_sync_date, when _sync_data is not called when a calendar.event is created, such as through website.appointment. microsoft_last_sync_date was set to datetime.now() at the beginning of _sync_microsoft_calendar, which would skip a large period of time between the last sync and now, if the only syncs were triggered through cron, and not _sync_data (by opening the calendar app). To reproduce, Default "Outlook: synchronization" is ran every 12 hours. 1) Calendar event is synced through "Outlook: synchronization" cron at 00:00, setting microsoft_last_sync_date to 00:00 2) A website.appointment is created for a resource with Outlook calendar sync enabled any time between 00:01 - 11:54. 3) "Outlook: synchronization" runs again at 12:00, which sets microsoft_last_sync_date to 12:00, and filters out calendar.events based on their write_dates in _extend_microsoft_domain that need syncing outside of 11:55 to 12:00. This change removes setting of microsoft_last_sync_date at the beginning of _sync_microsoft_calendar, where we need to use the old value before setting it at the end of _sync_microsoft_calendar. opw-5212908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262665 Forward-Port-Of: odoo/odoo#245964
This update resolves a problem where DIAN XML files (AttachedDocument type) weren't being correctly imported, leading to data loss. The fix ensures the system first identifies the core AttachedDocument structure, allowing it to properly process the embedded invoice data as required by DIAN regulations.
Original PR description
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN…
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN documentation, the `ProfileID` should contain the literal `Factura Electrónica de Venta` https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Factura-Electronica-de-Venta-vr-1-9.pdf However, no strict validation is enforced, so variants should still be supported ### Cause: When importing a DIAN document of type `AttachedDocument`, `_get_import_file_type()` searches for a node starting with `DIAN 2.1:` This causes issues with documents structured like: ```xml <AttachedDocument> <CustomizationID>Documentos adjuntos</CustomizationID> <ProfileID>DIAN 2.1: Factura Electrónica de Venta</ProfileID> </AttachedDocument> ``` In this case, `DIAN 2.1:` is detected first, causing the file to be identified as `account.edi.xml.ubl_dian` As a result, the `<AttachedDocument>` wrapper is ignored and the importer tries to parse the file using the wrong structure, preventing any data extraction The import should first detect the `<AttachedDocument>` structure, then unwrap and process the embedded document ### Steps to reproduce: - Install `l10n_co_dian` - Go in Bills and import the test document: `import_attached_document_2` Before the fix, nothing it extracted from the xml opw-6083523 Forward-Port-Of: odoo/enterprise#115599
This update resolves a crash in the abandoned cart reminder system when Click & Collect is enabled. The fix ensures the system handles scheduled actions without a frontend cart, preventing failures and guaranteeing reminders are sent correctly. This improves the reliability of the Click & Collect process.
Original PR description
Problem: The abandoned cart reminder can crash when Click & Collect is enabled. The stock availability check reaches website_sale_collect._get_product_available_qty(), which assumes request.cart…
Problem: The abandoned cart reminder can crash when Click & Collect is enabled. The stock availability check reaches website_sale_collect._get_product_available_qty(), which assumes request.cart always exists. Solution: Safely access the cart with hasattr and fall back to the existing no-cart behavior when it is unavailable. Why: Scheduled actions may have a request object without a frontend cart. This fix prevents the cron from failing while sending abandoned cart reminders. Reproduction Steps: - Configure the website with a warehouse. - Create/publish a delivery method with delivery type “Pick up in store”. Confirm the website has both warehouse_id and in_store_dm_id - Create a cart from the website shop using a storable product that has does not have "Sell When Out of Stock" turned on. - Leave the cart without checking out. - On the generated quotation set the date to the past, but also the date must be after the website.send_abandoned_cart_email_activation_time - Run the abandoned cart reminder scheduled action for the eligible abandoned cart with a storable product. Related Ticket: opw-6133986 Related PR: https://github.com/odoo/odoo/pull/242864 Forward-Port-Of: odoo/odoo#261885
This update automatically refreshes the payment screen when the PIS (Payment Initiation Service) status changes. Previously, users had to manually refresh the page to see the updated status, leading to delays. This improvement ensures payment information is always current and accurate.
Original PR description
There were some buttons like sign payment that were visible even when the PIS status was signed which needed a manual page refresh for the update to reflect, now it's reflected automatically on the PIS status change. task-5417365 Forward-Port-Of: odoo/enterprise#116427 Forward-Port-Of: odoo/enterprise#114299
This update fixes an issue where down payment amounts weren't correctly calculated on invoices for companies using tax-inclusive pricing. The change ensures the down payment section's total accurately reflects the sum of all payments, improving invoice accuracy for our tax-included customers. It addresses a discrepancy in how subtotals and totals were handled in the invoice report.
Original PR description
Issue: --- In `tax included` companies, the down payment section is not correctly calculated. Steps to reproduce: - Configure selected company's field account_price_include to be "tax_included" -…
Issue: --- In `tax included` companies, the down payment section is not correctly calculated. Steps to reproduce: - Configure selected company's field account_price_include to be "tax_included" - Create a sales order - Create 1 or more down payment invoices for the SO and confirm - Create a final invoice that pays for the rest of it - On this final invoice where the down payment(s) are also listed, click on the preview button Current behavior: - The down payment section's total is the sum of the subtotal Expected behavior: - The down payment section's total should be the sum of the totals Justification: --- The amounts included in the invoice report are dependent on the `company_price_include` field in `res.partner`. If tax_excluded, subtotals are listed. If `tax_included`, totals are listed. There was a mismatch between the entries and the section total; the section entries could have the total as the amount while the section's sum would be in terms of subtotals. Fix: --- On stable we can still rely on `section_subtotal` but set its amount to total instead of subtotal in case of `tax_included`. However, this fix is not stable as there is a xpath on `t-set` expression in `l10n_ar`. To avoid breaking the views, we can re-set the `section_subtotal` in the next lines. This would still cause issues as it will replace the overridden logic in the `l10n_ar` implementation. To prevent that issue, we can re-set the `section_subtotal` only if the value is the same as `get_section_subtotal`, which means we are in the main implementation and it's safe to re-set the value. opw-6127615 Forward-Port-Of: odoo/odoo#262364 Forward-Port-Of: odoo/odoo#261372
This update fixes an issue where the Work Orders Planning Gantt view incorrectly included workcenter downtime in employee duration totals. The change ensures that workcenter unavailability is now accurately accounted for, providing more precise duration calculations for employee workloads.
Original PR description
In the Work Orders Planning Gantt view grouped by employee, the total duration did not consistently respect workcenter unavailabilities. This change ensures workcenter unavailabilities are included in the payload when grouping by employees, allowing the renderer to correctly calculate aggregated totals. Before: - Employee-grouped totals could count duration during workcenter downtime. After: - Employee-grouped totals correctly respect workcenter unavailability. This commit's changes: - In employee Gantt data preparation, added the workcenter unavailability payload by extracting workcenter IDs from the fetched work orders and calling `_gantt_unavailability` on those IDs to retrieve the intervals that should be excluded from the totals. task-6089572 Forward-Port-Of: odoo/enterprise#112805
This update fixes a visual inconsistency in the Point of Sale (POS) interface. It now applies the same background styling to combo products as regular products, creating a more uniform and professional look across the product screen and combo configuration popup. This improves the overall user experience and presentation of products.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update fixes an issue where the VAT label on invoices generated in PDF format was incorrectly displayed in the user's preferred language instead of the company's language. Now, invoices will always use the correct language based on the company's settings, ensuring accurate and consistent invoicing for all businesses, regardless of user language preferences.
Original PR description
When having for example a polish company but setting the language as an user to another one for example chinese, vat label on the top of the invoice pdf would be written in your user preference language so in this case chinese where it should be written in companies language so here in polish opw-6067250 Forward-Port-Of: odoo/odoo#261067
This update resolves a bug that prevented users from reconciling bank statements on smaller screens (like mobile devices). The issue stemmed from incorrect data passing within the application's interface, specifically when opening the bank reconciliation dialog. This fix ensures the reconciliation process works reliably across all screen sizes.
Original PR description
When clicking on the "Reconcile" button of a bank statement line on a small screen (ex: mobile) threw an OwlError "Invalid props for component 'KanbanController': unknown key 'bankRecInfo'". BankRecSelectCreateDialog injected `bankRecInfo` into `baseViewProps`, which is spread into the embedded view regardless of its type. On desktop the embedded view is a list (patched to accept `bankRecInfo`), but on small screens SelectCreateDialog falls back to a kanban view, whose controller does not declare that prop, triggering Owl's props validation. Only forward `bankRecInfo` when the inner view is a list by overriding `viewProps` instead of mutating `baseViewProps`. Steps to reproduce: - Enable the developer mode. - Open Bank Reconciliation. - Resize the window to a small/mobile width (or open from a mobile device). - On a statement line, click the "Reconcile" button to open the dialog. - OwlError is thrown opw-6070573 Forward-Port-Of: odoo/enterprise#114298
15 changes
New functionality added to Odoo
This update allows users to download General Ledger reports in CSV format. This provides greater flexibility for analyzing financial data and integrating it with other business systems. This enhancement improves reporting capabilities and data accessibility.
Original PR description
task-5734354 Forward-Port-Of: odoo/enterprise#115903 Forward-Port-Of: odoo/enterprise#107638
Resolved issues and error corrections
This update fixes an issue where users could add multiple companies to a single 'Bank and Cash' account, leading to validation errors. The fix clears outdated data to ensure accurate company counts during account management, improving data integrity.
Original PR description
Steps to reproduce: - Install `l10n_dk` module - Create the test branches under the `DK Company` - Add both companies(parent and branch) in `Bank and Cash` account - Go to Chart of Accounts and try…
Steps to reproduce:
- Install `l10n_dk` module
- Create the test branches under the `DK Company`
- Add both companies(parent and branch) in `Bank and Cash` account
- Go to Chart of Accounts and try to delete any account
Cause:
This error occurs because users can add multiple companies to a `Bank and Cash` account, although it should be prevented by the `_check_company_consistency` [constrain]. However, the code still allows it because, in this [commit], `depends_context=('uid',)` was set on the `company_ids` field to keep separate sudo/non-sudo caches for the field. As a result, during the validation [check], the user may still have stale cached values, causing the system to detect only a single company.
Solution:
Here, we first clear all cached values for the old record and force the ORM to re-fetch the values from the database, ensuring an updated recordset. So, the validation error is raised when saving multiple companies.
[constrain]: https://github.com/odoo/odoo/blob/177fc59b7df7c8522234aaa4dbaeb4fba3bb2131/addons/account/models/account_account.py#L309-L310
[check]: https://github.com/odoo/odoo/blob/177fc59b7df7c8522234aaa4dbaeb4fba3bb2131/addons/account/models/account_account.py#L309-L310
[commit]: https://github.com/odoo/odoo/pull/220294/changes/5096d083a38968425920aa5bf466b156eebb3dc7
Ticket [link](https://www.odoo.com/odoo/project.task/6125840)
opw-6125840
Forward-Port-Of: odoo/odoo#263246
Forward-Port-Of: odoo/odoo#260261This update ensures that website appointment creations are consistently synchronized with Outlook calendars. Previously, a timing issue prevented new appointments from being reflected in Outlook, even when the Outlook sync feature was enabled. This change corrects the synchronization process, guaranteeing that all website appointments are correctly reflected in a user's Outlook calendar.
Original PR description
Before this change, the "Outlook: synchronization" cron would not create calendar events on Outlook's side in _sync_odoo2microsoft due to a filter for calendar.events written to within 5 minutes of…
Before this change, the "Outlook: synchronization" cron would not create calendar events on Outlook's side in _sync_odoo2microsoft due to a filter for calendar.events written to within 5 minutes of microsoft_last_sync_date, when _sync_data is not called when a calendar.event is created, such as through website.appointment. microsoft_last_sync_date was set to datetime.now() at the beginning of _sync_microsoft_calendar, which would skip a large period of time between the last sync and now, if the only syncs were triggered through cron, and not _sync_data (by opening the calendar app). To reproduce, Default "Outlook: synchronization" is ran every 12 hours. 1) Calendar event is synced through "Outlook: synchronization" cron at 00:00, setting microsoft_last_sync_date to 00:00 2) A website.appointment is created for a resource with Outlook calendar sync enabled any time between 00:01 - 11:54. 3) "Outlook: synchronization" runs again at 12:00, which sets microsoft_last_sync_date to 12:00, and filters out calendar.events based on their write_dates in _extend_microsoft_domain that need syncing outside of 11:55 to 12:00. This change removes setting of microsoft_last_sync_date at the beginning of _sync_microsoft_calendar, where we need to use the old value before setting it at the end of _sync_microsoft_calendar. opw-5212908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262665 Forward-Port-Of: odoo/odoo#245964
This update resolves an issue where DIAN XML files (AttachedDocument type) were not being correctly imported, leading to data loss. The fix adjusts the import process to properly identify and handle these files, ensuring accurate data extraction as required by DIAN regulations.
Original PR description
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN…
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN documentation, the `ProfileID` should contain the literal `Factura Electrónica de Venta` https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Factura-Electronica-de-Venta-vr-1-9.pdf However, no strict validation is enforced, so variants should still be supported ### Cause: When importing a DIAN document of type `AttachedDocument`, `_get_import_file_type()` searches for a node starting with `DIAN 2.1:` This causes issues with documents structured like: ```xml <AttachedDocument> <CustomizationID>Documentos adjuntos</CustomizationID> <ProfileID>DIAN 2.1: Factura Electrónica de Venta</ProfileID> </AttachedDocument> ``` In this case, `DIAN 2.1:` is detected first, causing the file to be identified as `account.edi.xml.ubl_dian` As a result, the `<AttachedDocument>` wrapper is ignored and the importer tries to parse the file using the wrong structure, preventing any data extraction The import should first detect the `<AttachedDocument>` structure, then unwrap and process the embedded document ### Steps to reproduce: - Install `l10n_co_dian` - Go in Bills and import the test document: `import_attached_document_2` Before the fix, nothing it extracted from the xml opw-6083523 Forward-Port-Of: odoo/enterprise#115599
This update automatically refreshes payment screens when the PIS (Payment Initiation System) status changes. Previously, users had to manually refresh the page to see the updated status, which is now seamless. This improves the user experience and ensures accurate payment information is always displayed.
Original PR description
There were some buttons like sign payment that were visible even when the PIS status was signed which needed a manual page refresh for the update to reflect, now it's reflected automatically on the PIS status change. task-5417365 Forward-Port-Of: odoo/enterprise#116427 Forward-Port-Of: odoo/enterprise#114299
This update fixes a visual inconsistency in the Point of Sale (POS) interface. Previously, combo products and regular products had different card styles. Now, both product and combo product cards have a unified background style, creating a more consistent and professional look for the customer experience. This improves the overall usability and presentation of products within the POS system.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update resolves an issue that prevented users from reconciling bank statements on smaller screens (like mobile devices). The fix ensures that the correct data is passed to the bank reconciliation dialog, preventing a technical error that would have blocked the process. This improves usability for all users.
Original PR description
When clicking on the "Reconcile" button of a bank statement line on a small screen (ex: mobile) threw an OwlError "Invalid props for component 'KanbanController': unknown key 'bankRecInfo'". BankRecSelectCreateDialog injected `bankRecInfo` into `baseViewProps`, which is spread into the embedded view regardless of its type. On desktop the embedded view is a list (patched to accept `bankRecInfo`), but on small screens SelectCreateDialog falls back to a kanban view, whose controller does not declare that prop, triggering Owl's props validation. Only forward `bankRecInfo` when the inner view is a list by overriding `viewProps` instead of mutating `baseViewProps`. Steps to reproduce: - Enable the developer mode. - Open Bank Reconciliation. - Resize the window to a small/mobile width (or open from a mobile device). - On a statement line, click the "Reconcile" button to open the dialog. - OwlError is thrown opw-6070573 Forward-Port-Of: odoo/enterprise#114298
This update resolves an issue where the filmstrip height on the shop page was inconsistent when images were missing. The fix ensures a consistent height for all filmstrip designs, regardless of whether an image is present. A placeholder image is now displayed when no image is available, improving the overall visual appearance.
Original PR description
This commit fixes two issues regarding the filmstrip in the /shop page : - Adding a minimum height to the elements of the `default` and `bordered` designs, so that their heights remain consistent…
This commit fixes two issues regarding the filmstrip in the /shop page : - Adding a minimum height to the elements of the `default` and `bordered` designs, so that their heights remain consistent whether they contain an image or not. - Display a placeholder image for the `images` filmstrip if empty. task-5491550 | Before | After | |--------|--------| | <img width="613" height="103" alt="image" src="https://github.com/user-attachments/assets/852ef2ce-6265-4622-9e30-4e8112bbf264" /> | <img width="618" height="114" alt="image" src="https://github.com/user-attachments/assets/0933c0c2-a669-4236-9148-a25226214ce6" /> | | <img width="718" height="164" alt="image" src="https://github.com/user-attachments/assets/ac1b8d91-44fa-4ce0-8ddb-beba271a2423" /> | <img width="718" height="164" alt="image" src="https://github.com/user-attachments/assets/8676e9f9-074b-40e9-a75b-76561437c081" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263118 Forward-Port-Of: odoo/odoo#255543
This update ensures that POS terminal payments using Stripe are accurately tracked. Previously, a successful authorization could lead to a payment being incorrectly marked as 'done' if the capture process failed. Now, the system correctly identifies capture failures and returns the payment to 'retry' status, ensuring accurate payment visibility within the POS.
Original PR description
Before this commit, a Stripe terminal payment could still be marked as `done` even if the capture step failed. This happens when the card authorization succeeds, `processPayment` returns a payment…
Before this commit, a Stripe terminal payment could still be marked as `done` even if the capture step failed.
This happens when the card authorization succeeds, `processPayment` returns a payment intent, but the subsequent `stripe_capture_payment` RPC fails and `capturePaymentStripe()` returns `false`. The capture flow did not guard that return value and still fell through to `line.set_payment_status("done")`.
In practice, this can happen for example if the Odoo server cannot resolve `api.stripe.com` while capturing the payment intent. Stripe then keeps the payment in `requires_capture`, while the POS line is still synced as paid.
Guard the failed capture path and stop the flow before marking the line as done. In that case, the payment line is put back to `retry` so the failure is visible in the POS instead of silently creating a paid, uncaptured payment.
opw-6075384
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#263200
Forward-Port-Of: odoo/odoo#261521This update fixes an issue where the Point of Sale dashboard incorrectly displayed all POS locations under only the first warehouse, even when a different warehouse and operation type were configured. The change ensures that the POS warehouse aligns with the selected operation type, improving accuracy and usability for warehouse management.
Original PR description
When filtering pos by warehouse_id, all pos are under the same warehouse even if we had configure an Operation Type from a different warehouse for a specific pos. Steps to reproduce: ------------------- * Setup a second warehouse in the company * Add the new POS operation type picking for the second warehouse on the POS settings * Group by warehouse in the POS dashboard > Observation: It always shows the first warehouse Why the fix: ------------ The warehouse_id field on pos.config was a plain Many2one with a static default that always set it to the first warehouse of the company. Convert warehouse_id into a computed stored editable field that derives from picking_type_id.warehouse_id. This ensures the warehouse stays in sync when the operation type changes, while still allowing manual override for the Ship Later feature. opw-6104652 Forward-Port-Of: odoo/odoo#262821 Forward-Port-Of: odoo/odoo#258830
This update fixes an issue where sales tax reports for 7% and 5% Maltese taxes were incorrectly displayed with negative values and grouped under the 18% tax line. The fix ensures accurate reporting of all tax rates (18%, 7%, and 5%) within the Tax Report, improving the reliability of financial data.
Original PR description
### Issue before this commit: Sales taxes at 7% and 5% were incorrectly mapped to the same tax report tags as the 18% sales taxes, causing them to be reported under the 'Taxable Goods/Services at…
### Issue before this commit: Sales taxes at 7% and 5% were incorrectly mapped to the same tax report tags as the 18% sales taxes, causing them to be reported under the 'Taxable Goods/Services at 18%' line. In addition, the 7% and 5% report lines displayed negative amounts instead of positive ones. ### Steps to reproduce the issue: 1. Install l10n_mt 2. Create invoices using 18%, 7%, 5% taxes 3. Go to Accounting > Reporting > Tax Report 4. See the amounts for Taxable Goods/Services at 18% is negative and all the invoices are reported into the Taxable Goods/Services at 18% even if the tax applied to the invoice is 5% or 7% ### Cause of the issue: An automatic script (https://github.com/odoo/odoo/pull/225252) missed to invert sign of formulas for the 7% and 5% lines, so their values were displayed with the wrong sign. Moreover it is assigned to the 7% and 5% Malta sales taxes the III.1_base and III.1_tax tags, which belong to the 18% tax report line. ### Reason to introduce the fix: The tag mapping must match the tax report structure so that 18%, 7%, and 5% sales taxes are reported in their respective lines. The report formulas for the 7% and 5% lines must also use the proper sign convention to display positive amounts consistently. opw-6015509 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263073 Forward-Port-Of: odoo/odoo#254894
This update resolves an issue where internal transfers using multi-step routes were incorrectly flagging a missing delivery carrier. The fix ensures that carrier validation is skipped for internal movements, streamlining the process and preventing unnecessary errors. This improves the efficiency of internal stock transfers within the RO company.
Original PR description
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method…
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method `_compute_l10n_ro_edi_stock_enable` was overridden to check for `not picking.batch_id` However, for multi-step delivery routes, internal pickings still triggered the carrier validation, as no check on the `picking_type` was performed ### Steps to reproduce: - Install `l10n_ro_edi_stock_batch` with demo data and switch to RO Company - In Settings, enable `Multi-Step Routes` - Set the RO Warehouse's Outgoing Shipments to `Pick then Deliver (2 steps)` - Create a Product (e.g. RO product) - Create a Delivery Method (e.g. RO Delivery, Partner: Any, Delivery Product: RO Product) - Create and Confirm a Sale Order for the RO Product - From the Sale Order, click Delivery and validate the picking ### Before the fix, internal transfers raised: `The picking RO Co/PICK/00001 is missing a delivery carrier.` enterprise-PR: https://github.com/odoo/enterprise/pull/114166 opw-5925087 Forward-Port-Of: odoo/odoo#263036 Forward-Port-Of: odoo/odoo#257293
This update resolves an issue that prevented users from modifying warehouse routes in the Romanian (RO) accounting version of Odoo. The fix addresses a coding error that occurred when updating routes, causing a system crash. This ensures users can now correctly manage warehouse routes without encountering this disruption.
Original PR description
### Issue: When changing the routes of a Romanian warehouse, an error is raised, blocking any modification of multi-step routes ### Cause: The code attempts to access `in_type_id` from `warehouse_data` However, when updating routes, `warehouse_data` is empty in the method `_create_or_update_sequences_and_picking_types` This leads to a crash because the code assumes that `warehouse_data` always contains `in_type_id` and `out_type_id` Additionally, even if the data were present, it would result in creating duplicate `stock.picking.type` records ### Steps to reproduce: - Install `l10n_ro_saft_stock` with demo data and switch to `RO Company` - Enable `Multi-steps Routes` in Settings - Try to modify Incoming or Outgoing Shipments on a warehouse - When saving, the following error is raised: "Oh snap! in_type_id" odoo-pr: https://github.com/odoo/odoo/pull/257293 opw-5925087 Forward-Port-Of: odoo/enterprise#114166
This update fixes an issue where a child contact's zipcode was incorrectly overriding a parent's manually entered zipcode. The change ensures that child contact zipcodes always reflect the parent's city's zipcode, maintaining accurate address information. This prevents inconsistencies and ensures data integrity.
Original PR description
Currently, when a res.parter is given a parent, base_address_extended runs _onchange_city_id. This sees the city change and alters the zipcode to match the city's zipcode. However, this field can be…
Currently, when a res.parter is given a parent, base_address_extended runs _onchange_city_id. This sees the city change and alters the zipcode to match the city's zipcode. However, this field can be manually altered to differ from the city's zipcode. Thus, when a parent has a city, the zipcode will override the manually entered zipcode for a child contact. This commit solves this by checking for the parent's zipcode before blindly setting it to the city's zipcode. Steps to reproduce: 1. Install `base_address_extended` 2. Enable "Enforce Cities" on a country `(res.country)` 3. Add a city to that country with a zipcode of 123 4. Create a new contact (parent) and select the configured country 5. Select the city (the zipcode will fill in from the city's zipcode) 6. Overwrite the zipcode with 456 7. Save the contact (parent) 8. Create a new contact (child) 9. Set the company to the parent contact and save 10. The zipcode of the child will be the city's zip (123), not the parents' zip (456), thus the addresses will be different, and the child contact type will be 'other' opw-6131280 closes #262651 Forward-Port-Of: odoo/odoo#262651
Features or functions removed from Odoo
This update removes outdated code from the welcome page related to call preview streams. Previously, the welcome page handled stream management, but this has been updated to a more efficient system. This cleanup improves the stability and performance of the welcome page.
Original PR description
**Purpose of this PR:** Since odoo#228382, the welcome page no longer manages call preview media streams itself. `CallPreview` now handles both stream cleanup on destroy and the `getUserMedia` race that could happen when leaving the page while permission was still pending. The `isClosed` flag was introduced in odoo#179690 to guard that race in `WelcomePage`, but it became obsolete after the refactor and the assignment was not cleaned up. This commit removes the unused assignment from the welcome page. Forward-Port-Of: odoo/odoo#263216
23 changes
Resolved issues and error corrections
This update resolves a problem preventing the demo data for the MRP Subcontracting module from loading correctly in Odoo 19. The fix ensures that the correct product template record is used, which was previously mismatched, causing an error. This ensures demo data loads properly for testing and training.
Original PR description
Steps to reproduce: - Initialize an empty database with demo data enabled - Install mrp_subcontracting Problem: The product.product `product_delivery_02` record does not share the same #ID as the product.template `product_delivery_02_product_template` record. This leads to an error when loading the demo data. This errors only started with Odoo v19. Solution: Use the right product.template `product_delivery_02_product_template` record. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262949
This update resolves an issue where users could incorrectly add multiple companies to 'Bank and Cash' accounts, leading to validation errors. The fix ensures accurate company tracking by clearing outdated data and forcing a fresh database check.
Original PR description
Steps to reproduce: - Install `l10n_dk` module - Create the test branches under the `DK Company` - Add both companies(parent and branch) in `Bank and Cash` account - Go to Chart of Accounts and try…
Steps to reproduce:
- Install `l10n_dk` module
- Create the test branches under the `DK Company`
- Add both companies(parent and branch) in `Bank and Cash` account
- Go to Chart of Accounts and try to delete any account
Cause:
This error occurs because users can add multiple companies to a `Bank and Cash` account, although it should be prevented by the `_check_company_consistency` [constrain]. However, the code still allows it because, in this [commit], `depends_context=('uid',)` was set on the `company_ids` field to keep separate sudo/non-sudo caches for the field. As a result, during the validation [check], the user may still have stale cached values, causing the system to detect only a single company.
Solution:
Here, we first clear all cached values for the old record and force the ORM to re-fetch the values from the database, ensuring an updated recordset. So, the validation error is raised when saving multiple companies.
[constrain]: https://github.com/odoo/odoo/blob/177fc59b7df7c8522234aaa4dbaeb4fba3bb2131/addons/account/models/account_account.py#L309-L310
[check]: https://github.com/odoo/odoo/blob/177fc59b7df7c8522234aaa4dbaeb4fba3bb2131/addons/account/models/account_account.py#L309-L310
[commit]: https://github.com/odoo/odoo/pull/220294/changes/5096d083a38968425920aa5bf466b156eebb3dc7
Ticket [link](https://www.odoo.com/odoo/project.task/6125840)
opw-6125840
Forward-Port-Of: odoo/odoo#263246
Forward-Port-Of: odoo/odoo#260261This update resolves a visual bug where the "Add to Cart" button appeared squeezed on product pages when in edit mode with specific image and purchase style settings. The fix prevents a click event from being triggered when the spacebar is pressed, ensuring the button's correct size and functionality.
Original PR description
This code fixes a bug related to the size of the “Add to Cart” button. To reproduce the bug, you need to be on a product page in edit mode. In this mode, you must set the Image Area to 33 and the purchase style to Large. You will see that the “Add to Cart” button is squeezed. The bug occurs because, in edit mode, a new span container is added around the button to indicate that it can be edited. The purpose of the span was to prevent a click event from being triggered when pressing the space key. The fix removes this span and adds a listener to capture space key presses, allowing a real space character to be inserted instead of triggering a click. find-when-working-on-task-6147939 **Before** <img width="1918" height="552" alt="before" src="https://github.com/user-attachments/assets/1ef6e793-45d4-4c6b-ab2b-cdd4ace5381f" /> **After** <img width="1913" height="1054" alt="after" src="https://github.com/user-attachments/assets/b611834e-3414-4b37-af9e-c0942c6cb05b" />
This update fixes an issue where enabling Employee Login in POS and leaving the ‘Basic rights’ field empty prevented other employees from logging in. Now, all company employees can access the POS login screen, aligning with the intended functionality of allowing basic cashiers to log in regardless of configured advanced rights.
Original PR description
With Employee Login enabled in POS, leaving the “Basic rights” field empty is meant to allow all employees to log in as basic cashiers. In v19, configuring at least one Advanced/Minimal employee…
With Employee Login enabled in POS, leaving the “Basic rights” field empty is meant to allow all employees to log in as basic cashiers. In v19, configuring at least one Advanced/Minimal employee while keeping “Basic rights” empty incorrectly restricted the login list to only the explicitly configured employees (and the linked backend user), so other employees could no longer sign in. Steps to reproduce: ------------------- * Go to POS settings and enable Employee Login. * Add at least one employee in Advanced rights. * Leave Basic rights empty. * Open POS login. > Observation: Only Advanced can sign in. Other employees are missing. Why the fix: ------------ The employee loading domain must only become restrictive when Basic rights is explicitly set. If Basic rights is empty, all company employees should remain selectable, and Advanced/Minimal should only affect roles, not visibility. Align with 19.1 behavior/state of code. opw-6170066 Forward-Port-Of: odoo/odoo#263100 Forward-Port-Of: odoo/odoo#261939
This update corrects a minor error in the automated tests for our Point of Sale (POS) system. A typo was identified in the test assertions, which was causing intermittent failures. The fix ensures the tests run reliably and accurately reflect the POS order flow.
Original PR description
Correct a typo in `test_01_order_flow` assertions. `pdis_order1` was reassigned multiple times; the second assertion should use `pdis_order2`. Task-6065459 Forward-Port-Of: odoo/enterprise#116424 Forward-Port-Of: odoo/enterprise#111917
This update resolves a technical issue that was causing a test to fail in our self-order system. The fix ensures that all time slots are generated for the current day, preventing errors related to time-dependent testing. This improves the reliability of the self-order process.
Original PR description
Before this commit: = - The test test_slot_limit_orders created slots only for the first day of the week (Monday). - The test scenario includes a slot at "18:00". - On Mondays, the test fails between 18:01 and 23:59 because the "18:00" slot no longer exists for the current day. - On other days, the test passes since slots are generated for the upcoming Monday. After this commit: = - Freezed the time to current day at "00:00" so that slot list can have every slot for that day. task-6043739 runbot-241836 Forward-Port-Of: odoo/odoo#254775
This update resolves an issue where DIAN XML files of type 'AttachedDocument' were not being imported correctly, resulting in lost data. The fix ensures the system correctly identifies and processes these files, aligning with DIAN documentation requirements for invoice structure.
Original PR description
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN…
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN documentation, the `ProfileID` should contain the literal `Factura Electrónica de Venta` https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Factura-Electronica-de-Venta-vr-1-9.pdf However, no strict validation is enforced, so variants should still be supported ### Cause: When importing a DIAN document of type `AttachedDocument`, `_get_import_file_type()` searches for a node starting with `DIAN 2.1:` This causes issues with documents structured like: ```xml <AttachedDocument> <CustomizationID>Documentos adjuntos</CustomizationID> <ProfileID>DIAN 2.1: Factura Electrónica de Venta</ProfileID> </AttachedDocument> ``` In this case, `DIAN 2.1:` is detected first, causing the file to be identified as `account.edi.xml.ubl_dian` As a result, the `<AttachedDocument>` wrapper is ignored and the importer tries to parse the file using the wrong structure, preventing any data extraction The import should first detect the `<AttachedDocument>` structure, then unwrap and process the embedded document ### Steps to reproduce: - Install `l10n_co_dian` - Go in Bills and import the test document: `import_attached_document_2` Before the fix, nothing it extracted from the xml opw-6083523 Forward-Port-Of: odoo/enterprise#115599
This update fixes a visual inconsistency in the Point of Sale interface. The styling of product and combo product cards has been unified, creating a more consistent and professional look across the product screen and combo configuration popup. This improves the overall user experience for sales staff.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update resolves an issue where the 'Reconcile' button on the bank statement dialog wouldn't work correctly on smaller screens (like mobile devices). The fix ensures the correct data is passed to the dialog component, preventing a validation error. This improves usability for users accessing the system on mobile.
Original PR description
When clicking on the "Reconcile" button of a bank statement line on a small screen (ex: mobile) threw an OwlError "Invalid props for component 'KanbanController': unknown key 'bankRecInfo'". BankRecSelectCreateDialog injected `bankRecInfo` into `baseViewProps`, which is spread into the embedded view regardless of its type. On desktop the embedded view is a list (patched to accept `bankRecInfo`), but on small screens SelectCreateDialog falls back to a kanban view, whose controller does not declare that prop, triggering Owl's props validation. Only forward `bankRecInfo` when the inner view is a list by overriding `viewProps` instead of mutating `baseViewProps`. Steps to reproduce: - Enable the developer mode. - Open Bank Reconciliation. - Resize the window to a small/mobile width (or open from a mobile device). - On a statement line, click the "Reconcile" button to open the dialog. - OwlError is thrown opw-6070573 Forward-Port-Of: odoo/enterprise#114298
This update resolves a problem where invoices weren't correctly processing extra components within kit products when using automatic accounting. Specifically, the system was misinterpreting the unit of measure, leading to invoicing errors. This change ensures accurate invoicing for kit products with multiple components.
Original PR description
### Steps to reproduce: - In the settings Enable: "Automatic accounting" - Create a storable kit product with a storable component both invoiced on delivered qty and in an "automated" ('real_time')…
### Steps to reproduce:
- In the settings Enable: "Automatic accounting"
- Create a storable kit product with a storable component both invoiced on delivered qty and in an "automated" ('real_time') inventory valuation.
- Create a kit product with a component invoiced on delivered qty
- Create and confirm a sale order for 1 units of your kit
- On the delivery add a new move for 1 unit of your kit and save
#### > The new line should be exploded into the component
- Set the quantity on both moves and validate
- On the sale order > Create draft invoice > confirm
#### > User Error: The unit of measure Units defined on the order line doesn't belong to the same category as the unit of measure False defined on the product. Please correct the unit of measure defined on the order line or on the product. They should belong to the same category.
### Cause of the issue:
The issue occurs when the `_stock_account_get_anglo_saxon_price_unit` is launched on the account move line created for the extra component because the moves where generated from a kit and hence are associated with a `bom_line_id` but the the product it self is not a kit so that no bom will be found here:
https://github.com/odoo/odoo/blob/521111d50e9119a6286e4b0e236161b1b898f072/addons/sale_mrp/models/account_move.py#L12-L23 In particular, the rest of the call that tries to treat it as a kit will fail because no bom is and should be provided to this line: https://github.com/odoo/odoo/blob/521111d50e9119a6286e4b0e236161b1b898f072/addons/sale_mrp/models/account_move.py#L34
opw-6041375
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#261878
Forward-Port-Of: odoo/odoo#258141This update resolves a crash issue that occurred when creating Point of Sale (POS) orders with the pos_avatax module installed. The fix restores a previous method to correctly identify the customer's shipping information, ensuring POS order creation remains stable. This improves the reliability of our POS functionality.
Original PR description
Before this commit, when pos_avatax was installed, creating a pos order could crash because the pos order does not have the partner_shipping_id field. This commit re-adds the _get_avatax_ship_to_partner method as it was before the refactor https://github.com/odoo/enterprise/commit/0404086db567ee0595414263d36a3b7dceaa0dbe, which returns the partner_id for the pos order. The `_get_avatax_ship_to_partner` is overridden in `pos_avatax`. Since a `pos.order` does not have a `partner_shipping_id`, the overridden function only reads the partner_id. opw-6122280 Forward-Port-Of: odoo/enterprise#115840
This update resolves an issue where users couldn't reliably edit text within editable buttons in the website builder. The fix involves a change in how the button's content is handled, preventing duplication of branding when copying and pasting. This ensures a smoother and more predictable editing experience for website customization.
Original PR description
Commit 072a8e4fd061ff23902e6e448a577624cb27e188 fixes edition of buttons by wrapping the editable button in an editable span. But it allows user to write outside the savable node, and allows user to…
Commit 072a8e4fd061ff23902e6e448a577624cb27e188 fixes edition of buttons by wrapping the editable button in an editable span. But it allows user to write outside the savable node, and allows user to copy website builder's branding attributes (which causes issues when pasted). This commit adds a span inside the button instead of outside, and removes it before saving the content. Steps to reproduce: - Open website buider on `/product/item-1` - Place the cursor in the "Add to cart" button - Press left arrow, repeat until out of the button - Bug: You can write text there, but it won't be saved ##### - Open website buider on `/product/item-1` - Select some text in the "Add to cart" button - Copy (`ctrl+c`) - Paste (`ctrl+v`) - Bug: Some content seems duplicated: the branding of the savable button has been duplicated inside it and the automatic replication between identical fields is based on this branding, thus replicates the button's content inside it Similar issue about copy+pasted branding: ec93d48ab17b4a72f61fa358e5a81d2abcb18897
This update corrects a bug where the Point of Sale dashboard incorrectly displayed the default warehouse, even when a specific POS location was configured with a different warehouse and operation type. The fix ensures that POS locations accurately reflect their assigned warehouse, improving inventory management and reporting.
Original PR description
When filtering pos by warehouse_id, all pos are under the same warehouse even if we had configure an Operation Type from a different warehouse for a specific pos. Steps to reproduce: ------------------- * Setup a second warehouse in the company * Add the new POS operation type picking for the second warehouse on the POS settings * Group by warehouse in the POS dashboard > Observation: It always shows the first warehouse Why the fix: ------------ The warehouse_id field on pos.config was a plain Many2one with a static default that always set it to the first warehouse of the company. Convert warehouse_id into a computed stored editable field that derives from picking_type_id.warehouse_id. This ensures the warehouse stays in sync when the operation type changes, while still allowing manual override for the Ship Later feature. opw-6104652 Forward-Port-Of: odoo/odoo#262821 Forward-Port-Of: odoo/odoo#258830
This update resolves an issue where internal transfers using multi-step routes were incorrectly flagging a missing delivery carrier. The fix ensures that carrier validation is skipped for internal movements, streamlining the process and preventing unnecessary errors. This improves the efficiency of internal stock transfers within the RO company.
Original PR description
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method…
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method `_compute_l10n_ro_edi_stock_enable` was overridden to check for `not picking.batch_id` However, for multi-step delivery routes, internal pickings still triggered the carrier validation, as no check on the `picking_type` was performed ### Steps to reproduce: - Install `l10n_ro_edi_stock_batch` with demo data and switch to RO Company - In Settings, enable `Multi-Step Routes` - Set the RO Warehouse's Outgoing Shipments to `Pick then Deliver (2 steps)` - Create a Product (e.g. RO product) - Create a Delivery Method (e.g. RO Delivery, Partner: Any, Delivery Product: RO Product) - Create and Confirm a Sale Order for the RO Product - From the Sale Order, click Delivery and validate the picking ### Before the fix, internal transfers raised: `The picking RO Co/PICK/00001 is missing a delivery carrier.` enterprise-PR: https://github.com/odoo/enterprise/pull/114166 opw-5925087 Forward-Port-Of: odoo/odoo#263036 Forward-Port-Of: odoo/odoo#257293
This update resolves an issue preventing users from modifying warehouse routes in the Romanian (RO) version of Odoo. The fix addresses a bug where an error occurred when changing routes, blocking modifications. This ensures that users can correctly manage incoming and outgoing shipments within their warehouses.
Original PR description
### Issue: When changing the routes of a Romanian warehouse, an error is raised, blocking any modification of multi-step routes ### Cause: The code attempts to access `in_type_id` from `warehouse_data` However, when updating routes, `warehouse_data` is empty in the method `_create_or_update_sequences_and_picking_types` This leads to a crash because the code assumes that `warehouse_data` always contains `in_type_id` and `out_type_id` Additionally, even if the data were present, it would result in creating duplicate `stock.picking.type` records ### Steps to reproduce: - Install `l10n_ro_saft_stock` with demo data and switch to `RO Company` - Enable `Multi-steps Routes` in Settings - Try to modify Incoming or Outgoing Shipments on a warehouse - When saving, the following error is raised: "Oh snap! in_type_id" odoo-pr: https://github.com/odoo/odoo/pull/257293 opw-5925087 Forward-Port-Of: odoo/enterprise#114166
This update fixes issues with the WPS report generated for payroll in Saudi Arabia. Specifically, it now requires the Saudi National ID, simplifies bank field handling, and ensures correct mapping of bank details for employees outside of KSA. These changes improve the accuracy and reliability of the WPS file submission.
Original PR description
this commit includes the following fixes for the WPS report in SA: - Make the Saudi National / IQAMA ID required for generating the WPS file. - Remove the condition on the field [57 - BANK] and have it always filled if the SARIE code is set. - If the employee bank account is from a different country (other than KSA or null), map the field [57 - BANK] to the swift code. task-6144299 Forward-Port-Of: odoo/enterprise#116419
This update fixes a bug in the HTML editor that prevented the cursor from correctly positioning within newly created code blocks. Previously, the editor created an invisible text node during shortcut extraction, which was then removed during code block conversion. Now, the editor directly deletes the selection, eliminating this issue and ensuring the cursor moves correctly.
Original PR description
#### Description of the issue this PR addresses: - In shortcut plugin, extractContent leaves an empty text node at block start - When converting to a code block, that invisible node is removed, so the editor cannot restore the cursor correctly #### Desired behavior after PR is merged: - Delete the selection directly instead of extracting text - This prevents creating the invisible empty node #### Steps to reproduce: - Type `1. ` to create a list - Immediately insert `/code` - Cursor does not move inside the code block task-6169180 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261799
This update resolves issues preventing order validation and report downloads within the l10n_co_edi_pos module. The fix addresses a problem where data was being incorrectly formatted during export, leading to errors. This ensures reliable POS data generation for DIAN compliance.
Original PR description
Steps to reproduce: --- - Install `l10n_co_edi_pos` and configure it. - Set the POS Serial Number in the POS configuration. - Open a POS session, create an order, and validate it. Issues: --- 1. A traceback occurs while validating the order. 2. After fixing the above issue, another traceback occurs when downloading the Sales Details report from the backend. Causes: --- 1. During UBL DIAN data generation, the `name` field is overwritten with `pos_order.l10n_co_edi_pos_name`, which can be empty. 2. `l10n_co_edi_pos_serial_number` is accessed on an invalid type (ID/list instead of a recordset). Fixes: --- - Preserve the original `name` if `l10n_co_edi_pos_name` is not set. - Ensure `config_ids` is always a recordset and safely compute serial numbers using `mapped`, joining unique values. task-6051285 Forward-Port-Of: odoo/enterprise#111306
This update resolves an issue in the LDAP authentication unit test that was causing temporary data inconsistencies. Switching to an `HttpCase` simplified the test and ensures accurate results. The test is being revived to accommodate a new bug fix, improving the stability of the authentication process.
Original PR description
The unit test is tagged `-standard` and `database_breaking` because it was leaving left overs in the database. Using an `HttpCase` over a `BaseCase` solves that issue in addition to make the code way simpler. We want to resurrect this unit test class because we plan to add another unit test in that class for a bug fix. Forward-Port-Of: odoo/odoo#262288 Forward-Port-Of: odoo/odoo#261743
This update addresses a bug where the mobile app would unexpectedly log users out due to session rotation occurring during certain requests, like attachments downloads via a webview. A new header allows the mobile app to temporarily bypass session rotation for specific requests, ensuring a smoother user experience. This fix doesn't introduce any security risks.
Original PR description
The session id rotates softly every 3 hours For some features, the mobile app sometimes does requests "outside" of the mobile app, through a webview for instance, and if the session rotation interval…
The session id rotates softly every 3 hours For some features, the mobile app sometimes does requests "outside" of the mobile app, through a webview for instance, and if the session rotation interval is reached at that moment, it rotates the session and the `set-cookie` instruction setting the new session cookie is received by the webview only, it's not propagated back to the mobile app. Then, this could lead for the user to be logged out of the mobile app if the soft automatic session rotation happens at the very unfortunate moment the request through that webview happens. For instance, the mobile app uses a webview to download attachments. If the session rotation happened during that request, the mobile app doesn't receive the `set-cookie` header and doesn't receive the new session id, leading for the user to be logged out of the mobile app. This revision aims to provide an option for the mobile app to temporary skip the session rotation for a specific request, such as the requests done through the webview during downloads. This option to be able to disable the rotation is not a security threat: If an attacker passes that header to disable the interval session rotation, he would avoid the session to be changed every 3 hours, but if he wouldn't he would still receive the new session id every 3 hours. The session rotation is for legitimate user / computer to rotate their session every 3 hours so that in case of data leak of their browser cookies, there is a chance the session cookie is already no longer valid when published on the public web. Legitimate users have no benefit using this option header to disable the rotation. Forward-Port-Of: odoo/odoo#263325
This update resolves a problem where long text fields in the 'Sign' document template would render incorrectly, causing text to overflow and appear as a single line in the final PDF. The fix ensures that text, including long names and continuous text, is properly wrapped within the designated fields, improving the appearance and readability of signed documents.
Original PR description
### Steps to reproduce: - Download 'Sign' and 'Contacts' apps - Create a contact with a really long name - Create a sign document template with a multiline text field (Read-only) that has contact…
### Steps to reproduce: - Download 'Sign' and 'Contacts' apps - Create a contact with a really long name - Create a sign document template with a multiline text field (Read-only) that has contact name value - Click 'Sign Now' and put the new contact as the signer - Sign and download > The text appears as a single extended line exceeding field/page boundaries ### Cause of Issue: The textarea and stamp field rendering only handled explicit newline characters (`\n`) and did not account for text that exceeded the field width. https://github.com/odoo/enterprise/blob/017743cbe97b629e9d9f1895b655014d4c3abbcb/sign/models/sign_document.py#L330-L345 When the HTML preview showed wrapped text, the PDF output rendered it as a single line. For continuous text without spaces, the text would overflow the field boundaries entirely. ### Fix: Accounted for long texts that have spaces and long words to show all the information in the PDF opw-6045062 Forward-Port-Of: odoo/enterprise#114813
This update fixes a display issue in push notifications for inbox users. Previously, notifications contained escaped characters, resulting in a broken message. Now, users receive the full, correctly formatted notification content, ensuring a better user experience.
Original PR description
**Steps to reproduce:** Log in as admin and ensure notifications are handled in Odoo. Enable push notifications and the 'Task Created' subtype for a project. As a second user, create a new task in…
**Steps to reproduce:** Log in as admin and ensure notifications are handled in Odoo. Enable push notifications and the 'Task Created' subtype for a project. As a second user, create a new task in that project. **Current behavior before PR:** admin received escaped content in the push notification (e.g., `A new task has been created in the "Project Name" project`) **Cause:** For inbox users, we send a client-side push notification using `previewText` as the body. This field returns a markup object containing escaped characters, which are converted to a string when passed to the notification body. Since the notification body only accepts plain text, these characters are displayed literally to the user. **Desired behavior after PR is merged:** admin receives the unescaped content in the push notification. (e.g., `A new task has been created in the "Project Name" project`) task-5112810 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263187 Forward-Port-Of: odoo/odoo#240331
Features or functions removed from Odoo
This update removes outdated code from the welcome page related to managing call streams. Previously, the welcome page handled stream cleanup, but this functionality was moved to another part of the system. Removing this unused code simplifies the system and improves efficiency.
Original PR description
**Purpose of this PR:** Since odoo#228382, the welcome page no longer manages call preview media streams itself. `CallPreview` now handles both stream cleanup on destroy and the `getUserMedia` race that could happen when leaving the page while permission was still pending. The `isClosed` flag was introduced in odoo#179690 to guard that race in `WelcomePage`, but it became obsolete after the refactor and the assignment was not cleaned up. This commit removes the unused assignment from the welcome page. Forward-Port-Of: odoo/odoo#263216
2 changes
Resolved issues and error corrections
This update corrects a minor error in the automated testing of Odoo's Point of Sale (POS) module. A typo in the test scripts caused a failure, which has now been resolved. This ensures the reliability of POS testing and prevents potential disruptions to the system.
Original PR description
Correct a typo in `test_01_order_flow` assertions. `pdis_order1` was reassigned multiple times; the second assertion should use `pdis_order2`. Task-6065459 Forward-Port-Of: odoo/enterprise#116424 Forward-Port-Of: odoo/enterprise#111917
This update fixes a visual inconsistency in the Point of Sale (POS) interface. It now applies the same background styling to combo products as regular products, creating a more uniform and professional look across the product screen and combo configuration popup. This improves the overall user experience and presentation of products.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
5 changes
Enhancements to existing features
This update ensures Odoo can correctly process Brazil's new alphanumeric CNPJ format for company registration. The Brazilian government is transitioning to this format to avoid registration limits, and this change updates Odoo's validation process to accommodate the new standard. This ensures accurate data processing for Brazilian businesses.
Original PR description
Purpose: The Brazilian Federal Government, through the Brazilian Federal Revenue Service (Receita Federal do Brasil), is implementing the alphanumeric CNPJ to address the imminent depletion of its…
Purpose: The Brazilian Federal Government, through the Brazilian Federal Revenue Service (Receita Federal do Brasil), is implementing the alphanumeric CNPJ to address the imminent depletion of its capacity to generate new CNPJ numbers. The current, exclusively numeric model is approaching its limit. The transition to a format that includes letters and numbers expands the number of possible combinations, ensuring the future availability of registrations for new companies. With the government expanding the CNPJ numbers, we need to implement a solution to support the alphanumeric CNPJ that will be issued starting July 2026. Current Behavior: The method, `is_valid,` from stdnum is currently used to determine whether the CNPJ is valid or not. This is now considered an outdated method to determine the validation. Changed Behavior: The new validation logic by stdnum, found here https://github.com/arthurdejong/python-stdnum/commit/d3ec3bd7fefe0d0a708b6594a66de28777eb9b8d, is patched into `check_vat_br.` The reasoning for patching this rather than calling stdnum is because using stdnum will cause library dependency issues for older versions of Odoo. task-5234869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262654 Forward-Port-Of: odoo/odoo#260516
Resolved issues and error corrections
This update resolves a problem where invoices weren't correctly processing extra components within kit products. Specifically, the system incorrectly handled unit of measure discrepancies during invoicing, leading to errors. This change ensures accurate invoicing for kit products with multiple components.
Original PR description
### Steps to reproduce: - In the settings Enable: "Automatic accounting" - Create a storable kit product with a storable component both invoiced on delivered qty and in an "automated" ('real_time')…
### Steps to reproduce:
- In the settings Enable: "Automatic accounting"
- Create a storable kit product with a storable component both invoiced on delivered qty and in an "automated" ('real_time') inventory valuation.
- Create a kit product with a component invoiced on delivered qty
- Create and confirm a sale order for 1 units of your kit
- On the delivery add a new move for 1 unit of your kit and save
#### > The new line should be exploded into the component
- Set the quantity on both moves and validate
- On the sale order > Create draft invoice > confirm
#### > User Error: The unit of measure Units defined on the order line doesn't belong to the same category as the unit of measure False defined on the product. Please correct the unit of measure defined on the order line or on the product. They should belong to the same category.
### Cause of the issue:
The issue occurs when the `_stock_account_get_anglo_saxon_price_unit` is launched on the account move line created for the extra component because the moves where generated from a kit and hence are associated with a `bom_line_id` but the the product it self is not a kit so that no bom will be found here:
https://github.com/odoo/odoo/blob/521111d50e9119a6286e4b0e236161b1b898f072/addons/sale_mrp/models/account_move.py#L12-L23 In particular, the rest of the call that tries to treat it as a kit will fail because no bom is and should be provided to this line: https://github.com/odoo/odoo/blob/521111d50e9119a6286e4b0e236161b1b898f072/addons/sale_mrp/models/account_move.py#L34
opw-6041375
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#261878
Forward-Port-Of: odoo/odoo#258141This update fixes a UI issue where the change amount displayed to customers was incorrectly shown as a positive value. Now, change amounts are displayed as negative, accurately reflecting the money leaving the store. This ensures accurate financial reporting and a better customer experience.
Original PR description
Steps to Reproduce ------------------------ - Install point of sale. - Do a order and pay more than the amount. Issue ------ - The change amount is displayed as a positive value on the UI. - Typically, amounts going out of the shop (like change given to the customer) should be shown as negative. Cause ------- - The change amount was not correctly represented in the UI. - Since the change flows in the opposite direction of the payment, it should be displayed as the negation of the original amount. FIX ----- - Updated the frontend to display the change amount with the correct (negative) sign. - No backend changes were required, as the correct value was already being handled during order synchronization Enterprise PR: https://github.com/odoo/enterprise/pull/112560 task: 6074620 Forward-Port-Of: odoo/odoo#263122 Forward-Port-Of: odoo/odoo#256776
This update fixes a visual issue in the Point of Sale (POS) system where the change amount was not displayed with the correct negative sign. The change ensures that customers accurately see the amount of change they receive, improving the user experience and preventing potential errors.
Original PR description
In this commit: --------------- - The tours are updated to adapt the change as now frontend display the change amount with the correct (negative) sign. Community PR: https://github.com/odoo/odoo/pull/256776 task: 6074620 Forward-Port-Of: odoo/enterprise#116441 Forward-Port-Of: odoo/enterprise#112560
This update resolves two issues impacting the export of sales data for DIAN compliance in the POS system. Specifically, a validation error during order processing and a problem downloading the Sales Details report have been corrected. The fix ensures accurate data generation and report availability.
Original PR description
Steps to reproduce: --- - Install `l10n_co_edi_pos` and configure it. - Set the POS Serial Number in the POS configuration. - Open a POS session, create an order, and validate it. Issues: --- 1. A traceback occurs while validating the order. 2. After fixing the above issue, another traceback occurs when downloading the Sales Details report from the backend. Causes: --- 1. During UBL DIAN data generation, the `name` field is overwritten with `pos_order.l10n_co_edi_pos_name`, which can be empty. 2. `l10n_co_edi_pos_serial_number` is accessed on an invalid type (ID/list instead of a recordset). Fixes: --- - Preserve the original `name` if `l10n_co_edi_pos_name` is not set. - Ensure `config_ids` is always a recordset and safely compute serial numbers using `mapped`, joining unique values. task-6051285 Forward-Port-Of: odoo/enterprise#111306
4 changes
Resolved issues and error corrections
This update improves the speed of stock reconciliation by optimizing how the system filters account move lines. Previously, a slow process was used to exclude valuation accounts, but a new index has been added to dramatically reduce the time it takes to process these records, leading to faster reporting.
Original PR description
Currently to exclude valuation accounts from the reconciliation we modify the domain by adding a second condition on the field account_id of the account_move_line table to exclude these accounts…
Currently to exclude valuation accounts from the reconciliation we modify the domain by adding a second condition on the field account_id of the account_move_line table to exclude these accounts while including them in a first condition in the method we override.
This is not very efficient as it prevents the use of indexes on that second NOT IN condition.
Indeed PostgreSQL prioritizes the use of the index on the IN condition and then applies the NOT IN condition in a filtering step, which is very costly when there are many account_move_line records belonging to the inventory valuation accounts.
Here is an example of the before after on a database with 87 million account_move_line records total and 9.5 million account_move_line records matching the first IN condition via an index while only 1 million remain after applying the filtering of the NOT IN condition.
All measures are performed with a warmed up cache
[Explain Before](https://explain.dalibo.com/plan/d0d14efbe51ch359)
### Benchmark:
<table>
<thead>
<tr>
<th># of aml</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td>87713812</td>
<td>~9s</td>
<td>~1.5s</td>
</tr>
</tbody>
</table>
[Explain After](https://explain.dalibo.com/plan/e882cf62d1ga6955)
## Potential further improvement:
Add a partial index:
```SQL
CREATE INDEX CONCURRENTLY idx_aml_company_id_account_id_unreconciled_posted
ON account_move_line (company_id, account_id)
WHERE parent_state = 'posted'
AND (reconciled IS NULL OR reconciled = FALSE)
AND (display_type IS NULL OR display_type NOT IN ('line_section', 'line_note'));
```
### Benchmark:
<table>
<thead>
<tr>
<th># of aml</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td>87713812</td>
<td>~1.5s</td>
<td>~900ms</td>
</tr>
</tbody>
</table>
[Explain After + Index](https://explain.dalibo.com/plan/56dfdh554668ed43)
Part of https://github.com/odoo/odoo/pull/261931
Forward-Port-Of: odoo/enterprise#115581This update corrects inaccuracies in the data used for payroll calculations in the Odoo Enterprise application for Belgium. Specifically, it addresses missing details related to leave types (LEAVE280 and LEAVE115) ensuring accurate reporting and compliance with Belgian regulations. This resolves a previous issue impacting payroll accuracy.
Original PR description
Issue: ---------------------------------------- Some prisma codes are wrong. Solution: ---------------------------------------- Change the data files. There are some subtilities that were not implemented: - LEAVE280: 0304 (if less than a year) and 0345 (if more) - LEAVE115: 0820 (Work accident) and 0830 (Occupational Disease) opw-6090081 Forward-Port-Of: odoo/enterprise#112949
This update resolves two issues preventing successful validation of POS orders and the download of Sales Details reports for the l10n_co_edi_pos module. The fix ensures correct data generation during UBL DIAN export and proper handling of serial numbers, improving the reliability of this critical POS functionality.
Original PR description
Steps to reproduce: --- - Install `l10n_co_edi_pos` and configure it. - Set the POS Serial Number in the POS configuration. - Open a POS session, create an order, and validate it. Issues: --- 1. A traceback occurs while validating the order. 2. After fixing the above issue, another traceback occurs when downloading the Sales Details report from the backend. Causes: --- 1. During UBL DIAN data generation, the `name` field is overwritten with `pos_order.l10n_co_edi_pos_name`, which can be empty. 2. `l10n_co_edi_pos_serial_number` is accessed on an invalid type (ID/list instead of a recordset). Fixes: --- - Preserve the original `name` if `l10n_co_edi_pos_name` is not set. - Ensure `config_ids` is always a recordset and safely compute serial numbers using `mapped`, joining unique values. task-6051285 Forward-Port-Of: odoo/enterprise#111306
This update fixes a bug in the Belgium Payroll DMFA report that incorrectly displayed 'Days Per Week' as 5 when employees worked fewer than 5 days a week. The fix ensures the report accurately reflects the employee's actual working schedule, improving data accuracy for tax reporting.
Original PR description
## Issue When generating a DMFA report with a working schedule with more or less than 5 days a week, the *Days Per Week* value in the report is still appearing as 5. ## Steps to reproduce 1. Install…
## Issue
When generating a DMFA report with a working schedule with more or less than 5 days a week, the *Days Per Week* value in the report is still appearing as 5.
## Steps to reproduce
1. Install *Belgium - Payroll* (`l10n_be_hr_payroll`)
2. In Payroll's Settings:
- set *ONSS Registration Number* to `0830123456`
- set *DMFA Employer Class* to `083`
- create a *Work Address DMFA code* (any name, any numeral code, but set the *Working Address* to the Belgian company used for the rest of the steps)
3. In Employees' Settings, set the *Company Working Hours* to a new Working Schedule, with 9 hours/day, 4 days/week. E.g from Monday to Thursday included:
- Work from 8:00 to 12:00
- Lunch from 12:00 to 13:00
- Work from 13:00 to 18:00
4. Create an Employee E for the Belgian company:
- In the *Payroll* tab, set the start date of the contract to 01/01/2026.
- In the *Personal* tab, set the *NISS Number* to `85073003328`
5. Create the payslip for January 2026 for the Employee E.
6. In Payroll > Reporting > Belgium > DMFA, create a new DMFA for the first quarter of 2026 and generate the PDF report
7. **In the generated PDF report, the _Days per Week_ line is set to 5.**
## Cause
The number of days was calculated by multiplying `5` with the `work_time_rate` of the related calendar. This is inaccurate in the case of a company where employees are only expected to work 4 days a week.
opw-6103934
Forward-Port-Of: odoo/enterprise#116465
Forward-Port-Of: odoo/enterprise#11380424 changes
Enhancements to existing features
This update ensures the sample dashboards within Odoo Enterprise accurately reflect the latest design and functionality changes. These updated dashboards provide more current and relevant examples for users exploring the platform's reporting capabilities. This improves the user experience and helps demonstrate the current state of the system.
Original PR description
This commit updates the sample dashboards to reflect the recent changes made in the dashboards. Task: 5076188
This update enhances the appearance of online order notifications within the Point of Sale interface. By using a full-width layout and improved alignment, the notifications now display more clearly on smaller screens, providing a better user experience for customers. This change was implemented to improve visual consistency and usability.
Original PR description
In this commit: ------------------- - Use a full-width layout on small screens by removing container padding and improving alignment with `justify-content-between`. task: 6054267 Forward-Port-Of: odoo/enterprise#116478 Forward-Port-Of: odoo/enterprise#111614
This update introduces a new 'Vertical Percentage' comparison mode for accounting reports, allowing users to easily see the percentage difference between report lines and a chosen reference line. This enhances report analysis and provides more flexible insights into financial data. The change limits comparison options to efficient report lines.
Original PR description
Added a new comparison method 'Vertical Percentage' in the accounting reports comparison menu. This feature allows users to compare all report lines against a specific, user-selected line to display the percentage difference. Key updates: - Introduced a new comparison method: vertical_percentage. - Added a comparison option displaying as 'Vertical Percentages based on: <selected option>'. - Limited available comparison options to lines using the domain or aggregation engines. This enhancement improves report analysis by allowing flexible percentage comparisons against a defined reference line. task-5144252 Related Community PR: https://github.com/odoo/odoo/pull/251129
This update modifies the way annual tax calculations (atn) are handled in the Odoo Enterprise's Belgian payroll module. Specifically, the calculation now uses a yearly atn, aligning with current Belgian tax regulations. This ensures accurate and compliant payroll processing for employees in Belgium.
Original PR description
. Update car_atn to yearly atn task-6128621
This update introduces a mobile preview toggle within the snippet selection dialog, allowing users to see how snippets will look on mobile devices before they are added to a website. This improves the user experience by ensuring snippets are appropriately formatted for different screen sizes, leading to more consistent and visually appealing websites.
Original PR description
This commit introduces a mobile preview toggle in the snippet selection dialog, allowing users to preview how snippets will appear on mobile devices before inserting them into the page. Changes: 1.Added a mobile view toggle button in the dialog header. 2.Enabled switching between desktop and mobile preview modes. 3.Adapted dynamic snippets to ensure mobile-specific appearance in the preview dialog. task-5062953
This update allows users to directly view videos within social stream posts, enhancing content engagement. The system now handles different video formats from platforms like Facebook and Instagram, and redirects Twitter videos to the original post. Technical changes improve data handling and the user interface for video display.
Original PR description
Purpose ======== To enable video support in social stream posts. Specification ============== Videos can now be played directly from the Media Carousel Dialog. Note: Twitter videos are currently…
Purpose ======== To enable video support in social stream posts. Specification ============== Videos can now be played directly from the Media Carousel Dialog. Note: Twitter videos are currently unavailable and will redirect to the original post. Technical ========== - Rename the model 'social.stream.post.image' to 'social.stream.post.attachment'. - Add the 'type' field to specify the content type. - Add the 'thumbnail_url' field to specify thumbnail of video. - Update all class names to reflect the changes. - Rename the field 'stream_post_image_ids' to 'stream_post_attachment_ids'. - Rename the field 'stream_post_image_urls' to 'stream_post_content_json'. - The 'stream_post_content_json' field is now computed as a key-value pair containing the content type, url and thumbnail url. - Rename the component 'ImagesCarouselDialog' to 'MediaCarouselDialog'. - Introduce an optional 'media_type' prop in MediaCarouselDialog to support redirection for twitter video. social_facebook: - For single content, the API returns 'video_inline' and 'animated_image_video' for video formats. - For albums, the API returns 'video' for any video or GIF content. social_instagram: - The API specifies content types as either 'VIDEO' or 'IMAGE'. social_linkedin: - GIFs are received as image files. social_twitter: - The API provides only 'preview_image_url' for videos and GIFs, so we store post link in content_url and preview_image in thumbnail. - Clicking on a preview in the MediaCarouselDialog redirects to the Twitter post. Task-3897765
This update enhances the way employee records are linked within the Odoo Enterprise payroll system. Specifically, new fields have been added to create a linked list between employee records, improving data consistency and accuracy. This change supports future system updates and ensures reliable payroll processing.
Resolved issues and error corrections
This update corrects a problem in how payslips are calculated for the Hong Kong payroll module. Specifically, a test was failing because the system wasn't correctly accounting for the year of the payslip when running tests in different environments. This ensures accurate payslip generation for all employees.
Original PR description
ir56b._compute_period depends on year_of_employer_return, which is derived from submission_date (defaults to today). If tests are run in a different year (mocked time or different environment), the period won't cover the January 2026 payslip. Forward-Port-Of: odoo/enterprise#116364 Forward-Port-Of: odoo/enterprise#116172
This update fixes an issue preventing users from signing documents containing read-only date fields. The system incorrectly flagged these fields as empty, blocking the signing process. The fix ensures that read-only date fields are properly recognized during document submission, allowing for complete and accurate signing.
Original PR description
Version: - saas-19.2 Steps to reproduce: - Create a sign template with a read-only (constant) date field. - Add at least one more sign item (e.g., text/signature). - Try to sign the document. Issue: - Signing is blocked with warning: “Some required items are not filled”. Cause: - Read-only date fields don’t have a value in `item.el.value`. - The system only checks value, so it treats the field as empty. - Even though the date is visible in the document, it is not picked during submission. Solution: - Update date value extraction to also read from `textContent` when value is empty. - This ensures read-only date fields are correctly considered filled. task-6181883 Forward-Port-Of: odoo/enterprise#116009
This update fixes a crash that occurred when preparing orders for future online food deliveries. The issue stemmed from an incorrect date format, which has now been corrected to ensure the preparation display functions reliably. This improves the stability of the online ordering process.
Original PR description
### In this commit: Fixes a crash in the preparation display when handling future online food delivery orders. The issue was caused by an invalid delivery time format. This is resolved by properly passing the delivery time as a Number in the utils. Task-[5960176](https://www.odoo.com/odoo/project/1737/tasks/5960176) Forward-Port-Of: odoo/enterprise#116558 Forward-Port-Of: odoo/enterprise#108298
This update resolves a duplication issue in the French Profit and Loss report by removing a redundant account (6492) from the calculation. This ensures accurate financial reporting aligned with French accounting standards. The fix builds upon previous work to prevent duplicate accounts in the report.
Original PR description
This commit is an addon to this commit[[1]] where we tried to avoid duplicate accounts in the Profit And Loss report. The problem is that we don't exclude the separated account 6492 from the original one (649). This commit adds the removal of this account in the report formula. task-6053784 Here is the coverage: [Profit and loss account (FR) - Accounts Coverage Report (2).xlsx](https://github.com/user-attachments/files/27011824/Profit.and.loss.account.FR.-.Accounts.Coverage.Report.2.xlsx) The correct separation: <img width="837" height="485" alt="image" src="https://github.com/user-attachments/assets/ebe98976-f689-4389-866a-c9a0c8b50534" /> [1]: https://github.com/odoo/enterprise/commit/4587c49c4b220305652150d2f21a95fb7cfa188d Forward-Port-Of: odoo/enterprise#116319 Forward-Port-Of: odoo/enterprise#114858
This update resolves an issue where the point-of-sale tour was unreliable and produced inconsistent results. The fix ensures the tour is predictable and correctly identifies the order, improving the user experience. A minor typo was also corrected to enhance test reliability.
Original PR description
Remove the `undeterministicTour_doNotCopy` key from `OrderFlowTour` and make the tour deterministic by properly selecting the order. Also, fix a typo in the assertion in `test_01_order_flow`. Task-6065459 Forward-Port-Of: odoo/enterprise#116431 Forward-Port-Of: odoo/enterprise#111915
This update resolves a problem where DIAN XML files (AttachedDocument type) weren't being correctly imported, leading to data loss. The fix ensures the system first identifies the AttachedDocument structure, allowing it to properly process the embedded invoice data as required by DIAN regulations.
Original PR description
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN…
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN documentation, the `ProfileID` should contain the literal `Factura Electrónica de Venta` https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Factura-Electronica-de-Venta-vr-1-9.pdf However, no strict validation is enforced, so variants should still be supported ### Cause: When importing a DIAN document of type `AttachedDocument`, `_get_import_file_type()` searches for a node starting with `DIAN 2.1:` This causes issues with documents structured like: ```xml <AttachedDocument> <CustomizationID>Documentos adjuntos</CustomizationID> <ProfileID>DIAN 2.1: Factura Electrónica de Venta</ProfileID> </AttachedDocument> ``` In this case, `DIAN 2.1:` is detected first, causing the file to be identified as `account.edi.xml.ubl_dian` As a result, the `<AttachedDocument>` wrapper is ignored and the importer tries to parse the file using the wrong structure, preventing any data extraction The import should first detect the `<AttachedDocument>` structure, then unwrap and process the embedded document ### Steps to reproduce: - Install `l10n_co_dian` - Go in Bills and import the test document: `import_attached_document_2` Before the fix, nothing it extracted from the xml opw-6083523 Forward-Port-Of: odoo/enterprise#115599
This update fixes an issue where the Work Orders Planning Gantt view incorrectly included workcenter downtime in employee duration totals. The change now accurately accounts for workcenter unavailability, ensuring more precise and reliable duration calculations for employee workloads. This improves the accuracy of resource planning.
Original PR description
In the Work Orders Planning Gantt view grouped by employee, the total duration did not consistently respect workcenter unavailabilities. This change ensures workcenter unavailabilities are included in the payload when grouping by employees, allowing the renderer to correctly calculate aggregated totals. Before: - Employee-grouped totals could count duration during workcenter downtime. After: - Employee-grouped totals correctly respect workcenter unavailability. This commit's changes: - In employee Gantt data preparation, added the workcenter unavailability payload by extracting workcenter IDs from the fetched work orders and calling `_gantt_unavailability` on those IDs to retrieve the intervals that should be excluded from the totals. task-6089572 Forward-Port-Of: odoo/enterprise#112805
This update ensures that product and combo product cards in the Point of Sale module now have a consistent visual style. Previously, combo products had a different background, leading to a disjointed look. This change improves the overall user experience and presentation of products within the POS system.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update resolves an error that was preventing the generation of the Swiss Master Data report. The issue stemmed from a formatting error in the report template, which has now been corrected. This ensures accurate reporting for Swiss payroll data.
Original PR description
Currently, generating the Swiss Master Data report raises an error ### **Steps to reproduce:** 1) Install `l10n_ch_hr_payroll` with demo data. 2) Switch to a Swiss company. 3) Navigate to `Payroll >…
Currently, generating the Swiss Master Data report raises an error ### **Steps to reproduce:** 1) Install `l10n_ch_hr_payroll` with demo data. 2) Switch to a Swiss company. 3) Navigate to `Payroll > Reporting > Master Data`. 4) Create a new report and click Generate Data. ### **Error:** IndentationError: expected an indented block after 'else' statement on line 116 ### **Root Cause:** The QWeb template had a conditional block using `t-elif` followed by an empty `t-else` at [1]. During template compilation, this generated a Python `else` statement without a body, leading to an IndentationError. [1]- https://github.com/odoo/enterprise/blob/b77984b3a9fb1b35c07e152a0f86aaf4d430e2c0/l10n_ch_hr_payroll/report/l10n_ch_wage_type_report.xml#L44 ### **Fix:** This commit prevents the error by removing the empty `t-else` block and ensuring `category_ids` are properly evaluated by computing their codes and checking if they include `BASIC`, `ALW`, or `DED`. **opw-6107565** Forward-Port-Of: odoo/enterprise#113808
This update resolves an issue where the 'Reconcile' button on the bank statement dialog wouldn't work correctly on smaller screens (like mobile devices). The fix ensures the correct data is passed to the dialog component, preventing a validation error. This improves the user experience for mobile users.
Original PR description
When clicking on the "Reconcile" button of a bank statement line on a small screen (ex: mobile) threw an OwlError "Invalid props for component 'KanbanController': unknown key 'bankRecInfo'". BankRecSelectCreateDialog injected `bankRecInfo` into `baseViewProps`, which is spread into the embedded view regardless of its type. On desktop the embedded view is a list (patched to accept `bankRecInfo`), but on small screens SelectCreateDialog falls back to a kanban view, whose controller does not declare that prop, triggering Owl's props validation. Only forward `bankRecInfo` when the inner view is a list by overriding `viewProps` instead of mutating `baseViewProps`. Steps to reproduce: - Enable the developer mode. - Open Bank Reconciliation. - Resize the window to a small/mobile width (or open from a mobile device). - On a statement line, click the "Reconcile" button to open the dialog. - OwlError is thrown opw-6070573 Forward-Port-Of: odoo/enterprise#114298
This update fixes a potential issue where multiple sign actions within a single transaction could silently override role permissions. The change adds a check during the transaction to ensure no conflicting roles are being assigned, preventing incorrect automation setups. This improves data integrity and security within the Sign app.
Original PR description
Before this commit, creating multiple server actions for the Sign app in a single transaction (e.g., when saving an Automation Rule with multiple nested actions) bypassed the `_check_sign_template_conflicts` constraint. Because the constraint only queried the database for existing links, it failed to detect conflicts within the in-memory batch, allowing the save to succeed and causing silent role overrides. This commit introduces an intra-batch check to the constraint. By tracking requested roles in memory during the loop, the constraint now correctly raises a ValidationError if multiple actions in the same transaction attempt to automate the exact same template roles. A test has been added to ensure batch creations are properly validated. Task: 6128909 Forward-Port-Of: odoo/enterprise#115527 Forward-Port-Of: odoo/enterprise#115062
This update fixes an issue where payrun steps could remain in an 'error' state even after an error was resolved. Now, clicking 'Continue' marks a completed step as 'valid,' allowing users to move forward without being blocked by unresolved errors. This ensures payrun steps are consistently tracked and reported.
Original PR description
## Before: - Clicking Continue moved the payrun to the next step, but the previous step could remain in `error` if anomalies were still present. - This made explicitly passed steps (version/time/attendance) look unresolved. ## After: - Continue marks the passed step as `valid`. - because if the user willfully ignore an error, then it's ok to put it as validated. - This is applied consistently for all payrun step state points. Task-6053982 Forward-Port-Of: odoo/enterprise#115279
This update fixes a visual issue where flexible employees (without resource calendars) had blank cells on the Gantt chart. It now correctly displays these employees' time off as greyed-out intervals and accurately calculates progress bar durations based on validated leave hours, rather than defaulting to full periods.
Original PR description
Flexible employees (no resource calendar) had no unavailability intervals computed, leaving all cells white in the Pay Run Time Off gantt. Their progress bar also showed the full period duration (e.g. 744h for a 31-day month) because _get_work_days_data_batch returns 24h/day for calendar-less resources. - Mark the entire gantt interval as unavailable for contract versions with no resource_calendar_id so cells appear grey by default - For flexible employees, compute the progress bar value from their actual validated leave hours instead of scheduled working hours (defaulting to 0h) task-6194344
This update prevents unauthorized users from viewing or modifying assets linked to invoices. Previously, users without the correct access groups could trigger errors, creating a potential security vulnerability. Now, access to assets is restricted to users within specific accounting groups, ensuring data integrity and security.
Original PR description
Only groups `account.group_account_readonly`, `account.group_account_invoice` or higher have access to model `account.asset`, therefore if an user goes to see an invoice with assets and they are not on either group, they will receive an error and won't be able to access said invoice. How to reproduce: - Create a vendor bill - Create an account.asset and link it to said account.move - Go to the form view with an user that it's on group "Purchase: User" for example --> They get a traceback --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#116133 Forward-Port-Of: odoo/enterprise#112890
This update fixes a visual issue in the maintenance request form where the 'Block Workcenter' field was incorrectly positioned next to the priority field. The change updates the form's layout to align with recent UI updates, ensuring a cleaner and more intuitive user experience for maintenance request creation.
Original PR description
Issue: ---------------------------- In the maintenance request form view, the 'Block Workcenter' field was displayed near the priority field in the top-right corner. Steps to Reproduce:…
Issue: ---------------------------- In the maintenance request form view, the 'Block Workcenter' field was displayed near the priority field in the top-right corner. Steps to Reproduce: ---------------------------- - Install `mrp_maintenance` module. - Open a maintenance request linked to a work center. - Notice that the 'Block Workcenter' field appears beside the priority field in the top-right section. Cause of the issue: ---------------------------- Following the UI changes introduced in [PR](https://github.com/odoo/odoo/pull/251761), the position of the priority field was updated. However, the inherited XPath used for the 'Block Workcenter' field was still targeting the priority field, causing the field to be inserted at an incorrect position. With this commit: ---------------------------- Update the XPath to match the new form view structure, ensuring that the 'Block Workcenter' field is displayed in the correct location and aligned with the updated UI layout. Forward-Port-Of: odoo/enterprise#116193
This update clarifies the error message displayed during order cancellations. The outdated 'Callback requested instead' message has been replaced with a more helpful 'Contact your provider for support.' This change improves the customer experience and provides clearer guidance during potential issues.
Original PR description
In this commit: ---------------- - Added an extra message, `Contact your provider for support.` and removed `Callback requested instead.` string from the order cancellation error message. Task-4657597
This update resolves issues with inconsistent tour behavior by refining the triggers used to initiate tours. The changes make tours more reliable and predictable, leading to a smoother user experience. This primarily affects the stability of various Odoo modules during tour execution.
Original PR description
Fix undeterministic tours by making some triggers more precise in a few steps.
8 changes
Resolved issues and error corrections
This update resolves an issue where payment reminders wouldn't display properly when the 'Payment' module wasn't installed. The fix ensures the system checks for the necessary 'payment.method' model before attempting to use it, preventing rendering errors and ensuring payment reminders function as expected.
Original PR description
Repro steps: 1. Initialize a new DB 2. Install account_followup module without payment module 3. Go to Email templates > Payment reminder 4. Click on Preview You will get an error Failed to render QWeb template for Mail Template: 'Payment Reminder' (ID: 9) Target Model: res.partner Language context: en_US Error: Error while render the template KeyError: 'payment.method' Root cause: The method `_show_pay_now_button` that was being called in the template email_template_followup_1 was using self.env['payment.method'] even tho payment module is not a dependency of account_followup Fix: The introduced fix ensures that 'payment.method' model exists before attempting to use it build_error-243030 Forward-Port-Of: odoo/enterprise#116443 Forward-Port-Of: odoo/enterprise#116079
This update resolves a technical error that prevented the Journal Audit report from correctly displaying data when the 'Load More Limit' was set. The fix ensures accurate report generation by addressing a key error related to data formatting during report expansion.
Original PR description
Steps to reproduce: - Install `Accounting` module - Accounting > Configuration > Accounting Reports > Journal Report > Options > Set `Load More Limit` to 1 - Accounting > Review > Journal Audit >…
Steps to reproduce:
- Install `Accounting` module
- Accounting > Configuration > Accounting Reports > Journal Report > Options > Set `Load More Limit` to 1
- Accounting > Review > Journal Audit > Expand Sales
Traceback: `KeyError: 'no_format'`
Cause:
This error occurs when we expand the lines. During the expansion, we [append] a `Load more...` pagination row inside the report lines. In that row, we pass empty [dictionaries] in
`columns`, like: `columns': [{}, {}, {}, {}, {}, {}]`. and we have offset. So, after expanding, there are two lines, and the second one is the Load more line. Because its [columns] contain empty dictionaries, the `no_format` key is not found, which results in a `KeyError`.
Solution:
We are passing a `None` value if `no_format` is not present in the line's columns.
[append]: https://github.com/odoo/enterprise/blob/34c60542d87366d50484c21bc0576bdc59517c5e/account_reports/models/account_report.py#L5765
[dictionaries]: https://github.com/odoo/enterprise/blob/34c60542d87366d50484c21bc0576bdc59517c5e/account_reports/models/account_report.py#L5867-L5878
[columns]: https://github.com/odoo/enterprise/blob/34c60542d87366d50484c21bc0576bdc59517c5e/account_reports/models/account_journal_report.py#L158
opw-6125082This update resolves an issue where account reports with large datasets would crash when attempting to unfold prefix groups. The fix ensures the prefix filter correctly uses account codes instead of names, and skips invalid prefix characters to prevent incorrect grouping. This improves the stability and performance of account reporting for larger databases.
Original PR description
…roup Steps to reproduce: - Set a low value for `prefix_groups_threshold` in account reports so that lines are grouped by prefix (e.g. in databases with large volumes, such as 6k+ lines). - Open a…
…roup
Steps to reproduce:
- Set a low value for `prefix_groups_threshold` in account reports so that lines are grouped by prefix (e.g. in databases with large volumes, such as 6k+ lines).
- Open a report (e.g. Trial Balance or General Ledger).
- Unfold a prefix group.
Issue:
```python
File "/home/odoo/src/enterprise/account_reports/models/account_report.py",
line 5718, in get_expanded_lines_readonly
return self.get_expanded_lines(options, line_dict_id, groupby,
expand_function_name, progress, offset, horizontal_split_side)
File "/home/odoo/src/enterprise/account_reports/models/account_report.py",
line 5707, in get_expanded_lines
lines = self.env[self.custom_handler_model_name]._custom_line_postprocessor
(self, options, lines)
File "/home/odoo/src/enterprise/account_reports/models/account_general_ledger.py
", line 354, in _custom_line_postprocessor
if report._parse_line_id(lines[0]['id'])[-1] ==
('', 'account.report.line', report.line_ids[0].id):
IndexError: list index out of range
```
Cause:
Prefix groups are built based on the displayed line name, which includes
the account code (e.g. "401000 Sales"). However, during unfold, the
filter was applied on `account_id.name`.
As a result, applying a prefix like '4%' on `account_id.name` (e.g. "Sales")
returned no records, leading to empty results and the above crash.
Additionally, prefix grouping could create invalid or meaningless groups
when the extracted prefix character was non-alphanumeric (e.g. spaces or
special characters).
Fix:
- This patch updates the unfold filtering logic to use `account_id.code` when grouping by `account_id`, ensuring that the prefix filter is applied on the correct field.
- Skip non-alphanumeric prefix keys during grouping to avoid generating irrelevant or invalid groups.
opw - 6106726
upg - 3985833This update corrects a minor typo in the automated tests for Odoo's Point of Sale module. The change ensures that test results accurately reflect the order flow, preventing potential issues during processing. This fix improves the reliability of the testing process.
Original PR description
Correct a typo in `test_01_order_flow` assertions. `pdis_order1` was reassigned multiple times; the second assertion should use `pdis_order2`. Task-6065459 Forward-Port-Of: odoo/enterprise#116424 Forward-Port-Of: odoo/enterprise#111917
This update resolves a problem where DIAN XML files (specifically `AttachedDocument` type) weren't being imported correctly, resulting in lost data. The fix ensures the system correctly identifies the file structure, allowing for accurate parsing and data extraction from these important electronic invoices.
Original PR description
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN…
### Issue: Some DIAN XML files of type `AttachedDocument` are incorrectly imported, resulting in no extracted data This issue only occurs for `AttachedDocument` files According to the DIAN documentation, the `ProfileID` should contain the literal `Factura Electrónica de Venta` https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Factura-Electronica-de-Venta-vr-1-9.pdf However, no strict validation is enforced, so variants should still be supported ### Cause: When importing a DIAN document of type `AttachedDocument`, `_get_import_file_type()` searches for a node starting with `DIAN 2.1:` This causes issues with documents structured like: ```xml <AttachedDocument> <CustomizationID>Documentos adjuntos</CustomizationID> <ProfileID>DIAN 2.1: Factura Electrónica de Venta</ProfileID> </AttachedDocument> ``` In this case, `DIAN 2.1:` is detected first, causing the file to be identified as `account.edi.xml.ubl_dian` As a result, the `<AttachedDocument>` wrapper is ignored and the importer tries to parse the file using the wrong structure, preventing any data extraction The import should first detect the `<AttachedDocument>` structure, then unwrap and process the embedded document ### Steps to reproduce: - Install `l10n_co_dian` - Go in Bills and import the test document: `import_attached_document_2` Before the fix, nothing it extracted from the xml opw-6083523 Forward-Port-Of: odoo/enterprise#115599
This update fixes a visual inconsistency in the Point of Sale (POS) interface. Previously, combo products looked different from regular products. Now, both product and combo product cards have a unified style, creating a more consistent and professional look for the customer experience. This improves the overall user experience and brand presentation.
Original PR description
In this commit: --- - Applied the same background styling to combo items as normal product cards. - Ensured visual consistency between product cards on the product screen and in combo configuration popup. | Before | After | | -------- | -------- | | <img width="979" height="447" alt="image" src="https://github.com/user-attachments/assets/6d91e1d7-99d5-47c4-a1bf-6604765d08d5" /> | <img width="979" height="453" alt="image" src="https://github.com/user-attachments/assets/602c9a8f-9e56-4633-84bf-0710cb5debab" /> | task-6103260 Forward-Port-Of: odoo/enterprise#113159
This update resolves a crash issue that occurred when creating Point of Sale (POS) orders with the Avatax module installed. The fix re-introduced a method to correctly identify the customer's shipping information, ensuring order creation stability. This improves the reliability of the POS system for our users.
Original PR description
Before this commit, when pos_avatax was installed, creating a pos order could crash because the pos order does not have the partner_shipping_id field. This commit re-adds the _get_avatax_ship_to_partner method as it was before the refactor https://github.com/odoo/enterprise/commit/0404086db567ee0595414263d36a3b7dceaa0dbe, which returns the partner_id for the pos order. The `_get_avatax_ship_to_partner` is overridden in `pos_avatax`. Since a `pos.order` does not have a `partner_shipping_id`, the overridden function only reads the partner_id. opw-6122280 Forward-Port-Of: odoo/enterprise#115840
This update resolves an issue preventing users from modifying multi-step routes for Romanian warehouses. The fix addresses a coding error that caused a crash when updating warehouse routes, specifically related to accessing data within the system. This ensures that users can now successfully adjust routes without encountering errors.
Original PR description
### Issue: When changing the routes of a Romanian warehouse, an error is raised, blocking any modification of multi-step routes ### Cause: The code attempts to access `in_type_id` from `warehouse_data` However, when updating routes, `warehouse_data` is empty in the method `_create_or_update_sequences_and_picking_types` This leads to a crash because the code assumes that `warehouse_data` always contains `in_type_id` and `out_type_id` Additionally, even if the data were present, it would result in creating duplicate `stock.picking.type` records ### Steps to reproduce: - Install `l10n_ro_saft_stock` with demo data and switch to `RO Company` - Enable `Multi-steps Routes` in Settings - Try to modify Incoming or Outgoing Shipments on a warehouse - When saving, the following error is raised: "Oh snap! in_type_id" odoo-pr: https://github.com/odoo/odoo/pull/257293 opw-5925087 Forward-Port-Of: odoo/enterprise#114166
4 changes
Resolved issues and error corrections
This update fixes an issue where tax calculations were incorrect when editing invoices with changed delivery dates and currency rates. The problem stemmed from a recomputation process triggered by currency changes, which was incorrectly applied to edited invoices due to a conflict with the l10n_hu_edi module. This ensures accurate tax calculations across invoices.
Original PR description
# How to reproduce - Install the l10n_hu_edi module - Switch to a Hungarian company - Enable a currency (e.g., EUR) and configure two different exchange rates on two different dates - Create a new…
# How to reproduce - Install the l10n_hu_edi module - Switch to a Hungarian company - Enable a currency (e.g., EUR) and configure two different exchange rates on two different dates - Create a new invoice with : - Delivery Date: One of the configured date - A line with a price unit and a tax - Save the invoice - Edit the invoice : - Delivery Date : The other configured date - Change the price unit of the line - Save the invoice # The problem The taxed amount total is using the old price unit # Cause ## TLDR This commit (https://github.com/odoo/odoo/pull/225407) made it so we recompute the tax when the currency is changed with round globally. This recomputation is based on the old tax values, so it should not be done when editing the base lines in the form view. To prevent this, a condition checks that the invoice date was not changed (which should be the only way to change the currency rate from that view if I understand correctly). Sadly, the l10n_hu_edi module changes this behavior and makes it so the currency rate is also recomputed when the delivery date changes ## Detailed analysis In the write() method of an account_move, we try to determine `round_from_tax_lines`. Before, in the situation where a base line is modified, it was computed here : https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_move.py#L3032-L3049 In our use case, `round_from_tax_lines` would then equal to `False` But, this commit (https://github.com/odoo/odoo/pull/225407) added the following condition that made it so in our use case, `round_from_tax_line` is trucy : https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_move.py#L3029-L3031 That value is then used right after in the computation of the tax line values : https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_move.py#L3061 Since `round_from_tax_line` is trucy, we pass the tax_lines to the `_round_base_lines_tax_details()` function https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_move.py#L1638 Which calls the `_round_tax_details_tax_amounts_from_tax_lines()` function. That function changes `base_lines["tax_details"]["tax_data"]` `tax_amount` and `tax_currency` based on the tax_lines `balance` and `amount_currency` https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_tax.py#L2143-L2144 Except, those tax_lines values are the values of the current tax_lines, not the updated one. So they use the `balance` and `amount_currency` values of before the write https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_move.py#L1631-L1632 `base_lines["tax_details"]["tax_data"]` is later used to define `tax_rep_data` https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_tax.py#L2437-L2452 Which is then used to determine `base_lines_to_update` https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_tax.py#L3074-L3080 Nevertheless, this issue is quite niche because the condition to assign `round_from_tax_lines` checks that the invoice date has not changed, which would be the only way to edit the currency rate and the base lines at the same time https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/account/models/account_move.py#L3029 Except that the l10n_hu_edi module defines an override to recompute the currency rate when the delivery date changes https://github.com/odoo/odoo/blob/262088c98673a342aa0ccdd70465e3be6bcb2439/addons/l10n_hu_edi/models/account_move.py#L128-L130 # Proposed solution Since the tax recomputation is done using the values before the write, we never want to do it if the base lines have changed. Editing the condition of the commit that introduced the issue would not be enough because any module can ask for a currency rate recomputation for any reason. Because of this, we should do the tax recomputation only if the base_lines have not changed. opw-5800521 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a flaw in how Odoo retrieves online transactions. Previously, it only fetched transactions from the last sync date, potentially missing transactions before that date. Now, the system prioritizes the specified start date first, ensuring a more complete and accurate retrieval of online transaction data.
Original PR description
When you want to find missing transactions, you have to put a starting date. But we don't use this starting date to find the last statement line, we only use the last sync date, which is wrong, because if the last sync date is after the starting date, the online transaction identifier will have the wrong date. It means we will only fetch the transactions from last sync date to today. This commit makes sure we take the start date first if it exists, then the last sync date. task-6197277
This update automatically creates new bank accounts when importing data through the Italian EDI system. Previously, only contact and IBAN information was logged, requiring manual creation by the accountant. Now, the system will create the bank account, assign it to the correct customer, and mark it as untrusted.
Original PR description
The Italian EDI import didn't create new bank account by itself. IBAN info was just logged in the chatter, leaving it up for the accountant to create the bank account record. The bank account should be created and assigned to the corresponding commercial partner and set to not trusted yet. Enterprise PR: odoo/enterprise#112794 Task [link](https://www.odoo.com/odoo/project.task/6046189) task-6046189
This update corrects a test failure related to importing partner and bank account data for Italian reporting. The change restores the test data to a known state, ensuring the tests now pass correctly. This resolves a technical issue preventing accurate reporting functionality.
Original PR description
The related PR brings a data change in a test file that is used here. We bring back the state of that data in the test class, so that the tests don't fail anymore. Community PR: odoo/odoo#254505 Task [link](https://www.odoo.com/odoo/project.task/6046189) task-6046189