Daily updates from Odoo
Navigate
Branch
Tuesday, January 13, 2026
251 changes
24 changes
Enhancements to existing features
This update ensures invoice labels comply with Section 31 of the CGST Act, which dictates how invoices are labeled based on the type of supplies and customer status. Specifically, the label now correctly reflects whether a document contains only taxable or exempt supplies, aligning with Indian tax regulations. This change improves compliance and accuracy for our Indian users.
Original PR description
Previously, the invoice label was always displayed as “Tax Invoice” or “Invoice”. However, as per Section 31 of the CGST Act, the document label must depend on the nature of supplies and the customer type: - If the document contains only taxable supplies => “Tax Invoice” - If the document contains only exempt supplies => “Bill of Supply” - If the customer is unregistered and the document contains both taxable and exempt supplies => “Invoice-cum-Bill of Supply” - If the customer is registered and the document contains both taxable and exempt supplies, separate documents must be issued as per the law. With this commit, the invoice label is generated strictly in accordance with Section 31 of the CGST Act. In the case of a registered customer where both taxable and exempt supplies exist in a single document, the label will be printed as “Invoice”. task-5468323 Forward-Port-Of: odoo/odoo#241512
This update enhances the Odoo software's support for the Uruguayan market by adding and refining account configurations, specifically for fixed assets and related expenses. It also introduces automated depreciation support for various asset types, streamlining financial reporting within the Uruguay localization.
Original PR description
This commit enhances the Uruguay localization by adding missing accounts and updating existing ones, and by configuring Asset Models for fixed asset management. Changes: - Added and updated account.account entries for fixed assets and related expenses. - Added account.asset data to support automated depreciation for different asset types. task-5392954 Forward-Port-Of: odoo/odoo#240891
This update makes the HR Applicant model accessible to other Odoo modules. Previously, this model was isolated, limiting its functionality. This change allows for greater integration and data sharing across the Odoo system, improving overall HR workflow efficiency.
Original PR description
Export HrApplicant model so that it can be used in other modules Task-[5461729](https://www.odoo.com/odoo/5778/tasks/5461729) Enterprise PR odoo/enterprise#103402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update corrects a technical issue related to Brazilian tax reporting for invoices impacted by a recent fiscal reform. Previously, informative tax details were sometimes omitted, which is now required to ensure accurate XML reporting. This change guarantees compliance with the new regulations.
Original PR description
Before the fiscal reform, we deliberately avoid sending back informative taxes for service invoices because they may change depending on how and when the invoice is paid and they only need to appear on the XML optionally. New informative taxes specific to the fiscal reform are required to appear on the XML and therefore we must always send them. task-5450142 Forward-Port-Of: odoo/enterprise#103670 Forward-Port-Of: odoo/enterprise#103599
This update resolves a technical issue preventing users from accessing the standard demo job position within the payroll demo data. Previously, the demo job was linked to the main company, causing access errors when using multi-company setups. This change ensures all companies can utilize the demo data correctly.
Original PR description
## Steps to reproduce: - install l10n_in_hr_payroll with demo data - go to employee - open payroll tab - select default contract template from Load a Template - click on load button ## Issue: - General demo job position used in many places in demo data has company_id set to main company by default. It creates access error of multi company issue. ## Fix: - The standard job in demos should not be linked to the main company by default. It should be visible and accessible for all companies. backport of https://github.com/odoo/odoo/pull/234477 Task-5440650 Forward-Port-Of: odoo/odoo#241590
This update resolves an error that occurred when creating attendance records for employees with specific overtime rules. The fix ensures that date and time values are handled correctly during overtime interval calculations, preventing a 'datetime' vs. 'int' type error. This ensures attendance creation functionality is stable.
Original PR description
Currently, an error occurs when a user creates an attendance for an employee. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1vm89hHBOVcliYwZjP7fwNOzwC68V3B1l/view)):** - Install the…
Currently, an error occurs when a user creates an attendance for an employee.
**Steps to Reproduce ([Video](https://drive.google.com/file/d/1vm89hHBOVcliYwZjP7fwNOzwC68V3B1l/view)):**
- Install the `hr_attendance` module.
- Go to `Overtime Rulesets` and create a `new overtime ruleset` by adding an `overtime rule`.
Set Based on to `Timing`.
Set the `Start time greater than the Stop time` (ex, Start = 10 and Stop = 5).
- Go to `Employees`, open `any employee record`, and assign this `Overtime Ruleset` to the employee.
- Now go to `Attendances` and `create an attendance` for that employee.
`TypeError: '>' not supported between instances of 'datetime.datetime' and 'int'`
**Cause:**
This error occurs when a user sets the overtime rule on an employee and then creates an attendance. At that point, the system tries to calculate the overtime intervals based on the timing rule. Because the rule’s start time is greater than the stop time, it attempts to calculate the interval for the remaining working period of the day. However, the start date and end date are calculated in datetime format [1], while integer and float values are passed as arguments [2] for day in interval calulation. Since the interval expects values of the same data type, than it raise the error [3].
**Fix:**
This commit ensures that the day start and day end values are passed in datetime format.
[1]: https://github.com/odoo/odoo/blob/67191cf0915081df352331a698be47b7e3ecd505/addons/hr_attendance/models/hr_attendance_overtime_rule.py#L524
[2]- https://github.com/odoo/odoo/blob/67191cf0915081df352331a698be47b7e3ecd505/addons/hr_attendance/models/hr_attendance_overtime_rule.py#L530
[3]: https://github.com/odoo/odoo/blob/67191cf0915081df352331a698be47b7e3ecd505/odoo/tools/intervals.py#L138-L154
sentry-7166788786
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#242491This update corrects a technical issue where the product name was appearing twice in the descriptions of delivery orders and related PDF reports. The fix addresses a logic error in how Odoo builds these descriptions, ensuring consistent and accurate reporting. This improves the clarity and professionalism of our order fulfillment documentation.
Original PR description
**Steps to reproduce:** * Install the **stock** and **sale_management** modules. * Go to *Inventory > Configuration > Attributes* and create a new attribute. * Set *Variant Creation Mode* to *Never*.…
**Steps to reproduce:**
* Install the **stock** and **sale_management** modules.
* Go to *Inventory > Configuration > Attributes* and create a new
attribute.
* Set *Variant Creation Mode* to *Never*.
* Add a single attribute value and enable *Free text* on it.
* Create a product using this attribute and select the value for which
*free text* is enabled.
* Create a Sale Order for this product.
* Open the sale order line pop-up and enter custom text in the *Text* field.
* Confirm the sale order.
* Open the generated Delivery Order.
**Observed behavior:**
The product name appears **twice** in the stock move description.
The same duplication appears in the **Delivery Slip** PDF report.
**Cause:**
https://github.com/odoo/odoo/blob/452800a9fd56539c04bed5dcf4525afb9b8ad28e/addons/sale_stock/models/stock.py#L31-L32
In `_compute_description_picking`, the description is built as description + variant description.
Since Odoo already uses the product name as the base description and avoids rendering
it twice only when the name equals the description, concatenating the variant description
breaks this logic and results in the product name being repeated.
---
<details>
<summary>Click here to see the results:</summary>
Before:
<img src="https://github.com/user-attachments/assets/2f76fcc9-c71d-4c3d-a80a-06391e5d863c" />
After:
<img src="https://github.com/user-attachments/assets/78eb7905-8ce6-42b9-aed3-ac1452b74dc1"/>
</details>
---
opw-5382353
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#239843This update ensures that eTIMS configuration warnings are only displayed for companies operating in Kenya. Previously, these warnings were shown for all companies, causing confusion. This change streamlines validation and ensures warnings are relevant to users in the correct location.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update resolves an issue where the fullscreen button in the Odoo interface was hidden by a temporary overlay. The change adjusts the layout to prevent overlapping controls, ensuring users can easily access and utilize the fullscreen mode. This improves the overall user experience.
Original PR description
**Purpose of this PR:** When the call control overlay is floating, it overlaps the fullscreen button, making it difficult to enter fullscreen mode. for reference: <img width="711" height="257" alt="image" src="https://github.com/user-attachments/assets/4a7a7448-4988-4cf6-bcfb-6a91491be80d" /> This commit ensures the fullscreen action remains accessible by adjusting the layout layering so controls no longer overlap each other. Task-[5240896](https://www.odoo.com/odoo/project/1519/tasks/5240896) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241747
This update corrects a display issue where archived recurring plans continued to show up as pricing options on the website. The fix ensures that archived plans are no longer considered during the pricing selection process, improving the user experience and preventing outdated information from being presented. This ensures accurate pricing is displayed to customers.
Original PR description
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car…
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car Leasing (SUB)`. **Issue:** - Even after archiving the Monthly recurring plan, its pricing still appears on the website product page. **Root cause:** - At [1], when searching for a suitable recurring price, the system does not filter out pricing records belonging to archived recurring plans. - As a result, inactive plans are still considered during pricing selection. **Solution:** - In this fix, we ensure that recurring plan pricing is included only if the related plan is active. - Archived plans are now ignored, preventing them from appearing on the website. [1]: https://github.com/odoo/enterprise/blob/25edaac85f8fd1699bb78163b01efb966e7fb680/sale_subscription/models/sale_subscription_pricing.py#L78-L79 before <img width="340" height="184" alt="recurring_plan_before" src="https://github.com/user-attachments/assets/abac39fb-5765-4bc4-aec3-87eef7135a18" /> after <img width="337" height="168" alt="recurring_plan_after" src="https://github.com/user-attachments/assets/35ee92e8-e66b-4612-add3-58b277560ea5" /> **opw-5266333** Forward-Port-Of: odoo/enterprise#103473 Forward-Port-Of: odoo/enterprise#100587
This update resolves an issue where invoices generated with complex certificates (multiple similar RDNs) failed validation by official Spanish tax authorities. The fix ensures the issuer is correctly generated by prioritizing RDNs during the process, improving compliance with regulatory requirements. This prevents potential errors in invoice processing.
Original PR description
When a certificate contains multiple RDNs of the same type (for example several OU entries), the generated issuer is incorrect. This happens because the current implementation relies on a dictionary to sort the RDNs, causing duplicate keys to be overwritten. Steps to reproduce: - Create a certificate with multiple OU RDNs - Upload the certificate in Odoo - Generate the Facturae EDI document - Validate it using official tools: https://face.gob.es/es/facturas/validar-visualizar-facturas https://valide.redsara.es/valide/ejecutarValidarFirma/ejecutar.html The validation fails because the issuer is incorrect. This commit fixes the issue by sorting RDNs using a priority-based list, ensuring all RDNs are preserved and ordered correctly. opw-5408225 opw-5380996 opw-5253287 Forward-Port-Of: odoo/odoo#243098 Forward-Port-Of: odoo/odoo#241094
This update fixes an issue where discounts applied to repair quotations weren't correctly carried over to the linked sale order lines. The fix removes a faulty process that was resetting the discount calculation, ensuring that discounts are accurately reflected in the final order. This improves the accuracy of pricing and reporting for repair services.
Original PR description
**Steps to reproduce:** * Install the **Repair** module with demo data. * From Setting -> enable 'Discounts' and 'Pricelists' * From the home screen, search for Pricelist and open it. * Open the…
**Steps to reproduce:** * Install the **Repair** module with demo data. * From Setting -> enable 'Discounts' and 'Pricelists' * From the home screen, search for Pricelist and open it. * Open the default USD pricelist and go to Configuration → `Show public price & discount to the customer` * Open the *Repair* app. * Create a **Repair Order with parts**. * Click **Create Quotation** button from the repair order. * In the quotation, order line and set a **discount**. * Return to the repair order using the **Repairs** smart button. * Confirm the repair order, then **Start repair** and **End repair** order. **Observed behavior:** * The discount added on the quotation line disappears from the linked sale order line. **Cause:** * The `discount` field on `sale.order.line` is computed by `_compute_discount`, which `depends` on `product_id`, `product_uom`, and `product_uom_qty`. When `product_uom_qty` is written during `action_repair_done`, the compute method is triggered and the `discount` is recalculated. https://github.com/odoo/odoo/blob/49169c4c4fec57d78cd82c4c9366de9d69540e6a/addons/repair/models/repair.py#L457 **Fix:** * Remove the for loop that calls `write()` on the sale order lines, as it is functionally incorrect and causes the discount to be reset. --- opw-5352567 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243075 Forward-Port-Of: odoo/odoo#238410
This update fixes a potential issue where tour interactions with the Clipboard API weren't reliably mocked, particularly in headless environments. By delaying cleanup until the API call is complete, the system now correctly simulates Clipboard API behavior, preventing browser delays or permission errors. This ensures tours function smoothly across different Chrome versions.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/odoo#243280
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup until the API call is complete, the system avoids delays or permission errors, ensuring tours function reliably. This resolves a compatibility problem highlighted by a recent Chrome update.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update ensures that thumbnails on public documents are automatically reflected in their associated shortcuts. Previously, public users couldn't update shortcuts even when the document itself was updated. This change corrects a permission issue that prevented thumbnail propagation, ensuring a consistent experience for all users.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update fixes a visual issue on the eating location page where a single preset option was left-aligned. Now, when only one preset is available, it's automatically centered for a cleaner and more user-friendly experience. This ensures consistent presentation of options for self-ordering.
Original PR description
On the eating location page, when there is only one preset, we would like to center it. Before, when there is only one preset available, it was aligned on the left. This occurs when there is two presets for a pos config and the default one is not available in self o task:5478651 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243012
This pull request addresses several critical issues impacting payroll processing for Australian businesses using Odoo Enterprise. Specifically, it resolves problems with zeroing, Medicare calculations, STP reporting accuracy, and rounding errors, ensuring more reliable and compliant payroll operations. These fixes improve the overall stability and accuracy of the system.
Original PR description
Tracebacks on zeroing Medicare computation to require the variation form Rounding error on STP reporting of Additional withholding task-5416549 Forward-Port-Of: odoo/enterprise#103929
This update fixes an issue where the automated PDF generation for paychecks wasn't working when multiple paychecks were scheduled. The fix ensures that PDFs are correctly generated for all employees, regardless of the number of paychecks being processed. This improves the reliability of payroll reporting.
Original PR description
### Issue: When running the scheduled action "Payroll: Generate pdfs" for several payslips, nothing is generated and a traceback can be seen in the logs. ### Steps to reproduce: - Disable scheduled…
### Issue: When running the scheduled action "Payroll: Generate pdfs" for several payslips, nothing is generated and a traceback can be seen in the logs. ### Steps to reproduce: - Disable scheduled action: "Payroll: Generate pdfs" (to avoid side effect in next step) - Refuse all time off for "Anita Oliver" (to avoid side effect in next step) - Create a user for the employee "Anita Oliver" - Link the employee and the user - Create 2 payslips - 1 for "Mitchell Admin" - 1 for "Anita Oliver" - Compute sheet and confirm both payslips - Run scheduled action: "Payroll: Generate pdfs" - Nothing happens ### Cause: The traceback is raised on the line `self._get_document_partner().id` because `_get_document_partner()` can return a recordset. ### Solution: Call `ids` instead of `id`. ### Note: Calling `_get_document_partner()` on a recordset [here](https://github.com/odoo/enterprise/blob/a0729c8d42ca93016b23e331d8f38c1f4fa88f12/hr_payroll/models/hr_payslip.py#L444) seems unexpected as, if only one payslip in the recordset has `self.employee_id.user_id.partner_id` evaluating to `True`, then it will return only this partner, completely ignoring the other part checking `self.employee_id.work_contact_id`. The final code works fine as `_check_create_documents()` is called again individually [here](https://github.com/odoo/enterprise/blob/a0729c8d42ca93016b23e331d8f38c1f4fa88f12/documents/models/ir_attachment.py#L86). opw-5213979 Forward-Port-Of: odoo/enterprise#103749 Forward-Port-Of: odoo/enterprise#101911
This update ensures that when importing electronic invoices, the system correctly identifies and uses existing bank accounts linked to the same supplier, regardless of the company where the invoice is being created. Previously, the import would fail due to a constraint issue, even if the bank account already existed. This improves the efficiency of invoice processing.
Original PR description
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for…
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for that vendor on a child company, the search for a bank account linked to the same company would not find that pre-existing bank account on the parent company. When later trying to create it, the unicity constraint on (sanitized_acc_number, partner_id) would trigger, failing the import. Current behavior before PR: The electronic invoice cannot be imported if the same IBAN account already exists on the partner but on another company than the invoice being created, even though we are going to create the invoice for a partner linked to that other company. Desired behavior after PR is merged: Banks account already linked to the partner are found irrespective of the company, provided the partner (account holder) is the same. This should be correct since the res.partner.bank company_id is a related on res.partner. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242365
This update resolves an issue where certain buttons on the softphone (for helpdesk and recruitment) were inaccessible to some users. The fix adds necessary permission checks, ensuring all authorized users can now create and view tickets/applicants through the softphone interface. This improves usability and functionality for relevant teams.
Original PR description
The ticket/applicant create/view buttons on softphone are missing permission check. Add them. Task-5461729
This update resolves a minor issue that caused tests for embedded actions to sometimes fail unpredictably. By adding a necessary wait for the browser's update cycle, the tests are now more reliable and consistent. This ensures the continued stability of our web application.
Original PR description
In this commit, we add a missing await for an animation frame in an embedded action test. This ensures that the test waits for the DOM to update properly before proceeding, preventing potential flakiness in the test execution. runbot error~237752 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243240
This update resolves a validation error in Odoo Studio related to customizing contact fields. The issue stemmed from a missing 'help' attribute in the field definitions, preventing proper validation of changes made through the Studio interface. This ensures that customizations to contact lists are now correctly validated.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357 Forward-Port-Of: odoo/odoo#240261
This update fixes an issue where the 'Preview on Portal' button appeared in vendor bill emails, causing problems with the portal payment process. The change now ensures vendor bills include the original vendor PDF, and a minor visual adjustment has been made to improve the visibility of the input field in email notifications. This ensures a smoother experience for vendors.
Original PR description
Vendor bill emails are meant to include the vendor’s original PDF rather than an Odoo-generated invoice. The "Preview on Portal" button was hidden to avoid facing errors in the portal payment page. Additionally, remove the CopyClipboardChar widget from the "incoming_einvoice_notification_email" field to make the input placeholder visible. task-5438315 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242850
This update resolves an issue where failed electronic payments in Point of Sale would block users from canceling the payment. A new 'Force cancel' button has been added, mirroring the 'Force done' button, to allow users to bypass this block and complete the cancellation process. This improves the user experience and prevents lost sales due to payment processing errors.
Original PR description
Before this commit, if an electronic payment failed (e.g. due to the payment terminal/IoT box not being reachable) and the user subsequently tried to cancel the payment from the POS, they would reach a blocked state. The payment never cancels but it cannot be deleted. This commit adds a 'Force cancel' button, similar to the 'Force done' button already present, to allow the user to get unblocked in this situation. task-5485237 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243263
4 changes
Enhancements to existing features
This update adjusts the Brazilian tax code list to comply with the latest regulatory requirements. Specifically, it adds a 'DEPRECATED' marker to expiring codes and incorporates new tax codes for Brazil. This ensures continued compliance and accurate tax reporting.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
Resolved issues and error corrections
This update resolves an issue where the POS system in Ecuador would crash when a customer was removed from the partner list after selecting 'Consumidor Final'. The fix ensures a customer is always selected, either a specific customer or 'Consumidor Final', improving stability and accuracy for Ecuadorian retail operations.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#103868 Forward-Port-Of: odoo/enterprise#102221
This update ensures eTIMS configuration warnings are only displayed for companies operating in Kenya, resolving confusion for users in other locales. The change streamlines validation and maintains the correct eTIMS behavior for Kenyan businesses. This improves the user experience and data accuracy.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update ensures that thumbnails are correctly updated on document shortcuts, even when accessed by public users. Previously, public users lacked thumbnail updates due to a permission restriction, leading to inconsistencies. This change resolves a bug where public access to a document shortcut didn't reflect thumbnail updates.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
10 changes
Enhancements to existing features
This update modifies the Brazilian tax code list to comply with the latest regulatory requirements. Specifically, it adds a 'DEPRECATED' marker to expiring codes and introduces new tax codes for Brazil. This ensures continued compliance and accurate tax reporting.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
Resolved issues and error corrections
This update fixes an issue where tax invoices generated in Thai were incorrectly displaying the branch name in English. The change ensures the branch name is translated based on the language setting of the customer's account, improving accuracy and compliance with Thai tax regulations. This improves the user experience for Thai customers.
Original PR description
Currently, l10n_th_branch_name is not translatable. Regardless of the language setting, it is printed in English on the tax invoice. This PR addresses that. Task-5438534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242484
This update resolves a technical error that occurred when a specific customer type ('Consumidor Final') was selected in the Ecuadorian Point of Sale (POS) system. The fix ensures that a customer is always identified, which is a requirement for accurate reporting and compliance in Ecuador. This prevents tracebacks and improves system stability.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#103868 Forward-Port-Of: odoo/enterprise#102221
This update fixes a confusing issue where eTIMS configuration warnings were displayed for companies outside of Kenya. Now, the warnings are only shown for Kenyan businesses, ensuring accurate validation and a better user experience. This improves the relevance of the eTIMS checks.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update resolves an issue where Facturae EDI documents were failing validation due to incorrect issuer generation when certificates contained multiple RDNs of the same type. The fix ensures all RDNs are properly ordered, allowing the documents to pass validation checks with official Spanish tax authorities, improving compliance.
Original PR description
When a certificate contains multiple RDNs of the same type (for example several OU entries), the generated issuer is incorrect. This happens because the current implementation relies on a dictionary to sort the RDNs, causing duplicate keys to be overwritten. Steps to reproduce: - Create a certificate with multiple OU RDNs - Upload the certificate in Odoo - Generate the Facturae EDI document - Validate it using official tools: https://face.gob.es/es/facturas/validar-visualizar-facturas https://valide.redsara.es/valide/ejecutarValidarFirma/ejecutar.html The validation fails because the issuer is incorrect. This commit fixes the issue by sorting RDNs using a priority-based list, ensuring all RDNs are preserved and ordered correctly. opw-5408225 opw-5380996 opw-5253287 Forward-Port-Of: odoo/odoo#243098 Forward-Port-Of: odoo/odoo#241094
This update corrects a visual issue where the 'Update Prices' button appeared on sales orders even when no pricelist was configured. The fix ensures the button is only displayed when a pricelist is active, preventing confusion and ensuring accurate pricing calculations. This improves the user experience for sales order creation.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241812
This update fixes an issue where discounts applied to repair quotations weren't correctly carried over to the linked sales order lines. The fix removes a faulty process that was resetting the discount calculation, ensuring discounts are accurately reflected in the final sales order. This improves the accuracy of pricing and reporting for repair services.
Original PR description
**Steps to reproduce:** * Install the **Repair** module with demo data. * From Setting -> enable 'Discounts' and 'Pricelists' * From the home screen, search for Pricelist and open it. * Open the…
**Steps to reproduce:** * Install the **Repair** module with demo data. * From Setting -> enable 'Discounts' and 'Pricelists' * From the home screen, search for Pricelist and open it. * Open the default USD pricelist and go to Configuration → `Show public price & discount to the customer` * Open the *Repair* app. * Create a **Repair Order with parts**. * Click **Create Quotation** button from the repair order. * In the quotation, order line and set a **discount**. * Return to the repair order using the **Repairs** smart button. * Confirm the repair order, then **Start repair** and **End repair** order. **Observed behavior:** * The discount added on the quotation line disappears from the linked sale order line. **Cause:** * The `discount` field on `sale.order.line` is computed by `_compute_discount`, which `depends` on `product_id`, `product_uom`, and `product_uom_qty`. When `product_uom_qty` is written during `action_repair_done`, the compute method is triggered and the `discount` is recalculated. https://github.com/odoo/odoo/blob/49169c4c4fec57d78cd82c4c9366de9d69540e6a/addons/repair/models/repair.py#L457 **Fix:** * Remove the for loop that calls `write()` on the sale order lines, as it is functionally incorrect and causes the discount to be reset. --- opw-5352567 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243075 Forward-Port-Of: odoo/odoo#238410
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments. By delaying cleanup until the action's listener has finished, the system avoids delays and errors related to browser permissions or waiting for user input. This ensures tours function reliably across different browsers and configurations.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/odoo#243280
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. The change ensures the API call is properly mocked in two steps, preventing delays and errors caused by slower processing or network connections. This improves tour reliability and avoids browser permission prompts.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update ensures that thumbnails are correctly updated on document shortcuts, even when accessed by public users. Previously, public users lacked thumbnail updates due to a system limitation. This change resolves a discrepancy where access to the document shortcut was lost, regardless of ownership.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
6 changes
Enhancements to existing features
This update modifies the NCM (National Customs) code list used in Odoo Enterprise for Brazil, aligning with the latest tax regulations. The changes include marking expiring codes as ‘DEPRECATED’ and adding new codes to ensure accurate tax reporting and compliance.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
Resolved issues and error corrections
This update fixes a confusing issue where eTIMS configuration warnings were displayed for companies outside of Kenya. Now, warnings are only shown for Kenyan businesses, ensuring validation remains relevant and avoids unnecessary alerts for other users. This improves the user experience and accuracy of the system.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update fixes an issue where tour scripts were incorrectly attempting to access the clipboard API, leading to potential delays or errors. The change ensures the API call is properly mocked in two steps, preventing premature cleanup and resolving compatibility problems with newer Chrome versions. This improves the reliability of our in-app tours.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update fixes an issue where public users sharing documents didn't automatically update the corresponding request shortcuts with new thumbnails. The problem stemmed from a restriction on public user access, preventing thumbnail propagation. Now, shared document shortcuts will correctly reflect any changes to the document's thumbnail, ensuring a consistent user experience.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update resolves an issue where a reordering rule would incorrectly attempt to update a manufacturing order (MO) that had been locked due to a quality check. The fix ensures that the MO remains locked when a quality point is completed, preventing data inconsistencies and errors. This improves the reliability of the MRP process.
Original PR description
### Issue: In 18.0-18.2, for product with a Manufacturing BoM containing a Component, a WO and a Quality Point If a Reordering Rule is triggered, odoo try to add the newly ordered quantity to an…
### Issue: In 18.0-18.2, for product with a Manufacturing BoM containing a Component, a WO and a Quality Point If a Reordering Rule is triggered, odoo try to add the newly ordered quantity to an existing MO But if the MO is "locked" because a quality check has been performed, a Error is raised: ``` Odoo Warning You cannot update the quantity to do of an ongoing manufacturing order for which quality checks have been performed. ``` ### Steps to reproduce: - Create a product tracked by quantity - Add a BoM (1 component tracked by Quantity, 1 Operation with 1 Quality Point) - Create a Reordering Rule (Route: Manufacture, Trigger: Manual, Min/Max: 1) - Click on Order - Open the created MO and the Shop Floor (Remove the filters to see the WO) - Complete the Quality Point - Modify the Reordering Rule (Min/Max: 2) - Click on Order - the error should be raised ### Cause: The MO to update is retrieved here: https://github.com/odoo/odoo/blob/45184da06cf7b92a48e3e4e90bf8b285bdd9ad6a/addons/mrp/models/stock_rule.py#L53-L57 Using a domain defined in this function: https://github.com/odoo/odoo/blob/45184da06cf7b92a48e3e4e90bf8b285bdd9ad6a/addons/mrp/models/stock_rule.py#L130-L153 In 18.0-18.2, when validating a `quality check` from the Shop Floor while the WO is in `waiting` state, the MO remains in `confirmed` state This makes the domain match the current WO and MO, triggering `change_prod_qty` even though the MO is locked In 18.3–18.4, a similar issue can occur with multiple WOs when the first blocks the second and a `quality check` is performed on the latter The `blocked` state behaves like `waiting`, but the issue is avoided when using the Shop Floor because this commit ensures that clicking a card starts the timer and changes the state to `progress`: https://github.com/odoo/enterprise/pull/84425/commits/67c2127424ef3a1eb4794edd2c262b94ef186561 However, it could still theoretically be triggered under specific conditions In 19.0, the new stock.reference system (https://github.com/odoo/odoo/pull/212679) ensures the MO is detected as different, so a new one is always created opw-5012588 Forward-Port-Of: odoo/enterprise#101313
This update resolves a technical issue causing duplicate entries in the Accounts Coverage Report. The fix ensures the report accurately reflects account data by ignoring identical report lines with the same name and code. This improves the reliability of financial reporting.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
31 changes
New functionality added to Odoo
This update introduces a standard tax configuration for Colombian companies requiring 'Auto-Withholding' tax. It simplifies the process by pre-defining the necessary accounting distributions (+100% to account 135515, -100% to 236575) to ensure accurate tax calculations and compliance, eliminating manual errors.
Original PR description
Colombian companies often require "Auto-Withholdings", where the seller must withhold tax from themselves. Configuring this manually is error-prone due to the specific +100/-100 distribution required to neutralize the invoice total. This commit adds a standard "VAT Self-Withholding 1.2%" tax to the localization data to serve as a functional reference. It is pre-configured with: - A new "VAT Self Withholding" tax group. - Repartition lines distributing +100% to account 135515 and -100% to account 236575. This ensures users have a ready-to-use example that handles the accounting movements correctly without affecting the invoice total. task-5430248
Enhancements to existing features
This update enhances the Gantt view's visual representation of employee schedules. It now correctly displays partial working schedules with diagonal coloring, providing a clearer and more accurate view of employee availability and workload. This improves scheduling accuracy and reduces potential misunderstandings.
Original PR description
. Override the framework logic for cell coloring to apply diagonal coloring in cases of partially worked schedules. task-5470365
This update streamlines HR data management by consolidating view definitions for HR versions. Previously, separate views were used, but now they’ve been moved to the base HR module and inherited, simplifying maintenance and ensuring consistency across the Odoo Enterprise system. This change improves efficiency and reduces potential conflicts.
Original PR description
Since now hr_attendance needs to use almost the same list and search views for hr.version, the views are now moved to base hr and inherited. Related: https://github.com/odoo/odoo/pull/236555 Task-5189039
This update enhances the configuration of Belgian payroll data by allowing for flexible selection of ONSS categories (DIMONA and DMFA) instead of fixed codes. This change improves accuracy and compliance with Belgian regulations, particularly for employees under 18, by adding warnings for invalid category usage. The update also streamlines the calculation of required joint commission data.
Original PR description
In this commit, we introduced configurable DIMONA and DMFA categories on the employee instead of hard-coded values. The DIMONA worker type is now taken from a new “DIMONA Category” field, and the DMFA XML uses the employee’s DMFA Category instead of the fixed code 495. The Joint Commission is derived from the first 3 digits of the employee value (or 'xxx' if empty). DIMONA and DMFA categories are required only when the ONSS certificate is enabled, and a new warning is added when an invalid DMFA category is used for under-18 workers (categories 035 and 439). task-5421176
This update significantly improves the EPF Summary report, providing employees and HR with detailed information on Provident Fund (PF) and Voluntary Provident Fund (VPF) contributions. The report now generates a downloadable XLSX file with a comprehensive PF summary for each employee, ensuring accurate record-keeping and compliance.
Original PR description
This PR introduces an improved EPF Summary report, providing detailed information on employee and employer contributions to Provident Fund (PF) and Voluntary Provident Fund (VPF) accounts for a specified month or period. The report generates an XLSX file containing a comprehensive PF summary for each employee. task-4250905
This update allows staff to print visitor badges during the 'checked-in' stage of the frontdesk process, in addition to the 'planned' stage. This streamlines the visitor check-in experience and reduces the need for manual intervention. It improves efficiency and ensures visitors receive badges promptly.
Original PR description
Before: The 'Print Badge' button was only available when the visitor state was 'planned`. After: The 'Print Badge' button is now visible when the visitor state is either `planned` or `checked_in`. Task - 5382655
This update enhances the demo data for the Odoo Enterprise Mexican payroll module (l10n_mx_hr_payroll) to facilitate testing and validation. Specifically, it incorporates a realistic working schedule common in Mexican companies and supports testing the new CFDI batch generation feature, ensuring compliance with Mexican tax regulations.
Original PR description
Update the DEMO DATA so we can validate CFDI's and XML for all the PAC's and to test the new "CFDI batch generation" feature. Create a new working schedule, this schedule it's the most used in MX companies. target: 19.0 task-5239031 Forward-Port-Of: odoo/enterprise#102726 Forward-Port-Of: odoo/enterprise#100557
This update adds crucial reports for the Philippines' Computerized Book of Accounts (CBA) requirements, aligning with BIR regulations. It includes four key reports – General Ledger, Journal, and Sales/Purchase – and a new Inventory report, supporting PDF and CSV export formats for easy submission. This ensures compliance and streamlines financial reporting for Odoo Enterprise users in the Philippines.
Original PR description
# Related odoo/enterprise#103257 # Commit Messages ### [IMP] l10n_ph_reports: Add Book of Accounts to fulfill PH's CBA This commit adds the "Computerized Book of Accounts" (CBA) reports to fulfill…
# Related
odoo/enterprise#103257
# Commit Messages
### [IMP] l10n_ph_reports: Add Book of Accounts to fulfill PH's CBA
This commit adds the "Computerized Book of Accounts" (CBA) reports to
fulfill the Computerized Accounting System (CAS) requirements mandated
by the Philippines Bureau of Internal Revenue (BIR).
This includes 4* reports:
1. General Ledger
2. General Journal
3. Sales Journal
4. Purchase Journal
*The 5th report, Inventory Report, is located in `l10n_ph_reports_stock`
The BoA report primarily supports `.pdf` and `.csv` exports to fulfill
BIR requirements. BIR requires a `.dat` format for e-submission. As
there is no prescribed format, we use the subset `.csv`. We added this
as the primary export button on the reports
All Reports:
- Supports `filter_analytic_groupby`
General Ledger (GL):
- A copy of standard GL, without "Partner" and "Currency" column
General Journal:
- Akin to GL, except it shows `account.move.line` details
- Groups `account.move.line` by `account.move` by a root line. The root
line exists to make use of the "load more" function.
Sales and Purchase Journal:
- Grouped by month, Ordered by displayed name
- Custom handling of the taxes (price_include/exclude) and manual tax
override splitting
PDF:
- forces landscape printing for simplicity
- displays custom headers in `company_information` column as BIR requires:
- non-vat / vat
- company phone / mobile
- reporting period
CSV:
- Flattens any groupings into a more compact form, similar to raw data.
Technical:
- Added `res.company.l10n_ph_is_vat_registered` field for users to
control the PDF exports non-vat/vat display.
Testing:
- Every report has snapshot testing of the web view and csv export data.
- Input test data has been formulated to test key features.
task-[https://github.com/odoo-dev/enterprise/commit/45092825263b67321a135c160a70aaf6405391f5](https://odoo.com/odoo/all-tasks/4509282)
Community-odoo/odoo#232035
Co-authored-by: Nicolas Viseur <vin@odoo.com>
---
### [ADD] l10n_ph_reports_stock: Add Inventory Report to Book of Accounts to fulfill PH's CBA
CBA: Computerized Book of Accounts. Part of the requirements to fulfill
CAS (Computerized Accounting System).
This commit adds the 5th and final Book of Accounts (BoA) report:
Inventory. The report supports the custom `.csv` and `.pdf` exports like
all other BoA reports do.
Technical:
- The data is similar to /stock-report, except with only key details.
- Custom "Hide Out Of Stock" filter
Testing:
- Snapshot testing of the web view and csv export data.
- Input test data has been formulated to test key features.
task-[https://github.com/odoo-dev/enterprise/commit/45092825263b67321a135c160a70aaf6405391f5](https://odoo.com/odoo/all-tasks/4509282)
Community-odoo/odoo#232035
---
### [IMP] account_reports: support landscape printing and custom footer layout in pdf report options
- The current methods for determining when the PDF report should be
printed in landscape is insufficient and this allows custom reports to
easily force it by adding `force_landscape_printing` option in
`_custom_options_initializer()`
- It is difficult to modify the default `internal_layout` used in PDF
export. We modify `_get_layout_footer()` method to accept an optional
`options` parameter where a custom layout can be passed in via
`options['custom_display_config']['pdf_export']['internal_layout']`
- We make the `odoo.release.version` available in PDF export's
`rcontext` as it's a fairly common requirement for exported PDFs. In
particular, l10n_ph.
related task-4509282This update enhances the user experience by adding a search filter when opening records through the contact stat button. Previously, records were filtered based on action domains without a visible filter, leading to confusion. Now, users can directly see and control the search query, improving clarity and efficiency.
Original PR description
Purpose ======= Currently, when we open records of various models through the stat button from the contact form view, records are filtered based on the domain given on action, but the filter is not set so the user might find this confusing. Technical ========= Web Studio - When creating a stat button on a view using Studio, the search filter does not show if the target field is absent from the search view. Specification ============== - It adds a search filter to search the record so the user can visualize the query. - Web Studio - When creating a stat button with Studio, it will either add a search view if the model doesn't already have one, or it will add a field to the existing search view. This allows the user to set the default search using the stat button. Task-2671192
Resolved issues and error corrections
This update resolves an inconsistency in the SLSP reports, ensuring data is displayed in a predictable order. The change adds a standard sorting method to the database queries, preventing future test failures and improving report reliability. This ensures accurate reporting for Philippine tax compliance.
Original PR description
A recent test was added that tests the lines of the SLSP reports. Up until now, all tests were either testing specific lines (not the report structure) or the export, which uses different queries. This new test is now failing inconsistently due to the order in which the data is being displayed. We add default orderby in SQL queries of the SLSP (using the models default orderby) in order to make the order consistent and avoid further issues. Forward-Port-Of: odoo/enterprise#103925
This update simplifies the Point of Sale interface by removing a confusing option. Specifically, when the POS IoT module is enabled, the system now correctly displays both IP address and IoT options for device selection. This ensures a cleaner and more intuitive user experience for sales staff.
Original PR description
When there is only one choice in the selection of `use_type` (IP address or IOT), we hide it in the form. But when there is two choice (so, when pos_iot is installed), we show the two options. community pr: https://github.com/odoo/odoo/pull/242790
This update fixes a visual inconsistency in the HR appraisal module by aligning progressbar headers and content to the left. This ensures a cleaner and more professional appearance, particularly when the application is displayed in right-to-left languages.
Original PR description
**Progressbar** columns currently have **right-aligned headers**, which results in visual inconsistency. This change enforces **left alignment** for both the **progressbar headers** and their **column content** to ensure a clearer and more consistent layout. When rendered in an **RTL (right-to-left)** format, the headers and content are aligned to the **right** accordingly, consistent with the alignment of other fields in that format. Community: https://github.com/odoo/odoo/pull/241053 task-5248253
A technical error preventing users from booking appointments through the website has been fixed. The issue stemmed from a missing configuration update, which has now been implemented to ensure appointments can be booked correctly. This resolves a disruption in the appointment booking process.
Original PR description
Steps to reproduce ==================== 1- Create an appointment 2- Click on manage capacity 3- Go to the website and try to book an appointment 4- Traceback occurs Technical ========== Here https://github.com/odoo/enterprise/pull/86408/commits/1901670c2de667b57b647bc62b502176a0611220, we started using the range function instead of array keys, here we missed passing this range function to the template, that's why we were getting a traceback. After this commit =================== - This PR addresses the issue and resolves it by passing the range function to the template. Task-5484581
This update ensures that all fields in generated salary documents, including the legal name, now accurately reflect the applicant's updated name as entered in the Salary Configurator. Previously, documents displayed an outdated name, causing inconsistencies. This change improves data accuracy and provides a more reliable record of applicant information.
Original PR description
- When applicants updated their name in the Salary Configurator, the change was correctly reflected during the signature step. However, the generated document continued to use the original applicant name stored in the system, while only the signature block displayed the updated name. This caused an inconsistency between the document content and the signature details. - This commit ensures that the legal_name used in generated documents is updated in line with the name changes made in the Salary Configurator, keeping all displayed information consistent and accurate. Task-5374568
This update resolves a technical issue where the 'Mark as Ready' order completion process in UrbanPiper POS was failing, resulting in an 'undefined street' error. The fix ensures that the system correctly checks if a customer is assigned before completing the order, preventing this error and improving order processing reliability.
Original PR description
Steps to produce: ==== - Place an online delivery order through urbanpiper - Edit the order and remove customer - Complete the order as Marks as Ready - Print Reciept Issue: ==== - TB occurs stating undefined street Fix: ==== - Check whether partner is assigned or not task-5407001 Forward-Port-Of: odoo/enterprise#103736 Forward-Port-Of: odoo/enterprise#102100
This update fixes an issue where payroll payments were incorrectly linked to the employee's bank account instead of the correct vendor account (like the IRS). The change ensures payments are accurately routed to the intended recipient, resolving a payment processing error. Automated tests have been added to verify this correction.
Original PR description
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying…
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying the account number (here is a random account IT22M8576110068R4A56E760901) and setting it as "trusted") 3. Set the bank account of the Internal Revenue Service (IRS) partner (also set it as trusted, and here is another random account: IT77H400725028682A0R202P050) 4. Create a new Off-Cycle Payslip : a. Payroll -> Payslips -> Payslips -> New Off-Cycle button b. Set Mitchell Admin as the employee of the payslip c. Change the Structure to "United States: Regular Pay" d. Compute Sheets 5. Create payments : a. Go to the Journal Entries linked to the payslip, and Post them b. Go back to the payslip and 'Pay' c. In the new wizard: Click on 'Create Payments' 6. Go back to the journal entries, a new button should've appeared on top of the page for the payments (click it now!) 7. Click on the PAY00001 (it the Federal Income Tax which is made to the Internal Revenue Service (ISR) and notice that the bank account used in payment is the bank account of the employee (should be the ISR account obviously) ## Purpose Modifying `account.payment.register` for fixing `hr.payslip` payments generation so that each payment is assigned the correct `partner_bank_id`. Also, fixing a SEPA payslip payment bug which says that the employee bank account is untrusted even if it isn't. ## Tests Adding `test_bank_account_partner_payment_payslip` test to check that the payment generated for Professional Tax is made to the correct bank account (before this fix, the selected account was always the employee bank account, whatever the vendor specified in the payment). Adding `test_sepa_payslip_partner_bank_id` test to check that the `partner_bank_id` is set after account_register_payment wizard has been initialized and that the action_create_payments (action launched when the user clicks on "Create Payments" button of the `account_register_payment` wizard) doesn't raise any error. This second test is not really specified in the specs, I just stumbled upon some stacktrace when coding this PR and decided to add a test to check the flow of sepa payment. [community#235475](https://github.com/odoo/odoo/pull/235475) [task-4979220](https://www.odoo.com/odoo/action-4043/4979220) Forward-Port-Of: odoo/enterprise#103485 Forward-Port-Of: odoo/enterprise#99373
This update corrects a discrepancy in the employment bonus calculations for the Belgian HR payroll module, ensuring accurate figures up to March 2026. This change addresses a technical adjustment to comply with updated Belgian tax regulations, guaranteeing accurate payroll reporting for our Belgian clients. The fix impacts the calculation of bonus payments.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update fixes an issue where refund alerts were triggered incorrectly due to rounding differences in order totals. The change ensures that the system accurately compares refund amounts to original order amounts, preventing false alerts and improving the reliability of the POS system. This ensures accurate financial reporting and reduces potential customer service issues.
Original PR description
Before this commit, if the total amount of the order had rounding differences compared to the sum of its lines, the system could incorrectly trigger an alert stating that the refund amount exceeds the original order amount. This was due to a direct comparison between the two amounts without considering potential rounding issues. opw-5402240 Forward-Port-Of: odoo/enterprise#103758 Forward-Port-Of: odoo/enterprise#102224
This update fixes a potential problem where users might unexpectedly gain bank access rights when a contract is signed. The change prevents this by ensuring proper authorization controls are in place, improving data security and compliance. This ensures accurate and controlled access to financial information within the HR contract management system.
Original PR description
Forward-Port-Of: odoo/enterprise#103807
This update resolves a display issue within the sign flow where the third dropdown option in the style list menu was not appearing correctly. The fix ensures that the system waits for font data to load before presenting the full menu selection, preventing a single option from being displayed intermittently. This improves the user experience during the sign process.
Original PR description
In this tour, when we want to select the third dropdown item in style list menu, we must wait that the rpc get_fonts/ is done, or else, it has only one item in the menu. When the menu is opened before the call is completed, there is only one style. When it is opened after, there is all styles loaded. runbot-error-id~232652 Forward-Port-Of: odoo/enterprise#103813
This update resolves an issue in the Hong Kong payroll localization that prevented correct calculations. The team corrected a change in the underlying data structure and updated the related tests to ensure continued functionality. This ensures accurate payroll processing for employees in Hong Kong.
Original PR description
The commit https://github.com/odoo/odoo/commit/7eb89f35192ceb46f8d23f2443580c7e9b69488d changed the hr work entry leave_id field into leave_ids. The HK localization was not updated, and as it relies on this field it is no longer working. This updates the localization to fix the issue, as well as update the tests once more to fix the issues. We also add a dependency on test_l10n in the test module; and then set it as auto install to ensure it will be correctly tested on runbot.
This update resolves a bug impacting how absence data is tracked within the HR module. The fix ensures accurate recording and reporting of employee absences, improving the reliability of HR data and streamlining attendance management processes. This change was originally developed in a separate branch and now integrates into the main Enterprise version.
Original PR description
Task: 5470030 Forward-Port-Of: odoo/enterprise#103893 Forward-Port-Of: odoo/enterprise#103781
This update ensures that timesheet timers accurately reflect the task they're associated with when viewed in the list view. Previously, timers defaulted to the user's favorite project instead of the specific task, leading to inaccurate time tracking. This fix corrects this behavior.
Original PR description
### Issue: When looking at the list of timesheet for a task, we can start the time but the timer have default values that don't correspond to the task. ### Cause: `startTimer` in the `timesheetTimerService` is called from the timesheet timer hook without vals. It then makes an orm call to `action_start_new_timesheet_timer` to retrieve the fields (project or task) but as nothing is given in the vals, the selected project is the one returned by `_get_favorite_project_id()`. ### Solution: Get the context of the list view to retrieve the task or the project and input it in `vals`. opw-5342525 Forward-Port-Of: odoo/enterprise#103922 Forward-Port-Of: odoo/enterprise#102152
This update addresses several critical issues within the Belgian payroll module (l10n_be_hr_payroll) to ensure accurate calculations for the social balance sheet. Specifically, the system now correctly handles employees without payslips, avoids double-counting, and fixes floating-point comparison errors, resulting in more reliable reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#103786
This update resolves a performance issue related to appointment scheduling within the HR module. Refactoring the HR system and moving employee data to a new model required a slight adjustment to database queries to ensure accurate scheduling calculations. This change improves the speed and efficiency of appointment slot availability.
Original PR description
Since hr has been refactored and lot of hr.employee fields moved to hr.version model, we have to increase Querycount by one as now _slot_availability_prepare_users_values_workhours function calls for hr.version together with hr.employee to get all the right values. Original function flamegraph  Since https://github.com/odoo/odoo/pull/202869, extra call for hr.version when we are trying to read employees[0].resource_calendar_id  Fixing [Runbot error 226700](https://runbot.odoo.com/odoo/error/226700)
This update resolves an error that occurred when creating attendance records using the 'Planning' work entry source. The fix corrects issues with date calculations and interval formatting, ensuring attendance records can be created successfully when using this work entry type. This improves the reliability of the attendance tracking process.
Original PR description
Currently, an error occurs when user creates an attendance with Planning as the Work Entry Source. **Steps to…
Currently, an error occurs when user creates an attendance with Planning as the Work Entry Source. **Steps to Reproduce([Video](https://drive.google.com/file/d/1vGIZswZ-0D_ISAKn8LltYlGgQ7gzI6oA/view)):** - Install the `hr_work_entry_planning_attendance` module. - Go to `Employees` and create a `new employee` or open an `existing one`. - In the `Payroll` section, set `Work Entry Source` to `Planning`. - Go to `Planning` and create a planning slot for this employee `(if it does not exist)` with `Allocated Time` set to less than 100%. - Go to `Attendance` and create `an attendance for this employee` within the planning slot start and end dates. **Error 1:** `AttributeError: 'method_descriptor' object has no attribute 'min'` **Error 2:** `TypeError: Intervals.__init__() takes from 1 to 2 positional arguments but 4 were given` **Cause:** When the Work Entry Source is set to Planning and an attendance is created for that employee, the system updates overtime (if any) and retrieves the scheduled working time from the planning slot. If the planning slot has less than 100% allocated time, it is split day by day, keeping only a portion of each day’s working hours based on the allocation percentage. While creating a datetime at the very start or end of a day, an error occurs due to incorrect access of the min or max attribute from datetime. Another issue occurs when creating intervals using the start and end dates: an error is raised because separate start and stop arguments are passed instead of a list of interval tuples. **Fix:** This commit ensures that the correct datetime.min.time() / datetime.max.time() values are used and that intervals are provided in a list-of-tuples format. [1]- https://github.com/odoo/enterprise/blob/ee8919530ef5835d539b3ade47fa450f736b22a3/hr_work_entry_planning_attendance/models/hr_employee.py#L56-L57 [2]- https://github.com/odoo/enterprise/blob/ee8919530ef5835d539b3ade47fa450f736b22a3/hr_work_entry_planning_attendance/models/hr_employee.py#L60 **No Task ID** Forward-Port-Of: odoo/enterprise#103662
This update corrects a technical issue where the FAIA XML reports generated for l10n_lu companies weren't correctly including the `TaxBase` element when invoices had multiple taxes. This ensures compliance with Luxembourg tax reporting requirements and prevents potential reporting errors. The fix was implemented to accurately reflect product tax calculations in the FAIA XML.
Original PR description
### Issue: The `TaxBase` element was missing in the generated FAIA XML, although it is required when a product line has multiple taxes ### Steps to reproduce: - Use a l10n_lu company - Create an invoice with a product line that has two taxes - Download the General Ledger → FAIA XML report - Observe that `TaxBase` is not included before the TaxBaseDescription element ### Specs & reference: FAIA v2.01 (full) XSD files: https://pfi.public.lu/dam-assets/backup/FAIA/FAIA/XSD_Files.zip opw-5360519 Forward-Port-Of: odoo/enterprise#103862 Forward-Port-Of: odoo/enterprise#101178
This update resolves an issue where changing a Commission Plan's effective dates would erase associated targets and forecasts. Now, the system correctly compares new dates and removes outdated targets, ensuring accurate reporting and planning. This improves the reliability of commission calculations.
Original PR description
Before this commit, changing the Effective Period of a Commission Plan was erasing all the targets and forecast linked to that plan. After this commit, this is no longer the case as we compare if the new targets are within the range and delete the out-of-period targets. task-5469817 Forward-Port-Of: odoo/enterprise#103363
This update fixes an issue where the Helpdesk return wizard incorrectly defaulted to internal 'PICK' operations instead of the final 'OUT' operation for multi-step deliveries. The fix ensures the wizard always selects the correct, customer-facing delivery order, improving the accuracy of returns processing.
Original PR description
Steps to reproduce: - 1. Configure a warehouse for multi-step delivery (e.g., Pick + Ship). 2. Create a Sales Order for a product and fully process the delivery, including all steps. 3. Create a…
Steps to reproduce: - 1. Configure a warehouse for multi-step delivery (e.g., Pick + Ship). 2. Create a Sales Order for a product and fully process the delivery, including all steps. 3. Create a Helpdesk ticket for that customer. 4. From the ticket, click the "Return" button to open the wizard and select the sales order. Issue: - The return wizard incorrectly defaults to the first operation in the delivery chain (e.g., the internal 'PICK' operation) instead of the final, customer-facing 'OUT' operation. Cause: - Since picking is ordered by 'priority, scheduled_date asc, id desc', records are sorted by scheduled_date, this often resulted in selecting an internal 'PICK' operation instead of the final 'OUT' operation, making a more specific filter necessary. Fix: - The code now explicitly filters for pickings with the type code 'outgoing' and sets it as the default delivery order. task-4948134 Forward-Port-Of: odoo/enterprise#103883 Forward-Port-Of: odoo/enterprise#93154
This update corrects a persistent warning about duplicate payslips that appeared after deleting one. The fix ensures a payslip is first cancelled before deletion, preventing the warning from incorrectly triggering. This improves payroll accuracy and reduces potential user confusion.
Original PR description
### Steps to reproduce: - Create two payslips for the same employee for the same period. - Delete one of them; the duplicate warning still appears on the other payslip. ### Fix: - Before deleting a payslip, first cancel it so the current payslip can be skipped while checking for duplicate payslips. - Then invalidate the issue fields of the current payslip, which indirectly recompute the warning for duplicate payslips. task: 5427473
Miscellaneous changes
This pull request explores a preliminary change to temporarily disable certain menus within the Odoo Enterprise platform. This is a proof-of-concept (POC) to investigate potential performance improvements and streamline the user interface. The changes are currently contained within development branches and are not yet live.
13 changes
Resolved issues and error corrections
This update fixes an issue where the basic salary was incorrectly calculated for employees in Saudi Arabia. The system now verifies the presence of 'WORK100' in the employee's worked days, ensuring the basic salary is only applied when appropriate, aligning with payroll regulations. This improves the accuracy of salary payments.
Original PR description
purpose: we should check if there are WORK100 in the worked days, but as of now, we dont, and that results in having the basic salary triggered even when it shouldn't. - made basic salary only computed when work entry source is calendar or WORK100 in the worked days (there are attendances for the employee) and made its amount adapt with the worked days task-id: 5472853
This update corrects a recent change to the access rights for the Account Online Synchronization feature. The previous update granted access to 'Invoicing & Banks' but missed a crucial step – adding the necessary permissions for duplicate transaction handling. This fix ensures the synchronization process correctly manages duplicate transactions, preventing potential data inconsistencies.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/6edc057a9c0459af2b6d625415b700daf6280520 we changed the access rights of the account online sync to Invoicing & Banks but forgot to add the duplicate transactions no task id
This update corrects a display issue where archived recurring plans continued to appear on the website product pages. The fix ensures that inactive plans are no longer considered during pricing selection, preventing outdated information from being shown to customers. This improves the website's accuracy and user experience.
Original PR description
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car…
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car Leasing (SUB)`. **Issue:** - Even after archiving the Monthly recurring plan, its pricing still appears on the website product page. **Root cause:** - At [1], when searching for a suitable recurring price, the system does not filter out pricing records belonging to archived recurring plans. - As a result, inactive plans are still considered during pricing selection. **Solution:** - In this fix, we ensure that recurring plan pricing is included only if the related plan is active. - Archived plans are now ignored, preventing them from appearing on the website. [1]: https://github.com/odoo/enterprise/blob/25edaac85f8fd1699bb78163b01efb966e7fb680/sale_subscription/models/sale_subscription_pricing.py#L78-L79 before <img width="340" height="184" alt="recurring_plan_before" src="https://github.com/user-attachments/assets/abac39fb-5765-4bc4-aec3-87eef7135a18" /> after <img width="337" height="168" alt="recurring_plan_after" src="https://github.com/user-attachments/assets/35ee92e8-e66b-4612-add3-58b277560ea5" /> **opw-5266333** Forward-Port-Of: odoo/enterprise#103473 Forward-Port-Of: odoo/enterprise#100587
This update resolves a database error that occurred when generating tax reports, specifically within the Vietnamese localization module. The fix corrects a mistake in how the report accessed tax descriptions, ensuring accurate report generation and proper hierarchical expansion of sales and purchase reports. This improves the reliability of financial reporting.
Original PR description
Before: The `query_tax_lines` method was incorrectly using the account tag alias to access the `description` field, which does not exist on that table. This caused a database error when expanding invoice lines from the Tax Report. After: Now the query correctly uses the `account_tax` table alias to fetch the tax description. - Also added test cases for sales and purchase reports to ensure correct generation of report lines and proper expansion of the hierarchical structure. task-5461512
This update fixes a confusing issue where eTIMS configuration warnings were displayed for companies outside of Kenya. Now, warnings are only shown for Kenyan businesses, ensuring validation remains relevant and avoids unnecessary alerts for other users. This improves the user experience and data accuracy.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup steps, the system now ensures the API call is fully executed before any verification, preventing delays or permission errors. This improves tour reliability and performance.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update resolves an issue where user images within the referral module were not aligned correctly. The fix ensures a consistent and professional appearance for user profiles in this section of the system. This improves the overall user experience and presentation of referrals.
Original PR description
This fix ensures that the user's image is correctly aligned task-5264613
This update resolves an issue where links within editable fields were incorrectly highlighted when the editable field itself wasn't focused. This change aligns the testing process with the recent community fix, ensuring accurate link highlighting behavior. It improves the user experience by preventing unintended highlighting.
Original PR description
Links that are the first deep node in an editable are highlighted even when the editable is not focused which was fixed in the community PR. Adapt the test to reflect the correct behavior opw-5436106
**Description:** - The [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91) ir.actions.act_window menus from the sale_account_accountant module were triggering MemoryError on databases with millions of sale.order.line records. These actions call [_search_invoice_to_be_issued and _search_deferred_revenue](https://github.com/odoo/enterprise/blob/master/sale_account_accountant/models/sale
Original PR description
**Description:** - The [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91)…
**Description:**
- The [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91)
ir.actions.act_window menus from the sale_account_accountant module were triggering MemoryError on databases with millions of sale.order.line records. These actions call [_search_invoice_to_be_issued and _search_deferred_revenue](https://github.com/odoo/enterprise/blob/master/sale_account_accountant/models/sale_order_line.py#L17-L29)
which iterate over all lines and access the non-stored computed fields [qty_delivered_at_date](https://github.com/odoo/odoo/blob/master/addons/sale/models/sale_order_line.py#L905) and [qty_invoiced_at_date](https://github.com/odoo/odoo/blob/master/addons/sale/models/sale_order_line.py#L985).
- On similar lines, two additional menus—[Bill To Receive and Billed Not Received](https://github.com/odoo/enterprise/blob/19.0/purchase_accountant/views/purchase_order_line_views.xml#L61-L78)
were introduced from the purchase_accountant module. These menus were also triggering MemoryError on databases with a large number of purchase.order.line records. These actions call [_search_prepaid_expense and _search_bill_to_receive](https://github.com/odoo/enterprise/blob/19.0/purchase_accountant/models/purchase_order_line.py#L17-L29) which iterate over all lines and access the non-stored computed fields [qty_invoiced_at_date](https://github.com/odoo/odoo/blob/19.0/addons/purchase/models/purchase_order_line.py#L180) and [qty_received_at_date](https://github.com/odoo/odoo/blob/19.0/addons/purchase/models/purchase_order_line.py#L234).
- To resolve this, we refined _get_accrual_domain to include only lines within a one-year range, from the given accrual date (or today) back to one year earlier, and used split_every in the accrual searches to process the recordset in chunks.
```
matu_3625797_19.0=> select count(*) from sale_order_line;
count
---------
2228032
(1 row)
matu_3625797_19.0=> select count(*) from purchase_order_line;
count
--------
581637
(1 row)
```
**Traceback1:**
```
2025-12-03 07:02:25,973 9344 ␛[1;31m␛[1;49mERROR␛[0m matu_3306966_19.0 odoo.addons.base.maintenance.migrations.base.testsodoo.upgrade.base.tests.test_mock_crawl: Adding menu ('sale_account_accountant.menu_sale_order_line_accrual_to_bill_action', 1295, 'Accounting > Review > Sales > Invoices To Be Issued', 2690) to the failing menus
Traceback (most recent call last):
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 644, in mock_view_list
return self.mock_view_tree(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 655, in mock_view_tree
self.mock_web_read_group(model, view, domain, group_by, fields_list, limit_group=5)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 713, in mock_web_read_group
data = model.web_read_group(domain, [groupby], aggregates, limit=limit)["groups"]
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 397, in web_read_group
groups, length = self._formatted_read_group_with_length(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 465, in _formatted_read_group_with_length
groups = self.formatted_read_group(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 830, in formatted_read_group
groups = self._read_group(
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 33, in _read_group
return self._read_group_for_accrual(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/enterprise/19.0/account_accountant/models/analytic_mixin.py", line 21, in _read_group_for_accrual
return super()._read_group(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 1904, in _read_group
query = self._search(domain)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5361, in _search
domain = domain.optimize_full(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 445, in optimize_full
return self._optimize(model, OptimizationLevel.FULL)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in _optimize_step
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in <genexpr>
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 957, in _optimize_step
domain = self._optimize_field_search_method(model)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in _optimize_field_search_method
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in OR
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 595, in apply
children = cls._flatten(items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in <genexpr>
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in <genexpr>
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1921, in determine_domain
return determine(self.search, records, operator, value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 28, in _search_invoice_to_be_issued
ids = [line.id for line in so_lines if line.qty_invoiced_at_date < line.qty_delivered_at_date]
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 28, in <listcomp>
ids = [line.id for line in so_lines if line.qty_invoiced_at_date < line.qty_delivered_at_date]
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1737, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1908, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/base_automation/models/base_automation.py", line 907, in _compute_field_value
return _compute_field_value.origin(self, field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/odoo/19.0/addons/sale/models/sale_order_line.py", line 989, in _compute_qty_invoiced_at_date
line.qty_invoiced_at_date = line.qty_invoiced
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1693, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1600, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
**Traceback2:**
```
2025-12-03 07:02:30,098 9344 ␛[1;31m␛[1;49mERROR␛[0m matu_3306966_19.0 odoo.addons.base.maintenance.migrations.base.testsodoo.upgrade.base.tests.test_mock_crawl: Adding menu ('sale_account_accountant.menu_sale_order_line_accrual_deferred_revenues_action', 1296, 'Accounting > Review > Sales > Invoiced Not Delivered', 2691) to the failing menus
Traceback (most recent call last):
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 644, in mock_view_list
return self.mock_view_tree(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 655, in mock_view_tree
self.mock_web_read_group(model, view, domain, group_by, fields_list, limit_group=5)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 713, in mock_web_read_group
data = model.web_read_group(domain, [groupby], aggregates, limit=limit)["groups"]
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 397, in web_read_group
groups, length = self._formatted_read_group_with_length(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 465, in _formatted_read_group_with_length
groups = self.formatted_read_group(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 830, in formatted_read_group
groups = self._read_group(
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 33, in _read_group
return self._read_group_for_accrual(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/enterprise/19.0/account_accountant/models/analytic_mixin.py", line 21, in _read_group_for_accrual
return super()._read_group(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 1904, in _read_group
query = self._search(domain)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5361, in _search
domain = domain.optimize_full(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 445, in optimize_full
return self._optimize(model, OptimizationLevel.FULL)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in _optimize_step
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in <genexpr>
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 957, in _optimize_step
domain = self._optimize_field_search_method(model)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in _optimize_field_search_method
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in OR
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 595, in apply
children = cls._flatten(items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in <genexpr>
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in <genexpr>
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1921, in determine_domain
return determine(self.search, records, operator, value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 21, in _search_deferred_revenue
ids = [line.id for line in so_lines if line.qty_invoiced_at_date > line.qty_delivered_at_date]
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 21, in <listcomp>
ids = [line.id for line in so_lines if line.qty_invoiced_at_date > line.qty_delivered_at_date]
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1737, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1908, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/base_automation/models/base_automation.py", line 907, in _compute_field_value
return _compute_field_value.origin(self, field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/odoo/19.0/addons/sale/models/sale_order_line.py", line 989, in _compute_qty_invoiced_at_date
line.qty_invoiced_at_date = line.qty_invoiced
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1693, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields_textual.py", line 243, in _insert_cache
super()._insert_cache(records, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1600, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
- opw-5238152, opw-5269996
- upg-3306966, 3444833This update ensures that thumbnails are correctly updated on document shortcuts, even when accessed by public users. Previously, public users lacked thumbnail updates due to access restrictions, leading to inconsistencies. This change resolves a bug where public document shortcuts didn't reflect recent updates.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update resolves a visual issue where document signing would intermittently flicker due to automatic zoom adjustments. The fix removes the code that dynamically changed the zoom level, defaulting to 'Automatic zoom' for a smoother signing experience. This improves user satisfaction and prevents a distracting visual glitch.
Original PR description
Before this commit, when signing a document the zoom would load with 'Automatic zoom' then less than one second later change to another zoom by the code, e.g. '100%', causing a flickering issue. After this commit, the zoom is not flickering anymore as we remove the code of changing the zoom and make the default the 'Automatic zoom'. task-5461663
This update corrects a technical issue in the Accounts Coverage Report that was incorrectly flagging duplicate report lines. The fix ensures accurate reporting by ignoring lines with identical names and codes, preventing misleading error messages. This improves the reliability of financial reporting data.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
This update fixes an issue where the automated PDF generation for payroll wasn't working when multiple payslips were being processed. The change ensures that PDFs are correctly generated regardless of the number of payslips, improving payroll reporting accuracy. This resolves a previous bug that prevented scheduled PDF generation from completing.
Original PR description
### Issue: When running the scheduled action "Payroll: Generate pdfs" for several payslips, nothing is generated and a traceback can be seen in the logs. ### Steps to reproduce: - Disable scheduled…
### Issue: When running the scheduled action "Payroll: Generate pdfs" for several payslips, nothing is generated and a traceback can be seen in the logs. ### Steps to reproduce: - Disable scheduled action: "Payroll: Generate pdfs" (to avoid side effect in next step) - Refuse all time off for "Anita Oliver" (to avoid side effect in next step) - Create a user for the employee "Anita Oliver" - Link the employee and the user - Create 2 payslips - 1 for "Mitchell Admin" - 1 for "Anita Oliver" - Compute sheet and confirm both payslips - Run scheduled action: "Payroll: Generate pdfs" - Nothing happens ### Cause: The traceback is raised on the line `self._get_document_partner().id` because `_get_document_partner()` can return a recordset. ### Solution: Call `ids` instead of `id`. ### Note: Calling `_get_document_partner()` on a recordset [here](https://github.com/odoo/enterprise/blob/a0729c8d42ca93016b23e331d8f38c1f4fa88f12/hr_payroll/models/hr_payslip.py#L444) seems unexpected as, if only one payslip in the recordset has `self.employee_id.user_id.partner_id` evaluating to `True`, then it will return only this partner, completely ignoring the other part checking `self.employee_id.work_contact_id`. The final code works fine as `_check_create_documents()` is called again individually [here](https://github.com/odoo/enterprise/blob/a0729c8d42ca93016b23e331d8f38c1f4fa88f12/documents/models/ir_attachment.py#L86). opw-5213979 Forward-Port-Of: odoo/enterprise#103749 Forward-Port-Of: odoo/enterprise#101911
8 changes
Enhancements to existing features
This update incorporates the latest Brazilian tax NCM (National Commerce) code requirements. The changes include appending 'DEPRECATED' to expiring codes and adding new codes to ensure accurate tax reporting for Brazilian businesses using Odoo Enterprise. This ensures compliance with current regulations.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
Resolved issues and error corrections
Shopee has updated the API paths they use, which previously were used for testing within our Odoo Enterprise system. This update requires a change to our testing environment to ensure accurate and reliable results. This fix ensures our testing remains aligned with Shopee's current API standards.
Original PR description
Shopee has changed the API path and the original testing API paths are no longer valid.
This update ensures the 'Update Prices' button is only displayed when a pricelist is properly configured in the sales order. Previously, the button was incorrectly shown even without a pricelist, leading to potential pricing errors. This change improves data accuracy and simplifies the sales order process for users.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241812
This update ensures that the rating card feature only appears in portal chatter when a module specifically requests it. Previously, rating cards were displayed even when not intended, impacting user experience. This change improves consistency and avoids unnecessary visual elements.
Original PR description
*: test_mail_full Modules using portal rating can set an `data-display_rating` attribute when calling the portal chatter template to indicate whether they want the rating feature displayed. Currently, only two modules have this attribute set to true: ecommerce and elearning. For other modules that don't set this attribute, even if there is a rating, such as when rating a ticket in the helpdesk module, we don't want the rating card feature to be shown in portal chatter. This change ensures that the feature is only available if the module requests it. task-5347848
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup steps, the system now ensures the API call is fully processed before attempting to mock it, preventing delays or errors. This resolves compatibility issues with recent Chrome versions.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/odoo#243280
This update fixes a potential issue with Odoo tours that use the Clipboard API. By ensuring the mocking happens before the API call, the system now correctly handles browser permissions and avoids delays or errors, particularly with recent Chrome updates. This improves the reliability of tours in headless environments.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update resolves a validation error in Odoo Studio that occurred when users tried to add help tooltips to fields in the Contacts list view. The fix adds a necessary attribute to the field definition, allowing for proper customization and preventing the validation error. This ensures Odoo Studio users can configure helpful guidance for their data entries.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357 Forward-Port-Of: odoo/odoo#240261
This update resolves a bug in the website event booth registration tour that caused it to fail. The fix makes the tour more intuitive, mirroring the manual process and improving the user experience. It also streamlines the code for better readability and maintainability.
Original PR description
In this commit, we fix the tour webooth_exhibitor_register It stucks when click on OpenWood Demonstrator 2 because the trigger is not relevant. A user should never be able to click on an invisible input. So in tour, it's the same. Instead of click on div and then invisible input, click on label as you do when you run tour by hand. I'm taking advantage of this commit to remove trivial :enabled on button (implicit) and to change programmatic **run** to declarative **run** to use Hoot event and make them more readable.
4 changes
Enhancements to existing features
This update addresses a technical issue related to how Odoo handles record deletions, specifically concerning cascade deletes in the database. By proactively checking for related records, the system avoids errors and improves performance when dealing with removed messages, notifications, or activities. This ensures a more stable and reliable user experience.
Original PR description
In order to be defensive we have to check records linked to messages, notifications or activities exist before checking related information like display_name, or even to skip them in various flows. This happens notably due to DB-level cascade deletion that does not remove side records linked through (model, res_id) pairs. It implies some additional exist queries. Task-5138556 Forward-Port-Of: odoo/enterprise#101185
Resolved issues and error corrections
This update resolves an issue where scheduled notifications and other related messages continued to appear after records were deleted. The fix prevents notifications from being sent to non-existent records, clearing up confusing error messages and improving the user experience. It ensures that deleted records don't cause disruptions in notification processing.
Original PR description
RATIONALE When a cascade delete occurs in DB, ORM methods are not called. More specifically loosely connected records using res_model / res_id pair are not removed when unlink override exists. SPECIFICATIONS Fix various use case in mail * notifications sent for scheduled messages; * failure notifications management; * activities mark as done; Task-5138556 Forward-Port-Of: odoo/odoo#233071
This update resolves an issue where incorrect data was appearing in the Mexican ‘Trial Balance’ accounting report. The problem stemmed from hardcoded values in the report configuration, which has now been corrected by removing a redundant ‘balance’ column. This ensures accurate reporting for Mexican companies.
Original PR description
With l10n_mx company: 1. Add the balance column to the “Trial Balance” accounting report 2. Create a journal entry for the date 12/31/2024 for 5000 as a credit on the account 119.01.01 VAT due and balance it with 5000 as a debit on another account 3. Open the Trial Balance report and click on the “Month 13” filter as well as the year 2024. 4. Notice that the “Month 13” column has some numbers when there should not be a number in that column 5. Delete the balance column from the “Trial Balance” accounting report and notice that the numbers now appear in their appropriate columns. In the _l10n_mx_set_options_month_13 the way to find the initial value, month 13 and end value columns was hardcoded. opw-5222117
This update corrects an issue where the stock quantity report displayed incorrect quantities after stock moves were updated. The fix ensures the report accurately reflects actual stock levels by using the correct quantity calculation method. This improves the reliability of inventory reporting.
Original PR description
**Current behavior:** The `report.stock.quantity` view display incorrect quantities for products with stock moves which had their `quantity` field updated. **Expected behavior:** The report shouldn't…
**Current behavior:** The `report.stock.quantity` view display incorrect quantities for products with stock moves which had their `quantity` field updated. **Expected behavior:** The report shouldn't add the delta quantity to data points prior to the updated stock move line date. **Steps to reproduce:** Receive a different amount of product than expected after a purchase order: - Create a purchase order for a product - Receive higher quantity than expected by PO - Look at the forecast view for that product - Observe overestimated quantity in report_stock_quantity view prior to the delivery date OR Update quantity in a stock move line marked as 'done': - Find a product with existing stock move lines - Update quantity of a stock move line with a bigger value - Look at the forecast view for that product - Observe overestimated quantity in report_stock_quantity view prior to stock move line date **Cause of the issue:** The `report_stock_quantity` view is dependent on `stock_move.product_qty` and `stock_quant.quantity`. When quantities of stock move line related to a stock move are updated, the `stock_quant.quantity` field is also updated, while `stock_move.product_qty` is not from version 17 and up. This difference cause erratic behaviour in the view. **Fix:** We could refactor the report_quantity_view and use the `stock_move.quantity` field instead of `stock_move.product_qty`, as the first one is computed as the sum of the stock move line quantities. Task: [5003444](https://www.odoo.com/odoo/project/49/tasks/5003444)