Daily updates from Odoo
Wednesday, January 7, 2026
29 changes · saas-18.4
Resolved issues and error corrections
This update corrects a problem where the system was generating invoices with excessively long exchange rates for USD transactions in Vietnam. The fix rounds the exchange rate to two decimal places, aligning with documentation requirements and preventing errors during invoice creation. This ensures accurate VAT calculations and proper invoice processing.
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 the neutralization process unintentionally deleted records from the res.users table, causing problems during testing. The change replaces a database truncation command with a targeted deletion, ensuring only the mail partner device data is removed and preventing data loss.
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 closing the event registration selection in a sales order would sometimes leave the product incorrectly listed. The fix ensures that the product is properly removed from the order line when the event selection is dismissed, preventing data inconsistencies.
Original PR description
**Steps to produce:** - Install `Events and Sales` modules. - Go to `sale > sale order > Open any SO > Add product > Event registration`. - When the wizard opens, dismiss it by either clicking the X…
**Steps to produce:**
- Install `Events and Sales` modules.
- Go to `sale > sale order > Open any SO > Add product > Event registration`.
- When the wizard opens, dismiss it by either clicking the X button in the
top-right corner of the modal or by pressing the `Escape` key.
**Traceback:**
`TypeError: Cannot convert undefined or null to object.`
**Root cause:**
- In this [commit], the `{ dismiss: true }` option was added to the `dismiss` call.
- At [1], when `onClose` is triggered, we only check `!closeInfo || closeInfo.special`.
Since `{ dismiss: true }` does not satisfy either condition, the code falls into the `else` branch,
where `update` is called with an `undefined` value.
**Solution:**
- Now, we also check the condition `closeInfo.dismiss`.
- So, now that we have closed the selection of the event, our product is also removed from the SO line.
[commit]: https://github.com/odoo/odoo/commit/31c00161fd3a77c9fbd260754cb8c142fcb0d652
[1]https://github.com/odoo/odoo/blob/01a896557ec2bada04db60195926c6fa61375b10/addons/event_sale/static/src/js/sale_product_field.js#L40
**opw-5349732**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238061This update resolves an issue where deleting a specific product (Booking Fees) caused an access error. The fix ensures the system can always access the product's data, regardless of the currently selected company, preventing the error from occurring.
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 prevents the creation of duplicate bank accounts when reconciling transactions using the bank reconciliation widget. It focuses solely on the reconciliation flow, reducing confusion and errors caused by duplicate account entries. This change improves data accuracy and simplifies the bank reconciliation process.
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 corrects an issue with how invoices are formatted for electronic delivery to ECPay in Taiwan. The change removes the company name from the EDI address and now sends a simplified, comma-separated format. This ensures compliance with ECPay's requirements and improves the accuracy of invoice data transmission.
Original PR description
In this commit: --- Update EDI address formatting to remove the company name and send a comma-separated single-line address. task-5410619 Forward-Port-Of: odoo/odoo#241964 Forward-Port-Of: odoo/odoo#241108
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 communication, 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 fixes a bug that prevented users from registering for event slots from pages other than the event registration page. Now, attendees can easily find and book available time slots on any page related to an event, improving the event booking experience. This change ensures consistent registration options across all event-related content.
Original PR description
* = event, event_booth, event_exhibitor, event_track, event_track_quiz The "register" button displays open slots only on the registration page of an event, and not on the other pages of this one. This PR fixes this issue by making available the open slots from the event.event model for the modal_slot_registration template as an instance of this one is always present in the context of those pages. Reproduce: Create an event with the "Multiple Slots" option checked and link it to a slot of tomorrow. The "register" button will display the slot on the registration page of the event but not on the page of the talks. Task-5083175 Forward-Port-Of: odoo/odoo#226635
This update resolves a bug that prevented users from assigning statements to multiple bank lines within the Bank Reconciliation widget. The fix ensures the system handles multiple selections correctly, preventing a common error. This improves the usability of the accounting module for managing bank statements.
Original PR description
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank…
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank Reconciliation widget. 3) Switch to the List view. 4) Select multiple statement lines. 5) Click on the 'Statement' field to assign a statement to the selected lines. Error: `TypeError: Cannot read properties of undefined (reading 'root')` Root Cause: The `BankRecMany2OneMultiID` component attempts to access `active_ids` through `this.env.model.root` (see [1]). During re-rendering, the value of `this.env.model` becomes undefined, which leads to the error. Fix: Add a check for the existence of `this.env.model` in the getter to avoid accessing `root` on an undefined model. [1]- https://github.com/odoo/enterprise/blob/c194bee0e48db407288e3c402e71840af299568d/account_accountant/static/src/components/bank_reconciliation/list_view/list_view_many2one_multi_edit.js#L14 opw-5403564 Forward-Port-Of: odoo/enterprise#101792
This update fixes a bug that could cause push notifications to fail when users manage their notification settings. Specifically, it handles cases where the system doesn't receive prior subscription information, and addresses issues with invalid domain names used for push notifications, 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 fixes a rounding issue that was causing inaccurate time remaining displays on Sales Orders. Previously, the system was rounding intermediate calculations, leading to a slight discrepancy. The fix ensures the remaining time is displayed precisely, reflecting the actual consumed hours without rounding drift.
Original PR description
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order…
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order Line - Log 22:00 on timesheets Current behavior: Sales Order Line shows '-2:01 remaining' Expected behavior: Should show '-02:00' to reflect two hours overconsumed without rounding. Root cause: Python's float type follows the IEEE 754 double-precision standard, where only base-2 fractions can be stored precisely. Base-10 fractions cannot be represented exactly, introducing tiny rounding errors. During chained operations such as multiple conversions or subtractions, these small errors accumulate into larger discrepancies. The float_round() function uses a small constant epsilon to correct rounding noise, but as arithmetic chains grow, errors exceed epsilon's tolerance and it can no longer correct them. Since a single global epsilon cannot handle every case (small vs. large values, chained vs. single operations, or regressions), rounding drift is inevitable when rounding happens repeatedly. Fix: To prevent these rounding errors from compounding, the solution is to stop intermediate rounding altogether. By using conversions with round=False, all arithmetic is done in the base unit (hours) with full float precision, and rounding is applied only once when displaying the final value. This eliminates error accumulation and ensures consistent, drift-free results. task-5090240 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241120 Forward-Port-Of: odoo/odoo#229282
This update resolves an issue where requesters didn't see signed documents after the signing process. The fix ensures that both the requester and signer automatically receive 'view' access rights to the signed document, preventing access problems and streamlining the document workflow.
Original PR description
To reproduce: ============= - as a User U with Admin rights on Documents (not Sys Admin) - create a folder at the root of the company - create a Sign Request template using this folder as signed document folder - send the Sign Request to another user O and sign it with that user O - go to Documents app with user U and check the folder where the signed document should be - the signed document is not there Problem: ======== when creating signed documents, the access rights for the requester are not set, causing the requester to not see the signed document Solution: ========= give `view` access right on signed documents to both the requester and the signer if they don't already have `edit` access right on it or ownership opw-[5087233](https://www.odoo.com/web#id=5087233&view_type=form&model=project.task) Forward-Port-Of: odoo/enterprise#100779 Forward-Port-Of: odoo/enterprise#97132
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 latest version (19.0), ensuring accurate reporting and data processing for tax and payroll calculations. This improves data reliability and compliance.
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 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 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 large invoice volumes. By restructuring the database query, the system now efficiently utilizes indexes, dramatically reducing search times. This improvement is crucial for handling high-volume EDI transactions like PEPPOL, ensuring faster invoice processing.
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 documents was incorrectly displayed alongside the data field, causing a misalignment in the expense report grid. The fix ensures that all expense data is presented clearly and accurately, regardless of the user interface mode.
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 ensures that the Odoo Enterprise system accurately calculates and applies Belgian withholding taxes for payroll up to the year 2026. The change corrects a discrepancy in tax rules, ensuring compliance with the latest regulations and accurate financial reporting. This fix impacts the l10n_be_hr_payroll module.
Original PR description
TaskID: 5403525 Forward-Port-Of: odoo/enterprise#103271 Forward-Port-Of: odoo/enterprise#103215
A bug preventing users from searching within sign templates has been fixed. Previously, the search function within PDF templates was unresponsive. This update removes a technical issue that blocked users from utilizing the search feature, ensuring proper functionality.
Original PR description
Currently when the user is viewing sign templates, they are unable to search within a PDF. **Steps to replicate:** * Install `sign` with demo data * Sign > Templates > Open a template * Try searching using the magnifying glass button **Observed Behavior:** * User is unable to type anything in the PDF search box. **Root cause:** * This error happens because `preventDefault()` is called during a `keydown` event. At [1], calling `event.preventDefault()` stops the key’s normal behavior, so the typed character is not added to the input field. **Solution:** * Remove the `preventDefault` call which allows the search to work again. [1]: https://github.com/odoo/enterprise/blob/3df585779e6ede664279331c4531043688dadf17/sign/static/src/backend_components/editable_pdf_iframe_mixin.js#L623 opw-5366074 Forward-Port-Of: odoo/enterprise#102749
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 and ensures data integrity.
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 resolves an issue preventing customers in French territories like La Réunion from using Stripe Connect. The change adjusts how Odoo maps company countries to Stripe, aligning with Stripe's policies for supported regions. This ensures seamless payment processing for all users, regardless of their location.
Original PR description
## Versions 17.0+ ## Issue Customers located in French territories (e.g. La Réunion) can't use Stripe Connect. ## Steps to reproduce *Ensure Stripe payment provider is installed* - From the Settings'…
## Versions 17.0+ ## Issue Customers located in French territories (e.g. La Réunion) can't use Stripe Connect. ## Steps to reproduce *Ensure Stripe payment provider is installed* - From the Settings' app, access your company's data: - Change your company's country for "Réunion". - Go to Payment Providers and open Stripe: - Try to enable Stripe via Stripe Connect; - A message tells you your country is not supported by Stripe. ## Cause Commit 94b37a3f51089621a2f12360c7a13f610b24ba3a introduced territories mapping by adding the method `_stripe_get_country()`, mapping the company country (`self.company_id.country_id.code`) to enable Stripe under the parent country as specified in their documentation (https://support.stripe.com/questions/stripe-availability-for-outlying-territories-of-supported-countries). This fix was first applied in 16.0 and forwarded but didn't check that commit de782a680de8e5a2d7c89b982c485ca29da34b3a, from saas-16.2, added another condition on (`self.env.company.country_id.code`) on the Stripe Connect flow. opw-5421185 Forward-Port-Of: odoo/odoo#242123 Forward-Port-Of: odoo/odoo#241269
This update ensures that image shape colors remain consistent when animation speeds are adjusted. Previously, changing the animation speed would reset the color, causing a frustrating user experience. This fix corrects a technical issue related to how image shape IDs are handled, improving visual consistency.
Original PR description
Before this commit, changing the animation speed would reset the colors applied to the image shape. This was due to the code always considering the shape as new because the current shape id wasn't retrieved. Therefore, the colors would be reset to the default ones. Steps to reproduce the issue: - Drop a snippet with an image - Click on the image - Add an image shape. It should be animated. - Change the image shape color - Change the image shape animation speed => The image shape color was reset. task-5375497
This update fixes an issue where Odoo wasn't consistently showing the correct working schedule when employees had overlapping contract periods. Previously, it only displayed the latest schedule, regardless of the contract. Now, the system accurately reflects each employee's working schedule for each contract period, ensuring accurate attendance tracking.
Original PR description
Description of the issue/feature this PR addresses: Based on this feedback : https://www.odoo.com/odoo/project.task/5436300 . When I got two versions with different working schedules, normally, in…
Description of the issue/feature this PR addresses: Based on this feedback : https://www.odoo.com/odoo/project.task/5436300 . When I got two versions with different working schedules, normally, in Attendance, the gant view should show the unavaibilities by putting in gray days you're not working. . As the feedback shows, if you have two differents working schedules on two differents versions and two differents occupations period (contract dates), it's working fine. If, the two versions have the same occupation period (contract date), it's only considering the latest working schedule. . If both versions are under the same contract, then it only shows the working schedule on the latest version. This is not what we expect Instead, it should show the correct working schedule for each period Current behavior before PR: Desired behavior after PR is merged: . Modify _get_calendar_periods() method to return the correct working schedule for each period task-5473047 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where a specific product variant (white) wasn't consistently added to the cart during the subscription setup tour. The fix utilizes a click action instead of a checkbox, ensuring a more reliable and predictable user experience for subscription purchases.
Original PR description
In this commit we fix undeterministic error in tour sale_subscription_add_to_cart. We can see on https://runbot.odoo.com/odoo/error/234505 that variant white can not be always selected. For that we prefer use click action instead of check action.
This update fixes an issue where product documents weren't being added to PDF quotes after they were confirmed. Previously, confirmed quotes didn't include selected documents. Now, a new setting allows users to ensure all desired documents are always included in the PDF quote, improving the accuracy of sales materials.
Original PR description
Versions -------- - saas-18.2+ Steps ----- 1. Add product documents, headers or footers to a quotation; 2. confirm quotation; 3. print quotation. Issue ----- Extra documents aren't added to the PDF, even though they show up as selected in the quotation builder. Cause ----- As of commit b02f53d, any quotation documents linked to a sales order are simply ignored for confirmed orders. Solution -------- Add a `sale.always_include_selected_documents` config parameter, allowing users to keep including the selected documents on confirmed orders. opw-5242743 Forward-Port-Of: odoo/odoo#235778
This update resolves an issue with the 'leitweg-id' field in xRechnung invoices, ensuring accurate data transmission. The fix involved updating a helper function to correctly format this ID, which was previously missed by existing tests. This ensures compliance with invoicing standards.
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 ensures that variant names are correctly displayed on POS orders when a product is included in a combo. Previously, the system didn't show variant information for combo products with instantly generated variants. This fix corrects a technical issue related to how the POS system retrieves product details, improving the user experience and accuracy of order information.
Original PR description
In POS, if in a combo, one of option has instantly created variant it will not show the variant name in the order ### Steps to reproduce: * Create a product with instantly generated variants * Create…
In POS, if in a combo, one of option has instantly created variant it will not show the variant name in the order ### Steps to reproduce: * Create a product with instantly generated variants * Create a combo choice and add one of his variants * Create a combo product and add the combo * Open an store that sells this combo * Select the combo and choose the product with variant and confirm the selection Issue : On the left size in the order the variant name will not appear. ### Observation: When it tries to retrieve the attribute information for the variant https://github.com/odoo/odoo/blob/942b7a21d7e0eb15133f4af1b47e68f48dec70c7/addons/point_of_sale/static/src/app/services/pos_store.js#L1048 It is empty since during the call of computeComboItems the attribute was not retrieved for this scenario. https://github.com/odoo/odoo/blob/942b7a21d7e0eb15133f4af1b47e68f48dec70c7/addons/point_of_sale/static/src/app/models/utils/compute_combo_items.js#L31-L33 ------------ When adding a always variant to a combo they are considered like their own product, and attribute.extra_price should not be considered. The extra price for an always variant is setup in the combo with comboItem.extra_price like stand alone products. opw-5037355 Forward-Port-Of: odoo/odoo#239314 Forward-Port-Of: odoo/odoo#227176
This update fixes a previous issue where payments made on the website weren't properly reflected in the POS. Now, the POS automatically recognizes and accounts for payments made through ecommerce, creating down payment lines for existing orders. Additionally, fully paid orders without invoices won't appear in the POS to prevent duplicate payments.
Original PR description
Before, if you paid for something on the website with ecommerce, it would create a sale order with a transaction linked to it, but no invoice. So in the POS the order would show up in the…
Before, if you paid for something on the website with ecommerce, it would create a sale order with a transaction linked to it, but no invoice. So in the POS the order would show up in the Quotation/Order menu, but the POS didn't have any reference on the payment, so you would have to create another duplicate payment. Now the amount_paid (which is the amount already paid in transactions) is taken into account when calculating what's left to pay in the POS. So anytime you open a sale order in the POS it should create a down payment line for anything already paid on the website (the same as we were already doing for invoices). Also to avoid double payments, now the sale orders which have been already paid in full, even if they are not invoiced yet, will not show up in the POS. The invoice can still be created normally from the Sale app in Odoo. Task-5187602 Community PR-[#232841](https://github.com/odoo/odoo/pull/232841) Backport-[#96876](#https://github.com/odoo/enterprise/pull/96876) Original Task-5138081 Forward-Port-Of: odoo/enterprise#103350 Forward-Port-Of: odoo/enterprise#98029
This update resolves an issue where creating a new spreadsheet template within the Quality Control app would trigger a validation error due to a missing default name. The fix provides a default name, ensuring the template creation process functions correctly and users can easily create new spreadsheets.
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
This update ensures that downpayment accounts are correctly applied when calculating taxes externally (like Avatax). Previously, invoices always used the default income account, even with a downpayment account set. Now, the system prioritizes the downpayment account from the product category or falls back to the company's default if no category is defined, aligning with standard downpayment behavior.
Original PR description
**Problem:** When calculating taxes externally (such as Avatax) and a downpayment is made, the line on the invoice will always use the default income account, regardless of the downpayment account set as a company default. This is inconsistent with the standard behavior of downpayments, which will use the downpayment account set on the product's category instead of the income account (which themselves may come from company defaults). **Solution:** Check if there's a company default for downpayment account on product category and use this account for the downpayment line instead of the income account. opw-5171067 Forward-Port-Of: odoo/enterprise#101570 Forward-Port-Of: odoo/enterprise#101524