Daily updates from Odoo
Wednesday, January 7, 2026
41 changes · saas-18.2
Enhancements to existing features
This update adjusts how Odoo handles tax exemption reasons on UBL invoices. Previously, a specific reason was always required, but now it's optional. When a reason isn't provided, a default reason is automatically applied based on the tax category, ensuring compliance with UBL standards.
Original PR description
According to the ubl documentation the tax exemption reason code is not always required on the document. But when no exemption reason code is given, we have a default exemption reason for the appropriate tax categories. task: 5223145 Forward-Port-Of: odoo/odoo#233770
Resolved issues and error corrections
This update corrects a bug in the l10n_vn_edi_viettel module that caused errors when generating invoices with very high exchange rates (like those involving USD). The fix rounds exchange rates to two decimal places, aligning with documentation requirements and preventing the system from encountering calculation errors.
Original PR description
* STEP TO REPRODUCE: create USD invoice to issue sinvoice, have currency rate like 26337.9186666777 , when issue we will get error because too many decimal * SOLUTION: round exchange rate up to 2 decimal because documentation said that is maximum 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#241061
This update resolves an issue where database neutralization inadvertently deleted user records due to a broad database truncation command. The fix now only deletes the 'mail.partner.device' records, preventing unintended data loss during testing and upgrades. This ensures a more stable and predictable database environment.
Original PR description
### Step to reproduce: 1. Create db in version 17.0 and create a many2one field with ``mail.partner.device`` 2. neturalize the db. All records of res.users will be vanish due to ``TRUNCATE…
### Step to reproduce:
1. Create db in version 17.0 and create a many2one field
with ``mail.partner.device``
2. neturalize the db. All records of res.users will be vanish due to ``TRUNCATE mail_partner_device CASCADE;``
### Issue:
during neutralize if there is any custom/studio field many2one with ``mail.partner.device`` even if the mail partner device
record won't used it in particular model still it will wipe out all the records of that model on neutrilizing
which can issue during testing on neutrlized db
**To fix it :**
[here](https://github.com/odoo/odoo/pull/133560/files#diff-284b40b100919f9b1d4f7bee50740387fea5f11815210baa5f6de9cbf317ca6dR14) want to delete only partner device. So, adjusted query using ``DELETE FROM mail_partner_device`` instead of truncate.
below traceback will generate due to this during upgrade.
```
Traceback (most recent call last):
File "/home/odoo/bin/misc/update_module_list.py", line 25, in <module>
env["ir.module.module"].update_list()
File "<decorator-gen-87>", line 2, in update_list
File "/home/odoo/src/odoo/17.0/odoo/addons/base/models/ir_module.py", line 71, in check_and_log
log_data = (method.__name__, self.sudo().mapped('display_name'), user.login, user.id, origin)
File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1188, in __get__
raise MissingError("\n".join([
odoo.exceptions.MissingError: Record does not exist or has been deleted.
(Record: res.users(1,), User: 1)
[ERROR]::Error during the upgrade:
```
opw-5443072
upg-3712726
Forward-Port-Of: odoo/odoo#242081
Forward-Port-Of: odoo/odoo#241535This update resolves an issue where deleting 'Booking Fees' products caused an access error. The fix uses `sudo()` to ensure the system can always access the product template, regardless of the currently selected company, preventing the error and allowing for proper product deletion.
Original PR description
**Steps to produce:** - Install `appointment_account_payment` and `l10n_be` with demo data. - Go to product `Booking Fees` and assign company `YourCompany`. - Switch the current company to `Belgium Company`. - Try to delete any product. **Issue:** - An access error is raised when deleting a product. **Root cause:** - During product deletion, method `_unlink_except_booking_fee_product_template` is executed [1]. - If the 'Booking Fees' product is assigned to another company, the current company cannot access its record, which triggers an access error. **Solution:** - Use `sudo()` when fetching the "Booking Fees" product template so that the record can be accessed regardless of the current company. [1]: https://github.com/odoo/enterprise/blob/0ba44def7fd961e1c17aa218e1a86a48f0918371/appointment_account_payment/models/product_template.py#L9-L15 opw-5255991 --- Forward-Port-Of: odoo/enterprise#101582
This update corrects a display issue where archived recurring plans continued to show up as pricing options on the website. The fix ensures that inactive plans are no longer considered during product pricing selection, providing a cleaner and more accurate presentation of available plans to customers. This improves the user experience and prevents confusion.
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#103223 Forward-Port-Of: odoo/enterprise#100587
This update prevents the loss of Starshipit orders when label creation fails during delivery validation. Previously, a failed label attempt would delete the order, now users can retry validation and fix data in Starshipit without losing existing orders. This enhances the reliability of our delivery process.
Original PR description
## Current behaviour: When validating a delivery, Odoo sends data to Starshipit. If label creation fails, the module deletes the created order. ## Expected behaviour: If label creation fails, the…
## Current behaviour: When validating a delivery, Odoo sends data to Starshipit. If label creation fails, the module deletes the created order. ## Expected behaviour: If label creation fails, the Starshipit order should remain. Users should be able to fix data in Starshipit and retry validation in Odoo without losing the existing order. ## Steps to reproduce: 1. Validate a delivery order integrated with Starshipit. 2. Trigger a label generation failure (e.g., bad address). 3. Observe that the created Starshipit order is deleted. ## Cause of the issue: The integration treats label creation failure as a fatal step and cleans up the previously created Starshipit order. ## Fix: Do not delete the Starshipit order on label failure. When the user retries validation, first check Starshipit for an order matching the unique reference. If found, reuse it and continue with label creation and manifest. If not found, create a new Starshipit order as usual. ## Additional note: The _() wrapper in the error line was removed because the Starshipit service has no env or language context. Since translations cannot be resolved there, Odoo raised a warning. Removing _() avoids this warning and keeps the error clean. opw-5306979 Forward-Port-Of: odoo/enterprise#101174
This update prevents the creation of duplicate bank accounts when reconciling transactions using the bank reconciliation widget. It focuses solely on the reconciliation process, reducing confusion and errors caused by duplicate account entries. This change improves data accuracy and simplifies bank reconciliation workflows.
Original PR description
When using the bank reconciliation widget, avoid creating a new bank account on the selected partner if the same account number already exists on another active partner. This change is intentionally limited to the reconciliation flow only, to reduce noise caused by duplicate bank accounts, and does not affect other partner or bank account creation use cases. task- 5236503 Forward-Port-Of: odoo/odoo#234531
This update ensures that the accounting application doesn't automatically contact our external Odoo Fin server when opened. Previously, displaying favorite institutions in the accounting dashboard triggered a call to production.odoofin.com. This fix uses a mock to prevent unnecessary external requests, improving performance and stability.
Original PR description
The aim of this commit is making sure that the click all won't try to contact our external server odoo fin when the accounting application is opened. Indeed, the accounting application is displaying the favorite institutions for a particular country in the accounting dashboard which is doing a call to production.odoofin.com. This commit adds a mock using _request_handler to patch the call to odoo fin. runbot-error-231151 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223602
This update corrects a visual issue where a duplicate dropdown menu appeared in social stream post management. The fix ensures consistency by correctly integrating the existing dropdown from the 'social_crm' module, maintaining a streamlined user experience. Additionally, the 'is_author' field was re-introduced to manage button visibility for post editing and deletion.
Original PR description
Following https://github.com/odoo/enterprise/commit/c9ddf1c a new dropdown has been added to "social" to allow the edition and deletion of a social stream post. This new dropdown didn't take into account the one already existing in "social_crm" resulting in a duplicated dropdown menu. Fixing the issue by making sure the dropdown from "social_crm" is correctly extending the one from "social". As the "Create Lead" action is set above the "Edit" and "Delete" ones, making sure it's also the case for the stream post comments dropdown menu for consistency. Re-inserting the "is_author" field (removed here https://github.com/odoo/enterprise/pull/69650) in the kanban view to make sure the "Edit", "Delete" and "Create Lead" buttons visibility are correctly managed for your own posts. Task-5270180 Forward-Port-Of: odoo/enterprise#101679
This update fixes a bug that occurred when push notifications were re-enabled, preventing errors in the service worker. It also addresses a vulnerability where incorrect domain names (specifically those ending in `.invalid`) could cause push notifications to fail, ensuring reliable delivery.
Original PR description
[FIX] mail: avoid error on service worker push subscription change Sometimes, the `pushsubscriptionchange` event is called without an `oldSubscription` defined, which can lead to an error occurring…
[FIX] mail: avoid error on service worker push subscription change Sometimes, the `pushsubscriptionchange` event is called without an `oldSubscription` defined, which can lead to an error occurring inside the service worker. Steps to reproduce: 1. Enable notification in Odoo. 2. Reset the permission in the Chrome interface 3. Re-enable the permission inside the discuss systray by clicking on the Odoobot message. => The pushsubscriptionchange is called without an oldSubscription [FIX] mail: ir_cron_web_push_notification are now more robust With a user having 5 registered devices for push notifications if a browser registers with an endpoint that has a wrong domain such as https://permanently-removed.invalid/fcm/send/XXXXXXXXXXXXX the cron job cannot resolve the invalid domain of the endpoint and ends up disabling it. [FIX] mail: push_to_end_point method to support .invalid TLD if a browser registers with an endpoint that has a TLD `.invalid` such as https://permanently-removed.invalid/fcm/send/XXXXXXXXXXXXX The TLD `.invalid`[1] is intended for use in online construction of domain names that are sure to be invalid and which it is obvious at a glance are invalid. The cron job cannot resolve the invalid domain of the endpoint and ends up disabling it. So we need to unregister a device with an endpoint with a `.invalid` TLD. [1]: https://datatracker.ietf.org/doc/html/rfc2606#section-2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242013 Forward-Port-Of: odoo/odoo#240502
This update resolves an issue where the Company Paid Time Off field in the Time Off settings was blank, leading to validation errors when creating new leave requests. The fix ensures the default reference leave type is correctly set in the system's demo data, improving the user experience and preventing errors.
Original PR description
**Steps to reproduce:** - Install l10n_fr_hr_holidays module. - Go to Time Off > Configuration > Settings. - Company Paid Time Off field should blank. - Employee `resource_calendar_id` is not same as company's. - Create new leave > a validation error will occur. **Cause:** - The demo data for 'res.company' did not correctly set the `l10n_fr_reference_leave_type` field. - 'l10n_fr_reference_leave_type' field should be required. **Fix:** - Updated demo record to correctly assign `l10n_fr_reference_leave_type` field. - Set the `l10n_fr_reference_leave_type` field as required. Task - 5139488 Forward-Port-Of: odoo/odoo#231385
This update removes a specific test case related to Excel files that was causing issues with Odoo's automated testing process. This test was reliant on a feature that wasn't fully supported in all Odoo environments, specifically older versions of Ubuntu. Removing this test improves the stability and reliability of Odoo's continuous testing.
Original PR description
This commit removes the xslx-2025 test case. That file contains a `trash` folder and libmagic only started supporting those files with file/file@3660a2ccb77cdea0ce678d9e71fbb7aceca2adbe, this commit is notably absent from Ubuntu Jammy which is a supported OS in this Odoo version. Keeping the test makes the Runbot Distro-build CI red on Jammy which is worse than making sure we always support those (rare, arguably broken) files. 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#242211
This update resolves a problem preventing the correct display of KPD category lists within the HR module. The fix aligns the module's functionality with the version used in Odoo 19.0, ensuring accurate reporting and data processing for tax-related calculations.
Original PR description
Fixing the loading error for KPD category list, consistent with 19.0 version of the module. runbot-237639 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242188
This update resolves an issue where the HTML editor would crash when a link's metadata couldn't be retrieved (often due to website access restrictions). The fix ensures that errors during metadata fetching are handled gracefully, preventing the editor from displaying a traceback and improving overall stability. This change focuses on a technical detail to enhance the user experience.
Original PR description
Problem: When a fetch request fails (for example due to CORS restrictions), a traceback occurs in the editor. Solution: Backport 971d88121968c85a86c805458d5d9dbbb305995c and ensure the error handling check is applied for both internal and external metadata fetching. Steps to reproduce: - Create a tracked link. - Copy the tracked link. - Create a link in the editor and use the copied URL. - Apply. - Traceback occurs. task-5394908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240712
This update ensures that image styles (like transformations and width) are correctly cleared when an image is replaced with another media type (icon, document, etc.). Previously, these styles were incorrectly applied to the new media, leading to unexpected visual results. This change improves the consistency and reliability of the HTML editor.
Original PR description
**Current behavior before PR:** - When an image had styles applied to it (such as transform or width) and was replaced with another media type like an icon or document, those styles were incorrectly carried over to the replaced media. **Desired behavior after PR is merged:** - Since transform and width styles are meant to apply only to images, they are now removed when an image is replaced with other media types. task-5373362 Forward-Port-Of: odoo/odoo#238319
This update corrects a visual issue with the carousel's indicator display, specifically when using 'Numbers' as the indicator style. The previous design resulted in unreadable numbers and misaligned buttons. This change ensures the indicators are correctly sized and colored for improved usability.
Original PR description
The css rules for indicators outside the carousel were not adapted for number indicators, and used the button color intended for dots and bar as background of the numbers, making them unreadable and…
The css rules for indicators outside the carousel were not adapted for number indicators, and used the button color intended for dots and bar as background of the numbers, making them unreadable and ugly. The height of the indicators when outside influences the margin needed to align the bottom of the prev/next buttons. That caused the bottom of the next/prev buttons to not reach the bottom of the slide with "Numbers" or "Hidden" as indicators. This commit adds the necessary css rules to correctly size and colors the number indicators (and the hidden one) when positioned outside. Steps to reproduce - Add a carousel - Set "Indicators" to "Numbers" - Set "Style" to "Indicators outside" - Bug: The colors are all wrong, we cannot see the numbers - Bug: The bottom of the previous/next buttons do not reach the bottom of the carousel - Set "Indicators" to "Hidden" - Bug: The bottom of the previous/next buttons is even further from the bottom of the carousel task- 5358507 Forward-Port-Of: odoo/odoo#237397
This update significantly speeds up product searches used in EDI processing, particularly for invoices like those from PEPPOL. By changing how product searches are performed, the system now utilizes indexes more effectively, reducing search times from minutes to seconds, even with a large number of products.
Original PR description
The \_retrieve \_product() function relies on a query with multiple domains OR'ed together. As the search will require a LEFT JOIN with the product_template table, the use of OR in the query prevents…
The \_retrieve \_product() function relies on a query with multiple domains OR'ed together. As the search will require a LEFT JOIN with the product_template table, the use of OR in the query prevents Postgres from utilizing indexes. This becomes a problem in databases with a large number of products since a seq scan would be very slow. This commit changes the way this is done by performing separate queries instead of a single query with multiple conditions within an OR statement. Although this might seem a performance degradation, it actually allows these separate queries to utilize indexes and run much faster compared to the original approach. It also simplifies the priority logic and allows for faster early exits compared to the original one. This function is mainly used with EDI crons (such as PEPPOL where this problem was noticed), which could require hundreds of product searches as it does a search per invoice line. Benchmarks: Importing a peppol document of 173 invoice lines. | Num products | Num invoice lines | Before | After | | ------------ | ----------------- | -------- | ------- | | 864873 | 173 | 868.18 s | 19.43 s | | 397005 | 173 | 468.91 s | 20.68 s | | 8064 | 173 | 125.08 s | 20.1 s | | 564 | 173 | 119.9 s | 20.21 s | opw-5245007 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240753 Forward-Port-Of: odoo/odoo#238853
This update corrects a visual issue where the OCR label for expense receipts was incorrectly displayed alongside the data field, causing a misalignment in the expense report grid. The fix ensures the label appears correctly, improving the user experience when using OCR functionality. This was triggered by a change in how OCR data is handled.
Original PR description
Prerequisites ------------- To test this scenario you need either OCR credits, a free trial or to use the IAP account we have in the spreadsheet. Steps To Reproduce ------------------ 1- Go to Expenses > My Expenses. 2- Upload a receipt to trigger OCR. 3- Open the expense in Normal Mode (It works fine in Debug Mode). Issue ----- "Payment Method" field is misaligned - label appears in the value column and field appears in the label column. Cause ----- The label for "ID of the request to IAP-OCR" (`extract_document_uuid`) is visible when OCR data exists, but its field is only visible in Debug Mode. This orphan label breaks the grid layout. opw-5369619 Forward-Port-Of: odoo/enterprise#103189
This update resolves an issue where the analytic distribution field contained unexpected data types, specifically the '__update__' string, which caused errors during account ID retrieval. The fix now safely processes only strings that can be interpreted as numbers, providing a more robust and reliable system for handling analytic account data.
Original PR description
Issue: Before this commit, the analytic distribution field contained a mix of integers (account IDs) and strings (such as '__update__'). When attempting to retrieve the account ID, converting the '__update__' string to an integer caused an error. Fix: As a generic solution, instead of skipping only the '__update__' key—which may not be the only non-numeric string in the future—we now process only the strings that can be safely interpreted as numbers. opw-5450293 Forward-Port-Of: odoo/odoo#242021
This update resolves an issue preventing Odoo from properly connecting with Tailscale, a secure network tool. The change ensures compatibility with the latest Odoo 19.1 version, addressing a file not found error. This enhancement supports secure remote access and collaboration.
Original PR description
This PR adds a compatibility with Tailscale after upgrading 25_06/25_07 images to 19.1. It fixes the error ``` FileNotFoundError: [Errno 2] No such file or directory: 'tailscale' ``` Forward-Port-Of: odoo/odoo#242292
This update fixes an issue where the duration of employee time off wasn't accurately calculated after changing their contracts. The fix ensures that the system recomputes time off duration correctly when a contract is updated, preventing discrepancies in reported hours and improving payroll accuracy. This impacts all users who rely on accurate time off calculations.
Original PR description
### Steps to reproduce: - define a time-off type in hours - create working schedules : standard 40h (fixed hours) standard 20h (fixed hours) Flexible 40h (flex hours) Flexible 20h (flex hours) -…
### Steps to reproduce: - define a time-off type in hours - create working schedules : standard 40h (fixed hours) standard 20h (fixed hours) Flexible 40h (flex hours) Flexible 20h (flex hours) - create 2 employees: employee 1 with fixed hours ; employee 2 with flexible hours - create contract 1 Fix 100% (start in 01/01/2025 - standard 40h) and set it to running - create contract 2 Flex 100% (start in 01/01/2025 - Flexible 40h) and set it to running - register a 1st week t-o for each employee (ex: 08/03/2025-08/09/2025) ==> 40h and validate - register a 2nd week t-o for each employee (09/07/2025-09/13/2025) ==> 40h and validate - expire current contract (100%) for each employee and launch a new contract (50%) : - Standard 20h (Fixed hours) for employee 1 ; - Flexible 20h (flex hours) for employee 2 (start on 08/24/2025) ==> set them to running ### Cause: While we are recomputing the duration of the overlapping leaves the resource_calendar for the employee is not yet changed so when getting the work_intervals we are calculating it using the old hours_per_day. Also since we are still writing to the contract and it is not yet in running state so we won't be able to use _get_calendars_validity_within_period ### Fix: We add the number of days and duration display to the compute queue so it will be recomputed after we already change the employee's resource_calendar opw-5010995 Forward-Port-Of: odoo/odoo#227298
This update resolves a bug that prevented users from successfully canceling the selection of an employee photo within the Salary Configurator. The fix ensures the system correctly handles image uploads and cancellations, improving the user experience. This prevents errors during offer generation.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Install the hr_contract_salary module. - Go to Employee contract and click the Generate Offer. - Click on 'Send By Email' button and open Salary Configurator. - Upload an employee photo the first time. then cancel the image selection the second time. **Issue:** - Error occurs when canceling the image selection on Salary Configurator page. **cause:** - The condition to check whether the file exists properly was missing. **solution:** - Added the missing condition to properly check that file exist. Task-5423390 Forward-Port-Of: odoo/enterprise#102410
This update removes an unnecessary step from the website tour process. Previously, a step was present that didn't perform any action, now that the underlying functionality has been adjusted. This change simplifies the tour and avoids potential confusion for users.
Original PR description
Following PR [^1], the step about copying the tracker link doesn't do anything as the only actual "action" made in the custom "run()" function has been removed (sic), leaving only the mocking of the Clipboard API (which isn't called anymore, anyway). This commit removes this unused step to avoid confusion. [^1]: https://github.com/odoo/odoo/pull/170548 Forward-Port-Of: odoo/odoo#241358
This update resolves an issue where the automated PDF generation for payroll wasn't working correctly when multiple payslips were processed. The fix addresses a technical problem with how the system identified the correct partner for PDF creation, ensuring that all payslips generate their corresponding PDF documents as expected.
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
This update resolves a problem where tests in the l10n_mx_edi module were consistently failing due to incorrect date calculations. The fix sets a standard test date in the middle of the year, ensuring that tests run reliably and don't depend on specific calendar dates.
Original PR description
Some tests are making "self.frozen_today - timedelta(days=1)". It means some tests are failing only the first of January. To avoid that, let's make "frozen_today" to be in the middle of the year. Forward-Port-Of: odoo/enterprise#102772
This update adjusts a timeout setting in the SMTPD tests, preventing false failures and unnecessary alerts. Previously, a very short timeout caused tests to repeatedly fail. This change ensures the tests are more reliable and avoids disruptions to the system's email functionality.
Original PR description
There are multiple cases where the SMTPD tests fail due to a timeout error. It is much worse to get a red runbot due to a silly timeout than to sometime wait a bit longer than .1 second. 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#242214
This update resolves an issue where exporting pivot data resulted in an error when no data was available. The system now gracefully handles empty data requests by returning a standard error message, ensuring a smoother user experience and preventing unexpected application crashes. This improves data export reliability.
Original PR description
Currently an exception is generated when controlled `/web/pivot/export_xlsx' tries to export xlsx with empty data. `KeyError: 'title'` This PR resolves the issue by raising an `UnprocessableEntity` exception when empty data is provided. The resulting 422 response indicates that the server understood the request and its syntax, but cannot process it because the data is invalid. sentry-6321555617 Forward-Port-Of: odoo/odoo#241415
This update fixes an issue where Odoo incorrectly prioritized the contact name over the legal entity name when creating accounts from XML files. Following discussions with CHKL, the system now correctly prioritizes the legal entity name, ensuring accurate partner identification for accounting and billing processes. This improves data integrity and compliance.
Original PR description
When we create an account.move from an XML file, Odoo first searches for an existing partner via some values fetched with `_import_retrieve_partner_vals()`. Amongst those vals, the name can be fetched from either the `Contact:Name` or the `PartyLegalEntity:RegistrationName`. Currently, the contact name is prioritized over the legal entity name. After discussion with CHKL, this should be the opposite. Discord link: https://discord.com/channels/678381219515465750/694447009679147068/1457691361959608413 Related ticket: opw-5269360 Forward-Port-Of: odoo/odoo#242205 Forward-Port-Of: odoo/odoo#242037
This update corrects a visual inconsistency in the Odoo chatter interface. Previously, paragraphs added in the composer didn't maintain their bottom margin when posted to the chatter, leading to mismatched spacing. This change ensures that the spacing between messages in the chatter matches the composer and sent emails, improving the overall user experience.
Original PR description
Problem: When adding a paragraph in the composer and sending the message, the paragraph posted in the chatter has a `margin-bottom` of 0. Cause: Paragraphs in the chatter rendering override the default bottom margin, resulting in inconsistent spacing compared to the composer and the sent email. Solution: Update selector to only target the last `p`. Steps to reproduce: - Open the chatter composer. - Add a paragraph using "/Paragraph". - Add some text. - Send the message. - Observe that the message posted in the chatter has no bottom margin, unlike in the composer. opw-5378129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240082
This update fixes an issue where string values entered in the web_studio field editor were incorrectly displayed with extra quotes and slashes. Now, string values are correctly formatted and saved, ensuring accurate field configuration within the studio interface. This improves the reliability of data input and configuration.
Original PR description
Have a field widget with an option of type "string" (supportedOption meta field of the widget) In studio, change the value for that option. Before this commit, the value appeared in the input as escaped: there were supplementary quotes and slashes After this commit, the string value is correctly displayed. Forward-Port-Of: odoo/enterprise#103410 Forward-Port-Of: odoo/enterprise#103364
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#102224
This update corrects a bug where changing a product's type (from goods to service) without a standard update could bypass inventory checks, leading to incorrect stock tracking. The fix ensures that a validation error is raised when a product's type is changed, maintaining accurate inventory management.
Original PR description
## Description of the issue/feature this PR addresses: `compute_is_storable` is called when the `type` value is modified but the `write` function is never called when the value is set using the…
## Description of the issue/feature this PR addresses: `compute_is_storable` is called when the `type` value is modified but the `write` function is never called when the value is set using the `is_storable` attribute. Updating `is_storable` using a `write` ensure that an exception is raised when move line exists. But this fix addresses the symptom, not the underlying issue. So why ? Is it related to the cache or unit test environment ? ## Current behavior before PR: In a Unit test, If you convert a consumable and storable product to a service, no exception is raised, even with existing stock moves. Unlike the previous version of Odoo (<15.0), where an exception was raised when the product type was changed and stock movements existed, detection now occurs if the ‘is_storable’ status is changed. However, this detection is not triggered if the value of ‘is_storable’ is defined by its attribute. ## Desired behavior after PR is merged: An exception must be raised (like Odoo 14.0) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239284
This update fixes an issue where tax names and invoice labels were displayed in English for Vietnamese users. By adding the necessary Vietnamese translations to the chart template CSV, users will now see accurate Vietnamese labels when using Odoo with Vietnamese chart of accounts, improving the user experience.
Original PR description
The `name` and `invoice_label` fields on `account.tax` are translatable fields (translate=True), but the Vietnamese chart template CSV was missing the corresponding translation columns. This caused…
The `name` and `invoice_label` fields on `account.tax` are translatable fields (translate=True), but the Vietnamese chart template CSV was missing the corresponding translation columns. This caused tax names and invoice labels to display in English even when the user's language was set to Vietnamese. By adding the `name@vi_VN` and `invoice_label@vi_VN` columns to the tax template CSV, taxes will now display with proper Vietnamese labels when the chart of accounts is installed for Vietnamese companies, improving the user experience for Vietnamese-speaking users. Technical details: - Added `name@vi_VN` and `invoice_label@vi_VN` columns to the CSV header - Added Vietnamese translations for all tax records in the template - Translations follow Vietnamese tax terminology conventions - The chart template loader automatically processes columns with `@lang` suffix and applies them as translations for translatable fields 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#241681 Forward-Port-Of: odoo/odoo#236502
This update prevents unnecessary email reminders for timesheet approvals. It ensures reminders are only sent when there are actual timesheets needing review, and when a user is correctly designated as a manager or approver. This reduces email clutter and improves the efficiency of the approval process.
Original PR description
prevent cron from sending approver reminder if no timesheet assigned to approver Send the reminder email if: - there are timesheets to validate - AND if the user is set as either the manager or timesheet approver of an employee with timesheets left to be validated - OR if the said employee has no manager or timesheet approver set Task-3624610 Forward-Port-Of: odoo/enterprise#102785 Forward-Port-Of: odoo/enterprise#52355
This update resolves an issue where grouped Kanban cards were displaying incorrectly due to a change in the Kanban templates. The team removed a specific CSS class that was no longer needed, restoring the correct card heights and overall display. This ensures a consistent and professional user experience.
Original PR description
Since commit https://github.com/odoo/enterprise/pull/70460 and the reworking of the Kanban templates, the h-100 class was no longer correct. This PR fixes the issue by removing this class. task-5439265 Forward-Port-Of: odoo/enterprise#102801
This update fixes an issue where inline code blocks were difficult to remove, particularly at the end of lists. The changes ensure that code styles disappear correctly when the last character of inline code is deleted, enhancing the editor's usability. This improves the user experience when editing text with code snippets.
Original PR description
Text formatted as inline `<code>` (between backticks) is very difficult to remove in some situations, typically at the beginning of a list entry. This commit solves this by removing the code style when its last character is removed. Steps to reproduce: - Create a list - Type some inline code - Put the cursor in the middle - Press Enter - Type some text after the inline code on the second line - Try to remove the inline code from the second line using backspace => The line is removed before the code style disappears task-5375140 Forward-Port-Of: odoo/odoo#238552
This update resolves an issue where the 'leitweg-id' field in xRechnung invoices was incorrectly formatted during the forward port. The fix involved updating a helper function to ensure accurate mapping of this identifier, preventing potential invoice processing errors. This ensures compliance with German e-invoice regulations.
Original PR description
Correction of the forward port for the leitweg-id in the 'cbc:BuyerReference' field for the xRechnung invoice. The 'export_invoice_vals' function is an old helper that is not used by default anymore (but used by the tests, that is why the tests did not catch the error). I added the if statement in the corresponding new helper: '_add_invoice_header_nodes' and changed the test for it to catch the error. Related: #236333 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241982
This update fixes an issue where rental transfer dates weren't automatically adjusted when a rental order's period was extended. The fix mirrors the rescheduling behavior of purchase orders, ensuring rental transfers are updated accurately, improving the rental process for customers. This prevents scheduling discrepancies and ensures accurate transfer management.
Original PR description
### Steps to reproduce: - In the settings enable "Rental Transfers" - Create a storable and rentable product P - Create and confirm a rental order for 1 unit of P - Change the rental period to 10 days in the future #### > The rental tranfers were not updated accordingly ### Cause of the issue: Nothing is currently implemented to reschedule the rental transfers. ### Fix: We somewhat mimic the reschedule purchase behavior: https://github.com/odoo/odoo/blob/6ca34a0f5347e0611cde95453119dda8b40fa589/addons/purchase_stock/models/purchase_order_line.py#L98-L101 But we rely on the order itself rather than its order lines since the `start_date` and the `return_date` are related fields so that no `write` is triggered when the order is rescheduled: https://github.com/odoo/enterprise/blob/96a80f583a0ca502ff06bc05d03775c76c6a7537/sale_renting/models/sale_order_line.py#L18-L19 opw-5158508 Forward-Port-Of: odoo/enterprise#101334
This update corrects a problem where invoice XML files generated for Danish Nemhandel transactions were failing validation due to an incorrect assumption about the 'PrepaidAmount' field. The fix ensures the 'PrepaidAmount' node is only removed when the value is actually zero, resolving the validation issue and allowing invoices to be correctly processed.
Original PR description
To reproduce: create an invoice that is reconciled (typically a credit note) before Send&Print. Check the validity of the xml with a schematron => it fails due to the value of the PrepaidAmount The node PrepaidAmount gets removed because it was wrongly thought to be always empty. We now only remove it if the value is at 0. 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#242008
This update resolves a technical issue related to how the system acknowledges PEPPOL messages. Previously, continuous acknowledgments caused problems on the IAP side, leading to errors. This fix ensures acknowledgments happen after the main processing loop, improving system stability and reliability.
Original PR description
The acknowledgment should not happen in the loop, but after. In a case a problem happened in the loop, it's acceptable that we end up not acknowledging messages, their status will be retrieved again at the next call. At the moment those continuous acks cause serialization issues on IAP side. task-none Forward-Port-Of: odoo/odoo#242187
A validation error prevented users from creating new spreadsheet templates within the Quality Control app. This update adds a default name to the template, resolving the validation issue and allowing users to successfully create and utilize these templates. This ensures consistent and reliable spreadsheet creation for quality control processes.
Original PR description
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control…
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control Points. 3. Click "New". 4. Set the type to "Spreadsheet". 5. Click on Spreadsheet Template > Search More. 6. Click "New". -> A validation error is raised. **Cause** In `quality_view`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/quality_control/views/quality_views.xml#L840C17-L845C19 the `many2one_spreadsheet` widget (see [`many2one_spreadsheet_field.js`](https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L36)) overrides "Create and Edit" to create a new spreadsheet through `Many2XSpreadsheetAutocomplete`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L11C9-L14C51 This flow does not set a default value for the required `name` field, nor does `action_open_new_spreadsheet`:https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/spreadsheet_edition/models/spreadsheet_mixin.py#L348 Since `name` is required: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/quality_control/models/quality_spreadsheet_template.py#L12 validation fails. **Solution** Provide a default value for the `name` field, using the same default as in `documents_document.py`: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/documents_spreadsheet/models/documents_document.py#L321 opw-5340710 Forward-Port-Of: odoo/enterprise#101671