Tuesday, December 9, 2025
9 changes · saas-18.4
Enhancements to existing features
This update enables users to send multiple attachments when sending invoices through the Peppol network. The attachments are now embedded within the invoice XML file using a standard 'AdditionalDocumentReference' tag, improving the efficiency of electronic invoice exchange. This enhancement aligns with Peppol standards and simplifies document handling.
Original PR description
[IMP] account: multiple embed files peppol This commit allows user to send multiple attachments through peppol. The attachments will be embedded into the xml under the `AdditionalDocumentReference` tags task-5103539 Forward-Port-Of: odoo/odoo#238662 Forward-Port-Of: odoo/odoo#234339
Resolved issues and error corrections
This update fixes a discrepancy in how invoices are recorded for Vietnamese accounting. Previously, the system incorrectly treated 'Unearned Revenue' (account 3387) as a payable account, leading to inaccurate balance sheet reporting. This change ensures 'Unearned Revenue' is correctly classified as a current liability, improving financial accuracy.
Original PR description
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the…
When posting an invoice, the system creates: - Journal Entry: Dr 131 (Receivable) / Cr 511 Then the system creates a deferral entry: - Deferral entry: Dr 511 / Cr 3387 (Payable) Falsifying the Balance sheet report, in the accounts receivable and accounts payable indicators The issue was that account 3387 was configured as `Payable`, which caused the system to generate both Receivable (131) and Payable (3387) for the same partner. This is incorrect because account 3387 represents "Unearned Revenue", which is a current liability, not a payable account. By changing the account type from `Payable` to `Current Liabilities`, the deferral entry now correctly reflects that 3387 is a current liability account, preventing the incorrect reconciliation behavior where both receivable and payable entries were created for the same partner. After this fix: - Entry: Dr 131 (Receivable) / Cr 511 - Deferral: Dr 511 / Cr 3387 (Current Liabilities) 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#238807 Forward-Port-Of: odoo/odoo#237493
This update fixes an issue where timesheet values were incorrectly displayed in project updates. A recent change in how the system handles time conversions led to an extra conversion step, resulting in inaccurate day counts. This fix ensures that timesheet hours are now correctly converted and displayed in project updates, providing accurate reporting.
Original PR description
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open…
Similar to: 0104cee Steps to reproduce: -------------------- 1. Install hr_timesheet 2. Create a new project and a task 3. On the task, add a timesheet line with some time (e.g., 16 hours) 4. Open the project dashboard > create a new project update > observe the timesheet time 5. Go to Timesheets > Configuration > Settings 6. Set "Encoding method" to "Days/Half-days" 7. Reopen the project dashboard > create another project update > observe the timesheet time again Issue: ------ Incorrect value displayed in the Timesheets. (e.g., 16 Days instead of 2 Days) Cause: ------- After commit 28b69da, the UoM model was restructured, changing how conversions between hours and days are computed. https://github.com/odoo/odoo/blob/aeda822db05b218fd1271c7666307950b7a98512/addons/hr_timesheet/models/project_project.py#L137-L143 The `total_timesheet_time` value is now already stored in the final unit (e.g., days). Whenever a new project update is created, the division in `create()` performs an unnecessary second conversion on an already converted value, causing the incorrect display. https://github.com/odoo/odoo/blob/583bacdc8ad2b87b99b11d1e12dacf6e42edf22b/addons/hr_timesheet/models/project_update.py#L36-L37 Solution: ---------- This commit ensures accurate conversion of timesheet values between hours and days. opw-5184077 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237532
This update resolves an issue preventing the IoT Box upgrade script from correctly updating the Odoo configuration file. By using sudo and installing pip requirements as the Odoo user, the script now functions reliably, ensuring a smoother and more secure upgrade process. This improves the stability of the IoT Box deployment.
Original PR description
On 25.06 images, the IoT Box upgrade script can't update `odoo.conf` file (modules to load) as odoo user running sed doesn't have enough permissions. We now run this command with sudo then ensure the ownership of the file is still `odoo:odoo` We now also ensure that pip requirements are installed for user `odoo` instead of root. Task: 5383045 Forward-Port-Of: odoo/odoo#238553
This update resolves an issue preventing clients from exporting their bills. Previously, bills weren't being generated, leading to a missing export option. This change ensures that clients can now successfully download their bill documents.
Original PR description
After this PR: https://github.com/odoo/odoo/pull/235934, clients can't export bills because they were never sent. Allow clients to export bills. Related feedback on task-4946367 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a critical issue where Swiss account translations were missing, particularly for payroll documents. This ensured all official documents were consistently translated, preventing mixed language content and maintaining compliance standards. The fix was made in collaboration with multiple Odoo team members.
Original PR description
Some Swiss account translations were missing, mainly related to payroll. This resulted in payroll documents having mixed languages, which is not acceptable for official documents. opw-5343680 Forward-Port-Of: odoo/odoo#239122 Forward-Port-Of: odoo/odoo#239001
This update prevents a potential memory error that could occur when installing the HR Timesheet module on databases with many existing accounting records. The change ensures that new data fields are created efficiently, improving the installation process and preventing performance issues. This enhances the stability and speed of adding the HR Timesheet to existing Odoo databases.
Original PR description
Description ----------- On databases with a large count of existing `account.analytic.line` records, installing modules like `hr_timesheet`, which adds compute stored or related stored fields to this model can trigger a memory error due to the volume of records that need to be recomputed. This commit creates the columns manually with the correct default value that is inferred from the state and implementation of said fields. Reference --------- opw-5234833 opw-5255382 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239024
This update fixes an issue where rental receipts weren't being validated correctly when scanned through the barcode app. The change ensures that rental receipts are handled as partial receipts, even when linked to deliveries, preventing validation errors. This improves the reliability of the rental process.
Original PR description
Steps to reproduce: - Enable Rental pickings - Create a rental for a product, for 4 quantity - Process the delivery - Open the barcode app and open the reception - Scan the product once and validate…
Steps to reproduce: - Enable Rental pickings - Create a rental for a product, for 4 quantity - Process the delivery - Open the barcode app and open the reception - Scan the product once and validate Issue: The receipt is validated without issues nor warning, despite being incomplete. This is due to a bad mix of two changes: - #60801, which always sets the rental receipt as return of the delivery - #48788, which removes the backorder check for returns in barcode For regular returns made in barcode, it makes sense to avoid the backorder check, as from here we're processing a full picking return and we'd have the confirmation pop every time. However, things are different for rental receipts, as despite them being set as returns of the delivery, they're proper receipts that need to handle the partial receipt. To avoid the issue, rather than removing the backorder check whenever there's a return linked to the picking, now also checks that there isn't a rental order linked to the picking. opw-5265874 Forward-Port-Of: odoo/enterprise#101387
This update fixes a bug in the Mexican Point of Sale (POS) localization that caused incorrect invoices when refunds with global discounts were processed. The fix prevents refunds from exceeding the original order total, ensuring accurate invoice generation for Mexican businesses. This resolves a potential invoicing issue and improves data integrity.
Original PR description
When refunding an order that originally had a global discount, if you didn't refund the discount, the refund total amount would exceed the original order total. This would cause issues when trying to…
When refunding an order that originally had a global discount, if you didn't refund the discount, the refund total amount would exceed the original order total. This would cause issues when trying to generate a global invoice for the mexican localization. Steps to reproduce: ------------------- * Activate the global discount option in any PoS * Open PoS and make a sale with a global discount * Refund the sale without including the discount * Go to the backend * Go to the order list and select the 2 orders you made * Now try to create a global invoice > Observation: The global invoice is in error because the negative lines cannot be distributed correctly. Why the fix: ------------ To avoid this issue with the global invoice we simply prevent the user to generate a refund with a greater amount than the original order. We only apply this limit to the mexican localization because it's the only module that is affected by this issue. Other localizations can still refund without restrictions even if this work flow does not really make sense. opw-4899501 Forward-Port-Of: odoo/enterprise#100780 Forward-Port-Of: odoo/enterprise#93101