Friday, November 28, 2025
37 changes · 19.0
New functionality added to Odoo
This update introduces the ability to generate and manage electronic delivery guides (e-Remitos) required for businesses in Uruguay. It integrates with the EDI system, streamlining stock picking and ensuring compliance with local fiscal regulations. Users can now create e-Remitos directly within Odoo, automating the delivery process.
Original PR description
This pull request introduces a new Odoo module, which adds support for compliant electronic delivery guides (e-Remitos) for Uruguay, integrating with the EDI system and enhancing stock picking…
This pull request introduces a new Odoo module, which adds support for compliant electronic delivery guides (e-Remitos) for Uruguay, integrating with the EDI system and enhancing stock picking operations. The main changes include configuration for managing and generating e-Remitos according to Uruguayan fiscal requirements. **Steps to create an e-Remito** 1. Install l10n_uy_edi_stock 2. Create a new delivery order. 3. Select a value for the field "Type of Operation". This will indicate that we are creating the electronic document, and also add a tab named "UY EDI" with some configurations for the e-Remito. <img width="1231" height="585" alt="image" src="https://github.com/user-attachments/assets/c4c0baa8-8f9b-4453-b0c0-ce1b1503c536" /> <img width="1211" height="565" alt="image" src="https://github.com/user-attachments/assets/c827f787-27ed-4d55-a660-42a6b617e7df" /> The field "Addenda and disclosures" works as in invoices, the user will be able to select the addenda to add to the e-Remito report. The field "EDI Reference" is used to indicate that the e-Remito is a correction of another, so it will suggest previous e-Remitos made for the same partner, and it will add "Correction of e-Rem XXX" on the addenda. 4. Validate the delivery order and click on "Create Delivery Guide" button. This will send the document to DGI for validation and add the PDF returned by Uruware. <img width="1705" height="618" alt="image" src="https://github.com/user-attachments/assets/8bb36b08-ab08-4240-b3bb-f593a7f2a462" /> Odoo Task 1334 Adhoc Task 53147 Forward-Port-Of: odoo/enterprise#99676 Forward-Port-Of: odoo/enterprise#89706
This update adds the ability for users to send sign requests directly through WhatsApp. A new WhatsApp template setting allows customization of messages, and a dedicated button in the Send Request wizard facilitates this communication channel. This expands how users can initiate digital signatures, increasing convenience and flexibility.
Original PR description
Implemented a new feature that allows users to send sign requests via WhatsApp. A new global setting has been added in the Sign app configuration to let users define a WhatsApp message template for sign requests. Once configured, a new button appears in the Send Request wizard, enabling users to send the request via WhatsApp using the selected template. The system uses the defined WhatsApp template to generate the message, including placeholders such as recipient name, document title, and signing link. If no template is configured, the WhatsApp button remains hidden. This enhancement improves flexibility and expands the available communication channels for collecting digital signatures. task-5079248
Enhancements to existing features
This update enables the IoT box to function correctly by allowing HTTP requests instead of HTTPS, simplifying setup and avoiding certificate requirements. Additionally, a warning message is displayed when HTTP requests to the Blackbox fail, providing better visibility into potential issues. This enhances the reliability of IoT integrations within the POS system.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/237147 Since odoo/odoo#235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. In addition, we now show a warning message when a request to the Blackbox via HTTP fails and has to fallback to the websocket. task-5353672 Forward-Port-Of: odoo/enterprise#100469 Forward-Port-Of: odoo/enterprise#100331
This update enables the IoT box to function correctly by allowing it to use HTTP requests over the local network (LNA) instead of requiring a secure HTTPS connection. This change simplifies the setup process and ensures consistent performance for our IoT devices.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/100331 **This PR contains 2 commits:** - **[IMP] iot_base: allow use of LNA for IoT requests** Chromium 142 added support for HTTPS -> HTTP…
Enterprise PR: https://github.com/odoo/enterprise/pull/100331 **This PR contains 2 commits:** - **[IMP] iot_base: allow use of LNA for IoT requests** Chromium 142 added support for HTTPS -> HTTP requests on the local network (Local Network Access). This commit adds a flag to the IoT longpolling class to enable LNA support. The flag forces all requests to use HTTP even in an HTTPS environment. It also sets the `targetAddressSpace` option to `local` in the `fetch` request. - **[IMP] point_of_sale: use_lna support for IoT requests** Since https://github.com/odoo/odoo/pull/235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. task-5353672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237340 Forward-Port-Of: odoo/odoo#237147
This pull request enhances the Odoo website builder with several UI improvements, including clearer controls for background images and videos, fixes for dark mode compatibility, and refinements to the page editor experience. These changes improve usability and ensure a consistent look and feel across different themes and device settings.
Original PR description
This pull request adds remove buttons for background images and videos, fixes several dark mode issues in the editor, and includes a few small UI improvements throughout the website builder. task-5104004 Forward-Port-Of: odoo/odoo#236201
This update enhances the accuracy of follow-up reporting across key Odoo modules (Client Portal, PoS, and Follow-up Report) by ensuring invoices and related entries are correctly filtered. This prevents irrelevant invoices from appearing in follow-up reports and creates a more consistent user experience.
Original PR description
This commit implements multiple improvements around the `no_followup` functionality to ensure misc entries and invoice-related moves behave consistently across Follow-up Report, Client Portal, and PoS. Main changes: -Removed default journal filters from the Follow-up Report for a cleaner view. -Display the “No Follow-up” field on miscellaneous entries whenever at least one line impacts a receivable account. -Client Portal only shows invoices that are meant for follow-up. -PoS balance includes entries that should be followed up. -“Settle Invoices” lists only invoices that require follow-up. Impact: -Avoids showing invoices that should not appear in follow-up flows. -Makes the experience more consistent across Follow-up report, Client Portal, and PoS. Related enterprise PR: https://github.com/odoo/enterprise/pull/100685 task-5149502
This update focuses on refining the user experience within the Odoo Sign app. The changes include UI adjustments and functional enhancements designed to improve usability and streamline the signing process. These improvements aim to make the sign app more intuitive and efficient for users.
Original PR description
This task aims to enhance the user experience by refining both the UI and functionality of the sign app. task-5169331
This update prepares Odoo to efficiently store and access sales commission achievement data, which was previously generated on-the-fly. For large systems, this change allows for 'materializing' the achievement data to significantly speed up report generation times, improving overall performance.
Original PR description
This commits aims to ease the possibility to materialize the achievements. The achievement table was a report built on the fly. Several commits were introduced to speed up the performances but on big systems with thousands of invoices, reading the achievements takes a few seconds. On big databases, it may be needed to materialized the achievement view to speed up reads. This commit reorganize the code to ease the materialization in a simple override commit. task-5170644
Resolved issues and error corrections
This update resolves a validation error that occurred when creating new offer templates for employees with existing work entries. The fix ensures the system correctly identifies existing contracts, preventing duplicate entries and improving data accuracy. This change ensures a smoother process for managing employee offers.
Original PR description
Steps to reproduce the bug: 1. install hr_contract_salary_payroll 2. check "My US Company" 3. go on "Work Entries", then click on the arrow to view the next month. -> This will generate work entries…
Steps to reproduce the bug: 1. install hr_contract_salary_payroll 2. check "My US Company" 3. go on "Work Entries", then click on the arrow to view the next month. -> This will generate work entries for the next month 4. Go back to employees / Troy Cruz / Offers (smart button) -> You should be on the form view of a new offer. Do not save it. 5. Change the contract template to (e.g.) Experienced Developer -> A validation Error should appear The validation error would tell us that we are trying to set a new contract to the employee, but the employee already had a running contract. This happens because `self.employee_id` would be set to false just after the write of it's version's `contract_date_end`: https://github.com/odoo/enterprise/blob/9ea4c1382a75024acacba7af1529d0c5cc762827/hr_contract_salary_payroll/models/hr_contract_salary_offer.py#L78C1-L78C7 This only happens when there are work entries after the specified end date. This is why we had to look at the next month's work entries. The problematic code gets rolled back at some point, but `self.employee_id` stays empty if we don't save the form, since self is a `newId` in this case, which is not stored in the DB (and thus not rolled back) The issue was that the context was supposed to have the `salary_simulation` key present, since we are doing a salary simulation. But, the backend would still try to unlink the work entries of current_version during the simulation. Which is not needed and causes `self.current_employee_id` to be set to `False` The context variable and a check before `_remove_work_entries()` has thus been added to fix that. task-5207567
This update resolves a validation error that occurred when changing a contract template on a new offer, specifically when work entries existed for the next month. The fix ensures the system correctly handles salary simulations and prevents incorrect contract assignments. This improves data accuracy and prevents users from creating conflicting contracts.
Original PR description
Steps to reproduce the bug: 1. install hr_contract_salary_payroll 2. check "My US Company" 3. go on "Work Entries", then click on the arrow to view the next month. -> This will generate work entries…
Steps to reproduce the bug: 1. install hr_contract_salary_payroll 2. check "My US Company" 3. go on "Work Entries", then click on the arrow to view the next month. -> This will generate work entries for the next month 4. Go back to employees / Troy Cruz / Offers (smart button) -> You should be on the form view of a new offer. Do not save it. 5. Change the contract template to (e.g.) Experienced Developer -> A validation Error should appear The validation error would tell us that we are trying to set a new contract to the employee, but the employee already had a running contract. This happens because `self.employee_id` would be set to false just after the write of it's version's `contract_date_end`: https://github.com/odoo/enterprise/blob/9ea4c1382a75024acacba7af1529d0c5cc762827/hr_contract_salary_payroll/models/hr_contract_salary_offer.py#L78C1-L78C7 This only happens when there are work entries after the specified end date. This is why we had to look at the next month's work entries. The problematic code gets rolled back at some point, but `self.employee_id` stays empty if we don't save the form, since self is a `newId` in this case, which is not stored in the DB (and thus not rolled back) The issue was that the context was supposed to have the `salary_simulation` key present, since we are doing a salary simulation. But, the backend would still try to unlink the work entries of current_version during the simulation. Which is not needed and causes `self.current_employee_id` to be set to `False` The context variable and a check before `_remove_work_entries()` has thus been added to fix that. task-5207567
This update resolves an error that occurred when users attempted to assign multiple stock references of the same name on Reception reports. The fix allows for the correct handling of duplicate references, ensuring the reporting functionality works as expected. This improves the reliability of the sales order fulfillment process.
Original PR description
Currently an error occurs when there are multiple stock references of same name, and user assigns references on Reception report. Steps to replicate: - Install `sale_stock`. - Load Demo data from…
Currently an error occurs when there are multiple stock references of same name, and user assigns references on Reception report.
Steps to replicate:
- Install `sale_stock`.
- Load Demo data from Settings.
- From settings, check `Reception Report`.
- Go to Operations > Reference > S00004 > Duplicate it (from the form view).
- Open Receipts > WH/IN/00002 > Allocation (Smart button) > Click 'Assign All' or the S00004 line.
Error:
```
File "/home/odoo/odoo18/community/addons/stock/report/report_stock_reception.py", line 271, in action_assign
self._action_assign(in_move, out)
File "/home/odoo/odoo18/community/addons/stock/report/report_stock_reception.py", line 343, in _action_assign
in_move._get_source_document()._add_reference(out_ref)
File "/home/odoo/odoo18/community/addons/stock/models/stock_picking.py", line 2102, in _add_reference
self.move_ids.reference_ids = [Command.link(reference.id)]
File "/home/odoo/odoo18/community/odoo/orm/fields_misc.py", line 112, in __get__
raise ValueError("Expected singleton: %s" % record)
ValueError: Expected singleton: stock.reference(3, 19)
```
Cause:
- As the user duplicated the record, there were two records received in the variable `reference` at [1] that caused the expected singleton error.
Solution:
- The methods `_add_reference()` and `_remove_reference()` can now handle multiple reference records.
[1]: https://github.com/odoo/odoo/blob/4b2154870eebcce449f53d8f593386ae6af04a83/addons/sale_stock/models/sale_order.py#L329
sentry-6982131891
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where documents and moves were incorrectly linked across companies in a multi-company setup. By explicitly including the company ID during attachment creation and searching, the system now accurately assigns documents to the correct company, preventing errors and ensuring data integrity. This improves the reliability of financial reporting and move management.
Original PR description
Behavior before: In a multi-company setup, fetching documents could include records from different companies based on VAT numbers. When creating attachments or searching for existing moves, the company ID was not properly considered, leading to incorrect company assignments and failed move creation. Behavior after: Documents and moves are now created and searched within the correct company context by explicitly including the company ID. Root Cause: The company ID was missing in both the attachment creation and the domain used to search for existing moves, causing cross-company mismatches. opw-4929985 Forward-Port-Of: odoo/enterprise#99192
This update resolves an issue where CFDI invoices generated in the Mexico localization were producing incorrect rounding values. The fix involves a refined process for calculating tax amounts and aggregating line items, ensuring accurate CFDI invoice generation. This improves compliance and data integrity for Mexican businesses using Odoo.
Original PR description
- Refactor the CFDI generation using the EDI tax helpers to prevent rounding issues by spreading the amounts according a tolerance of 0.000001. - Aggregate lines before computing the global invoice CFDI. That way, we avoid creating new rounding issues by post-processing the created CFDI. task_id: 5096249 Forward-Port-Of: odoo/enterprise#100373 Forward-Port-Of: odoo/enterprise#99395
This update fixes an issue where search results on the website were not displaying correctly when the search returned more results than a single page could handle. The system now automatically redirects users to the last page of results, ensuring a seamless browsing experience. This improves usability and prevents misleading 'no results' messages.
Original PR description
Scenario: - enable website_studio - go to contact -> open studio -> website - add a listing and open it on website - go to page 2 and search a specific terms with less than 20 results Result: we see "5 results" in the search bar, but no result are shown and the pager is hidden. Cause: the pager is hidden since there is only one page, and we are currently displaying the records of page 2 that do not exist. Fix: if we detect that we are on a page over the last page, redirect to the last page. Eg. if there is 2 pages and we are in page 500, redirect to page 2. opw-5008556 Forward-Port-Of: odoo/odoo#236600 Forward-Port-Of: odoo/odoo#223447
This update significantly improves the speed of the website builder when managing forms and data. Previously, rendering large lists of options took over a second, causing delays. Now, the process is much faster – just a few hundred milliseconds – making the website builder more responsive and user-friendly.
Original PR description
Before this commit, rendering BuilderList with many elements caused noticeable delays. How to reproduce: ======================= - Use a runbot with all demo data - Switch to edit mode in the website…
Before this commit, rendering BuilderList with many elements caused noticeable delays. How to reproduce: ======================= - Use a runbot with all demo data - Switch to edit mode in the website builder - Add a form - Link the form to the Contact model - Add the "State" field Before this commit: The options related to the "State" field took more than one second to render. After this commit: Rendering is several hundred milliseconds faster. Additional commits will follow to further improve the situation. Reason for the slowdown: ======================= BuilderList is not optimized to render several thousand records (about 1900 in this example). This commit addresses the identified bottlenecks to reduce rendering time. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237462
This update restricts the 'Export ZIP' menu option to the invoice list view, addressing an issue where non-sent invoices didn't generate PDFs in the download. While this doesn't fully resolve the PDF generation problem, it improves usability. Further improvements are being considered to optimize performance and provide clearer error messages for non-sent invoices.
Original PR description
- Earlier, when downloading an invoice, invoices that were never sent didn’t have a generated PDF. This happened because the method _get_invoice_legal_documents_all had allow_fallback=False by…
- Earlier, when downloading an invoice, invoices that were never sent didn’t have a generated PDF. This happened because the method _get_invoice_legal_documents_all had allow_fallback=False by default. As a result, those invoices returned no attachments, leading to blank pages or missing files in the ZIP download — since the invoices weren’t sent and no fallback was allowed. **Steps to reproduce:** **1:** Go to Invoices **2:** Try to use Export ZIP for any non-sent invoice → you’ll see a blank page **What this patch does:** - It limits the Export ZIP option to the list view only. This doesn’t fix the missing PDF issue, but it makes sense — having “Export ZIP” on every single invoice form view isn’t useful. **Possible improvements to consider:** **1:** Restrict Export ZIP so it’s only available for sent invoices. This would improve performance since sent invoices already have PDFs stored in the filestore. **2:** Allow a fallback for invoices that haven’t been sent, so their PDFs are generated when exporting — but this may cause performance issues if too many non-sent invoices are processed at once. **3:** Instead of showing a blank page for non-sent invoices, show a user-friendly error message. (I noticed this was in the original commit odoo/odoo@c81ab09d0404cc57f48c202360361a1700f060db where this was introduced but was later removed — not sure why.) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234886
This update fixes an issue where POS receipts in non-English languages (like French) didn't accurately show the change amount after an overpayment. The fix ensures that change is correctly calculated and displayed on receipts regardless of the selected language, improving the user experience.
Original PR description
Currently, if a user overpays while using a different language, like French, the receipt does not show the change. **Steps to replicate:** * Install POS with demo data and change language to French .…
Currently, if a user overpays while using a different language, like French, the receipt does not show the change. **Steps to replicate:** * Install POS with demo data and change language to French . * POS > Furniture Shop > Open the register * Select a product, overpay with cash, and validate. **Issue:** * As seen in [1], the `Change` field doesn’t appear when overpaying with cash, even though it shows in the English version. **Root cause:** * The issue happens because changing the language translates the payment line name at [2] (coming from the translated return at [3]). This makes it get included in the sum at [4], which incorrectly subtracts it from the total cash paid and causes the change amount to disappear on the receipt. **Solution:** * Check and add up the payment lines where `is_change` is `false`, and use that instead of relying on the payment line’s name at [3]. **Before:** <img width="830" height="556" alt="image" src="https://github.com/user-attachments/assets/5aaddfe0-fe46-49e1-a877-4fe4de2fb5c7" /> **After:** <img width="931" height="596" alt="image" src="https://github.com/user-attachments/assets/4215d6b8-14b4-4e59-85bc-4d0f43f1d09c" /> [1]: https://www.odoo.com/web/image/91240289?access_token=bef22d9abd1232e34f510648a34f7709d82b848ed852fccdb893f2d1149067abo0x69505fa6&filename=image.png&unique=dd2a62fbe180532cf5cf00c27adc60742f113ddc [2]: https://github.com/odoo/odoo/blob/0581b7fb6abc8e856cedf13254ba1f9d362d6d34/addons/point_of_sale/static/src/app/models/accounting/pos_order_accounting.js#L146 [3]: https://github.com/odoo/odoo/blob/0581b7fb6abc8e856cedf13254ba1f9d362d6d34/addons/point_of_sale/models/pos_order.py#L188-L195 [4]: https://github.com/odoo/odoo/blob/0581b7fb6abc8e856cedf13254ba1f9d362d6d34/addons/point_of_sale/static/src/app/models/accounting/pos_order_accounting.js#L147 opw-5344903
This update corrects a configuration issue within the l10n_fr_hr_payroll module that was causing an 'Invalid Operation' error during payroll processing. The fix involved changing a field name from 'company_20id' to the correct 'company_id', ensuring proper integration with employee data and payroll calculations.
Original PR description
**Steps to reproduce:** 1. Open database with version 19.0 2. Install module l10n_fr_hr_payroll_with_accounting 3. Set `Salary Journal` in: `Configuration` -> `Structure` -> `FR: Employe Carde` ->…
**Steps to reproduce:** 1. Open database with version 19.0 2. Install module l10n_fr_hr_payroll_with_accounting 3. Set `Salary Journal` in: `Configuration` -> `Structure` -> `FR: Employe Carde` -> `Employe Carde` 4. In Payroll app create a payslip for any employee 5. In `structure` Employee cadre be choosen, And also 6. Make sure in salary inputs you make new type and in that in the `availability in structure` has Employee cadre chosen. 7. Now with that Salary Input type click on `Compute sheet` button. 8. The `Invalid Operation` error card will appear. **Description:** After this changes in the [commit](https://github.com/odoo/enterprise/pull/100112/files) you will face another issue for which the steps are there in steps to reporduce. In this [commit](https://github.com/odoo/enterprise/commit/bd2ee7546df3f31c73e8aaae0244ac6767f982fb#diff-5b26ac7c31dbf0286aa98671d7dadb50c117ea2ffb0d52d55a8f4e5d16d7ee88R709) Instade of `company_id` there is `company_20id`, which is not valid field. As in this code: https://github.com/odoo/enterprise/blob/e29aadef1a81c662d9a4d33879b440dbe4390c0b/l10n_fr_hr_payroll/models/res_config_settings.py#L11 we can see that `company_id ` is set as related field for nombre_employes, so I have changed from `company_20id ` to `company_id` **opw**: [5259362](https://www.odoo.com/odoo/project/70/tasks/5259362)
This update resolves an issue where payment validation in the POS system would fail when orders included products with different unit of measures. The fix ensures that a single sale order line is passed during payment validation, preventing a system error and allowing successful payment processing.
Original PR description
**Steps to reproduce:** * Install the **pos_sale** module. * In **Settings**, enable the *Units of Measure & Packagings* option. * Create two products, each using a different **Unit of Measure**…
**Steps to reproduce:** * Install the **pos_sale** module. * In **Settings**, enable the *Units of Measure & Packagings* option. * Create two products, each using a different **Unit of Measure** (e.g., *Unit*, *Hours*), and ensure both are available in POS. * Open the **Sales** app and create a quotation including both products. Confirm the order. * Open the **POS Store** and go to **Quotation/order** options , and select *Created Sale Order* with the option **Settle the order**. * Proceed to the payment screen and attempt to validate the payment. **Observed behavior:** * A **singleton error** is raised when validating the payment for a sale order containing multiple lines with different UoMs. **Cause:** * The code incorrectly passes `self`, which may contain multiple sale order lines, leading to a singleton expectation failure. **Fix:** * Pass a single sale order line to avoid the singleton error during payment validation. --- opw-5251840 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue that occurred when users edited sale order lines, specifically replacing combo products. The fix prevents a technical error (IndexError) that arose during the order saving process, ensuring smoother operation for users.
Original PR description
Currently, an error occurs when a user replaces a `combo product` with another product in a sale order line before the order is saved. **Steps to produce:** - Install the `sale_management` module…
Currently, an error occurs when a user replaces a `combo product` with another product in a sale order line before the order is saved. **Steps to produce:** - Install the `sale_management` module with demo data. - Open `sale order`, click `Add a product`, and add a `combo product` (Office Combo). (`Make sure the form is not saved`) - Click on the `combo name` (Office combo x 1) and replace it with another product. **Error:** `IndexError: tuple index out of range` **Root cause:** After PR [1], at [2], when a combo product is replaced before the order is saved, the code attempts to update the combo item lines even though the template type (`product_template_id.type`) is not `combo`. This leads to an update of `product_uom_qty`, which triggers the `_compute_price_unit` method and results in the error at [3]. **Fix:** This commit prevents errors when a user replaces a combo product with another product. [1]: https://github.com/odoo/odoo/pull/194496 [2]: https://github.com/odoo/odoo/blob/47e561bd1f6bc14724d60ebf09a66e458dfd4799/addons/sale/models/sale_order.py#L966-L970 [3]: https://github.com/odoo/odoo/blob/c758b93a57cd98ab76c26c03bd0097f2eef50961/addons/sale/models/sale_order_line.py#L766 sentry-7009976704
This update fixes a technical error that occurred when users attempted to adjust partial payments made through SEPA QR payments in the Point of Sale module. The fix ensures that the system handles these adjustments correctly, preventing a traceback and improving the payment process for business customers. The change restricts the 'Adjust Amount' button to compatible payment methods.
Original PR description
Steps to reproduce: ==================== - Create a SEPA QR payment method (for a BE company). - Create an order and select this payment method. - Manually change the payment amount (partial amount). - Confirm the partial payment. - Click on the "Adjust Amount" button a traceback occurs. Issue: ======= In the XML template, the JS method `sendPaymentAdjust()` was being called, but this method was not defined on the JS side, leading to a traceback when the button was clicked. Fix: ===== - Restricted visibility of the "Adjust Amount" button to payment terminal methods that support adjustment. - Added the missing JS method to handle the call and prevent traceback. Task-5241346 Forward-Port-Of: odoo/odoo#237608 Forward-Port-Of: odoo/odoo#235281
This update corrects a bug where the 'Use Documents' option wasn't correctly configured for LATAM invoices during data loading. The fix ensures that when a LATAM chart of accounts is selected, the system automatically enables this crucial setting, streamlining invoice processing for Latin American businesses. This resolves an issue impacting invoice accuracy and compliance.
Original PR description
### Issue: During the loading of fiscal position data for LATAMs the option "Use Documents" on Journals is not set-up. ### Steps to reproduce: - Install 'l10n_ar' - Settings > Accounting - Make sure…
### Issue: During the loading of fiscal position data for LATAMs the option "Use Documents" on Journals is not set-up. ### Steps to reproduce: - Install 'l10n_ar' - Settings > Accounting - Make sure the "Fiscal Localization" have a value (not Argentina) - Change the "Fiscal Localization" to "Argentine - Generic Chart of Accounts [...]" - Go in Accounting > Configuration > Journals - Click on "Ventas Preimpreso" - The journal don't have "Use Documents" ticked but it should ### Cause: When loading the data, `_get_chart_template_data()` calls `_get_ar_base_res_company()` and `_get_latam_document_account_journal()`. The first one returns the data to change `res.company.account_fiscal_country_id` to `base.ar`. The second one [checks](https://github.com/odoo/odoo/blob/26a5384af0af8fc6e6b5a10bea277f937e2b3481/addons/l10n_latam_invoice_document/models/account_chart_template.py#L12) that [`self.env.company.account_fiscal_country_id.code == "AR"`](https://github.com/odoo/odoo/blob/d985ec2e9b61b5e6c36a278654d526aaa5b512e2/addons/l10n_ar/models/res_company.py#L36) before returning the data to change `l10n_latam_use_documents` to `True`. As `res.company.account_fiscal_country_id` has not been updated, it's not Argentina during the check and `_get_latam_document_account_journal()` returns nothing. ### Solution: When loading the template, we cannot use `res.company.account_fiscal_country_id` to know if we are in LATAM or not. So instead we check on `chart_template`. opw-5221931 Forward-Port-Of: odoo/odoo#237725 Forward-Port-Of: odoo/odoo#236217
This update resolves an issue where price adjustments on lots weren't correctly updating the associated stock move value. The fix maps the `lot_id` from the `stock.move.line` model to the `stock.move` model, ensuring accurate value tracking after price changes. This improves the reliability of inventory valuation.
Original PR description
**Steps to Reproduce the Issue**: 1. Install the following apps in version 19.0 database: * stock_account 2. Go to Settings → enable Lots & Serial Numbers. 3. Open the Inventory app, then go to…
**Steps to Reproduce the Issue**:
1. Install the following apps in version 19.0 database:
* stock_account
2. Go to Settings → enable Lots & Serial Numbers.
3. Open the Inventory app, then go to Products and create a new product
with the following configuration:
* Product Type: Goods
* Track Inventory: By Unique Serial Number
* Inventory tab: Enable Valuation by Lot/Serial
* General Information tab: Create a new Product Category with:
* Costing Method: AVCO (Average Cost)
4. Go to Products → Lots/Serial Numbers.
5. Create a new Lot/Serial Number and select the product you just created, then
click Save.
6. Now update the Cost in the Lot/Serial Number form and click Save again.
7. You will now encounter the trackback error.
**Description:**
In the [commit](odoo@22b9e1a#diff-2623d0e4c393b65afe1c6d00f55af80d19f022aaeb0da0e5e173e37a84138159R42) The `lot_id` is written but in `stock.move` model there is `lot_ids` [field]((https://github.com/odoo/odoo/blob/6496653de3c9bb2a3cde8e38fdda8fb7abe27713/addons/stock/models/stock_move.py#L189)) so it gives error `keyerror`.
Now i have used [`lot_id`](https://github.com/odoo/odoo/blob/9333df06e15134df92efed765cf95db38c0dfede/addons/stock/models/stock_move_line.py#L48) field of `stock.move.line` for mapping the `move_id` so that after price adjustment correct move value is set.
opw-[5266457](https://www.odoo.com/odoo/project/70/tasks/5266457)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where Verifactu invoices generated from Point of Sale orders were incorrectly using 'F1' instead of 'F3' after invoicing. The change ensures that orders previously invoiced as simplified versions retain the correct 'F3' invoice type, aligning with Spanish tax regulations. This prevents potential discrepancies with tax authorities.
Original PR description
To reproduce ------------- 1. Install `l10n_es_edi_verifactu_pos`, and select the ES company 2. Make an order in PoS with a price less than 400, and don't invoice it. 3. Close the PoS session, then…
To reproduce ------------- 1. Install `l10n_es_edi_verifactu_pos`, and select the ES company 2. Make an order in PoS with a price less than 400, and don't invoice it. 3. Close the PoS session, then go to PoS > Orders, and select the previously made order 4. It will have a Verifactu generated document with invoice type as 'F2', which is correct since it's a simplified order. 5. Click invoice to invoice the order; the invoice is no longer simplified. Notice now that the new Verifactu document has an invoice type of 'F1', which corresponds to a normal non simplified invoice. However, since the new invoice is replacing an old simplified one, it should be of type 'F3' instead. The fix ------- We add a new field on the `pos.order` model to retain if that order was previously invoiced with a simplified invoice, in that case, we set its type to 'F3' instead of 'F1' when fully invoicing it. Sources: -------- Difference between 'F1', 'F2', and 'F3' invoice types: https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/preguntas-frecuentes/procedimientos-facturacion.html?faqId=bdbd20022fe06910VgnVCM100000dc381e0aRCRD opw-5343973
This update ensures analytic line values are calculated using the company's currency, resolving discrepancies caused by using the journal item's currency and rounding factors. This change improves the accuracy of financial reporting and balances, particularly when dealing with multi-currency transactions.
Original PR description
Analytic line values are determined by the balance of a journal item, not their amount_currency. https://github.com/odoo/odoo/blob/8258ddf12ed6c0495628f7a480d1e2424e756540/addons/account/models/account_move_line.py#L3230-L3237 However, the journal item's currency is referenced when creating an analytic line. This can cause discrepancies when the journal item's currency has a different rounding factor (`rounding`). [Ticket link](https://www.odoo.com/odoo/unassigned-tasks/5171681) opw-5171681 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237129 Forward-Port-Of: odoo/odoo#234797
This update fixes an issue where changes to a sales order's quantity weren't correctly reflected in the procurement process when using multi-step delivery routes. Specifically, the system was only considering the initial quantity moved, failing to account for returns. This ensures accurate inventory management and procurement quantities are calculated, preventing discrepancies.
Original PR description
Steps to reproduce: - Enable Multi-step routes & set warehouse to 3 steps delivery - Make a SO for 5 qty of a stored product - Validate the PICK - Set the SO line qty to 3 & save - Set the SO line…
Steps to reproduce: - Enable Multi-step routes & set warehouse to 3 steps delivery - Make a SO for 5 qty of a stored product - Validate the PICK - Set the SO line qty to 3 & save - Set the SO line qty to 5 & save Issue: While the first update to 3 creates a return PICK from Packing Zone -> Stock for 2 qty, the second updates does nothing. When checking the outgoing/incoming moves to see which quantity should be set in the procurement, it only considered the outgoing quantity from the first step of the delivery. Which means that the return wasn't taken into account, so since we only compare the new SO line qty to the already moved PICK, there was no difference thus no procurement made. Now, we also consider less strict critera for incoming moves when checking in `strict == False` mode, as this is only used to compute the procurement quantity. opw-5028794 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237609 Forward-Port-Of: odoo/odoo#233796
This update corrects a bug where the tax amount on invoices wasn't accurately calculated after deleting and adding a line. Specifically, removing a taxed line followed by an untaxed line would result in an incorrect tax total. The fix adjusts the system's logic to properly recompute tax amounts in these scenarios.
Original PR description
**PROBLEM** If in an invoice you delete a taxed line, and then add an untaxed line the tax amount might not be up to date. **STEP TO REPRODUCE** 1. create an invoice with 2 lines both taxed. 2.…
**PROBLEM** If in an invoice you delete a taxed line, and then add an untaxed line the tax amount might not be up to date. **STEP TO REPRODUCE** 1. create an invoice with 2 lines both taxed. 2. remove one of the line, and create a new line which is untaxed. 3. confirm the invoice and notice the tax amount is not correct (= to the tax amount with the 2 taxed lines). Be sure to not click on the "journal items" tab, else the bug will not occur. **ISSUE** In _sync_tax_lines(), there is checks to know if we should recompute the tax amount, or keep the old one. We enter the check that checks the changed lines and determine if we should recompute the tax amount. This check doesn't take into account the fact that a line could have been deleted. Because we are in a elif chain, we don't do other checks. **FIX** Moving up in the elif chain the check that test if a base line with tax was removed and recompute the tax amount if that's the case. [opw-5157090](https://www.odoo.com/odoo/project/49/tasks/5157090) Forward-Port-Of: odoo/odoo#237060
This update corrects a reporting issue where planned hours incorrectly included employee leave days and public holidays. The fix ensures that the Timesheet/Planning Analysis report accurately calculates planned hours by excluding time-off and holidays, providing more reliable project time tracking.
Original PR description
**Description** The Timesheet/Planning Analysis report (Timesheets > Planning Analysis) incorrectly calculates planned hours by not excluding employee time-off and public holidays. This results in…
**Description** The Timesheet/Planning Analysis report (Timesheets > Planning Analysis) incorrectly calculates planned hours by not excluding employee time-off and public holidays. This results in leave days being assigned the average daily hours from planning slots and incorrectly attributed to projects. **Steps to Reproduce** 1. Create a planning slot for an employee spanning a full month 2. Add employee time-off (resource.calendar.leaves) during that period 4. Navigate to Timesheets > Timesheets / Planning Analysis report 5. Filter by the employee and date range 6. Observe: Planned hours include leave days, incorrectly attributed to the planning slot's project **Root Cause** The SQL query filters by day of week (weekends) but never queries `resource_calendar_leaves`. While `working_days_count` correctly excludes leaves, the report still generates rows for those leave days and assigns them average hours per day, causing the discrepancy. **Solution** Filter out dates that have employee time-off or public holidays by joining to `resource_calendar_leaves` and excluding matching dates. opw-5027070 Forward-Port-Of: odoo/enterprise#100516 Forward-Port-Of: odoo/enterprise#97657
This update fixes an issue where chart granularity options were limited when no date filter was applied. Now, 'day' granularity is consistently available, and the system efficiently caches these options to avoid unnecessary calculations. This improves chart performance and usability.
Original PR description
## Description Current behavior before PR: - Day granularity was not added when no date global filter was defined. - Charts inserted from graph view with default day granularity behaved incorrectly. When switching from day to week granularity, day would disappear from the available options. - Granularities were recomputed on every call, causing repeated work. Desired behavior after PR is merged: - Day granularity is now added to the available granularities when no date global filter is set. - Granularities are cached per chart, avoiding repeated computation. - Redundant code paths were cleaned up to simplify the logic. Task: [5155481](https://www.odoo.com/odoo/project/2328/tasks/5155481) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a warning to bank statement lines when an analytic distribution is required. Previously, users weren't alerted to this requirement, potentially leading to errors. Now, users will receive a clear warning, guiding them to set up the necessary analytic distribution plan.
Original PR description
When setting the account on a bank statement line, analytic distribution might be required due to a mandatory plan. Before this commit, the user had no idea if the analytic is required or not. After this commit, lines that required analytic distribution will have a warning directing the user to set it. task-5055351 This is a backport of: https://github.com/odoo/enterprise/commit/00396d24114b8747ff73ae60f032b630ce88c7a4 Community PR: https://github.com/odoo/odoo/pull/237368 Forward-Port-Of: odoo/enterprise#100494
This update fixes an issue where the cost of products in POS orders wasn't accurately calculated when using product variants with multiple attribute values. The fix ensures that the correct cost is applied based on the specific variant used in the order, improving order accuracy and financial reporting. This was triggered by a misinterpretation of how BOM lines and product attributes are linked during cost computation.
Original PR description
When you create a product with atleast one variant that has 2 value, and create a BoM for this product that has 2 lines with each line having one of the two values, then create a POS order with one…
When you create a product with atleast one variant that has 2 value, and create a BoM for this product that has 2 lines with each line having one of the two values, then create a POS order with one unit of each variant, the cost of the first line not correctly computed. Steps to reproduce: ------------------- * Create a prodcut P with one attribute A that has two values A1 and A2 * Create a product C with no attribute and a cost of 10$ * Create a BoM for P with two lines: - Line 1: product C, quantity 1, only for attribute value A1 - Line 2: product C, quantity 2, only for attribute value A2 * Open a PoS session * Add Product P with attribute value A1 to the order * Add Product P with attribute value A2 to the order * Validate the order and close the session * Go to the order and check the cost of each line > Observation: The cost are not correct, they should be 10$ and 20$ Why the fix: ------------ Before this fix we were not taking the `bom_product_template_attribute_value_ids` into account when filtering the stock moves to consider for the cost computation. This value represent the attribute values that the product must have for this BoM line to be considered. opw-4765234 Forward-Port-Of: odoo/odoo#236450 Forward-Port-Of: odoo/odoo#225014
This update resolves an issue where editing a statement line with a currency exchange rate would trigger an error. The fix prevents the system from attempting to reconcile exchange moves during edits, allowing users to correctly mark invoices as paid without encountering the 'reconciled' error. This improves the usability of bank statement reconciliation.
Original PR description
When you create a statement line with one currency rate, and you reconcile it with a move with a different currency rate, this creates an exchange move. But when you want to edit the statement line amount, like marking the invoice as fully paid, this raise a UserError, as the Exchange move is reverted and reconciled, which means it throw an error like "You are trying to reconcile some entries that are already reconciled." This commit, fix this behaviour, by excluding the exchange moves from the check process. Linked:https://github.com/odoo/odoo/pull/237367 [opw-5184679](https://www.odoo.com/odoo/my-support-tasks/5184679) Forward-Port-Of: odoo/enterprise#100493
This update fixes an issue where the mobility budget was incorrectly calculated for part-time employees during salary simulations. The system now accurately uses a full-time equivalent for budget calculations, aligning with Belgian regulations. The change also restores the display of mobility budget wages on employee views.
Original PR description
Mobility budget should be computed based on a full time equivalent: https://lebudgetmobilite.be/fr/6-quel-est-le-montant-du-budget-mobilite#te During salary simulation, that is based on work time rate, a payslip is computed and triggers to recompute the version on which the payslip is bas That makes the mobility budget recompute as well, but this time, based on part time wage (e.g.: 2000 instead of 4000 for a mid-time). This PR adds context keys to ensure that during the salary simulation, the Mobility budget is still computed based on a full time equivalent. Also, this PR reintroduces wage with mobility budget on employee view Task-5360844
This update ensures the Sign app meets legal requirements for U.S. companies by notifying users when the sender is based in the U.S. and offering the option to request a paper copy of signed documents. This compliance update protects the company from potential legal issues related to electronic signatures.
Original PR description
Previously, the Sign app did not comply with the ESIGN Act. It now notifies users when the sender company is U.S.-based that they can request a paper copy of a signed document, ensuring ESIGN Act compliance. task-5166918 Forward-Port-Of: odoo/enterprise#100618 Forward-Port-Of: odoo/enterprise#97163
This update ensures that Point of Sale orders in Mexico correctly utilize the customer's CFDI usage setting, rather than defaulting to 'G03'. This fix addresses a previous issue where CFDI usage wasn't being properly applied, ensuring compliance with Mexican tax regulations for PoS transactions.
Original PR description
When making an order in the PoS in Mexico, if the customer has a CFDI usage set on their partner, it should be used for the order instead of the default one. Steps to reproduce: ------------------- * Install l10n_mx_edi_pos * Create a partner with a CFDI usage different than 'G03' * Open the PoS, select the partner and make an order * Validate the order and check the order in the backend > Observation: The CFDI usage is 'G03' instead of the one set on the partner. opw-5018288 Forward-Port-Of: odoo/enterprise#98607
This update ensures that when users modify the serial number of a product during a delivery process (e.g., changing a lot ID), the change is accurately saved and used. Previously, the system reverted to the original serial number, causing inconsistencies. This fix resolves a critical issue impacting order fulfillment accuracy.
Original PR description
In the stock.picking form, we can modify the `lot_id` of the product we deliver to the customers. Since 19.0, the edited `lot_id` wasn't saved properly, leading to the original `lot_id` being used…
In the stock.picking form, we can modify the `lot_id` of the product we deliver to the customers. Since 19.0, the edited `lot_id` wasn't saved properly, leading to the original `lot_id` being used when confirming the delivery. ### Steps to reproduce: 1. Install the Stock (`stock`) app. 2. Enable the *Lots & Serial Numbers* traceability settings. 3. Create a product tracked *By Unique Serial Number* 4. Create a quotation with a line that includes the product tracked by unique serial number 5. Confirm the quotation 6. Click on the *Delivery* smart button 7. Display the *Serial Numbers* column in the list view 8. Update the Serial Number of the product (remove the original serial number, then add a new one) 9. Click *Validate*, or *Save manually* and reload the page 10. The Serial Number set in step 8 is replaced by the original one The condition at the start of the `StockMove._set_lot_ids` method was preventing the `stock.move.line` from being updated. In the context of this issue, at the moment of execution, the `stock.move.line` still has the original `lot_id`, but it should be updated to the `lot_id` set by the user. This update does not occur because of the condition. https://github.com/odoo/odoo/blob/af4365421bc7ba990420789c12c98270d723fa1a/addons/stock/models/stock_move.py#L606-L607 After applying this fix, the serial number set by the user is correctly saved and used when clicking the *Validate* button on the stock picking form. opw-5169690
This update fixes a bug that prevented video auto-focus during call joins and mid-call camera activations, particularly in different call layouts (mobile, chat, PiP). It now ensures a smooth video experience for all users, resolving layout overflow issues and improving call usability.
Original PR description
Before this PR: - Auto focus on a participant’s video when joining a call did not trigger due to a typo in the find() callback, causing it to always return undefined. - The video-focus-on-join…
Before this PR:
- Auto focus on a participant’s video when joining a call did not trigger due
to a typo in the find() callback, causing it to always return undefined.
- The video-focus-on-join feature was only conditioned on the call component
not being shown in the Discuss desktop view. This does not handle the cases
when call is in meeting view or PiP view
- The video-focus-on-join feature only ran at call join time. In one-one calls,
when the other participant turned on their camera after the call started,
their video was not focused even when auto-focus was enabled
- When any participant had video enabled, the call component could overflow
the chat window, causing an unwanted horizontal scrollbar.
This PR:
- Fixes the find() callback typo so the active streaming session is correctly
detected and auto-focused when joining a call.
- Updates the video-focus-on-join conditions to support all intended layouts:
1. mobile (small UI)
2. chat window
3. PiP window.
- Extends the video-focus-on-join feature: in one-one calls, when the other
participant turns on their camera mid-call, their video is now automatically
focused (when auto-focus is enabled and the above layout conditions are met).
- Fixes layout overflow by preventing the call component from exceeding the
chat window width.
Before / After fix (overflow issue):
<img width="300" height="640" alt="image" src="https://github.com/user-attachments/assets/a291949f-5a82-4c0c-a3c3-d31078e2e62e" /> <img width="300" height="640" alt="image" src="https://github.com/user-attachments/assets/f8405be4-e200-416b-b582-ecc057a0f9a3" />
part of task-[5227387](https://www.odoo.com/odoo/project/1519/tasks/5227387)