Daily updates from Odoo
Friday, January 2, 2026
26 changes · master
Resolved issues and error corrections
This update fixes a critical bug that caused Odoo to crash when sending invoices via Peppol with invoice lines lacking a product name. Now, the system gracefully displays an error message, guiding users to ensure each invoice line has a product or label before sending. This improves invoice processing reliability and prevents data loss.
Original PR description
Before this commit: When sending an invoice via Peppol with an invoice line that has no product name, the system crashes with a TypeError instead of showing a error message. Steps to reproduce: 1. Go to Accounting 2. Navigate to Customers > Invoices 3. Create a new invoice 4. Add an invoice line without entering a product name 5. Click 'Send' 6. Select 'by Peppol (Demo)' 7. Click 'Send' -> TypeError: 'NoneType' object is not subscriptable After this commit: System validates that the product name exists before accessing its text content. Users see a clear, error message: `Each invoice line should have a product or a label.` task-5432061 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241135 Forward-Port-Of: odoo/odoo#240908
This update ensures that inventory valuation lines are correctly generated when closing Point of Sale sessions using the Continental perpetual accounting method. Previously, lines were missing for orders not invoiced, creating an inconsistency between Anglo-Saxon and Continental accounting. This fix aligns the POS valuation process with best practices for perpetual inventory management.
Original PR description
Currently, in a continental perpetual setting for the stock valuation, the inventory valuation lines are not created when closing the session if the orders when not invoiced. Steps to reproduce:…
Currently, in a continental perpetual setting for the stock valuation, the inventory valuation lines are not created when closing the session if the orders when not invoiced. Steps to reproduce: ------------------- * Using My Belgian Company * In the settings search for inventory valuation * Set inventory valuation to Perpetual * Any cost method, AVCO for example * Set up valuation account and journal * Create a product * Type -> Goods * Track inventory by quantity * Set a purchase cost * Put some quantity on hand * Add category * In the settings of the category * Set up Stock account * Set up costing method, AVCO for example * Set inventory valuation to perpetual * Open pos session * Make an order for the product, put partner, invoice it * Close session, go to session journal items > Observation: Valuation lines are present * Open pos session * Make an order for the product, no partner, no invoice * Close session, go to session journal items > Observation: Valuation lines are missing. Why the fix: ------------ When the company is set with perpetual inventory valuation, in the context of the point of sale, there should not be any difference between anglo saxon and continental accounting. When we check the same flow with anglo-saxon, there is no difference for the creation of the inventory valuation move line whether we invoice the order or not. Inventory valuation lines are always present. Valuation entries are created in `_create_stock_valuation_lines()` if information is available regarding `stock_valuation`. https://github.com/odoo/odoo/blob/51f1982367809581530e4d126ed515c0df6c4daa/addons/point_of_sale/models/pos_session.py#L1258-L1273 The information for `stock_valuation` is supposed to be computed in `_accumulate_amount()`. However this is currently only computed when we have the anglo saxon accounting: https://github.com/odoo/odoo/blob/51f1982367809581530e4d126ed515c0df6c4daa/addons/point_of_sale/models/pos_session.py#L953 Instead we will now only check if the company is valuating the inventory in real time. We also apply the same fix on paid orders we want to invoice afterwards. opw-5167946 Forward-Port-Of: odoo/odoo#240176
This update corrects a technical error that occurred when duplicating Odoo databases. The change ensures the system handles recordsets larger than one, preventing a 'Expected singleton' error. This improves database stability and reliability during backups and restores.
Original PR description
These two computes assume a recordset of size 1. When duplicating databases, the recordset for this method might be more than 1, causing a "Expected singleton" traceback. See opw-5226545 (and linked TOTD thread) Forward-Port-Of: odoo/enterprise#103033 Forward-Port-Of: odoo/enterprise#99424
This update ensures invoices exported with foreign VAT numbers (e.g., for EU Distance Selling) accurately reflect the correct VAT information in the PDF invoice and the underlying XML file. Previously, the company's VAT was used instead of the appropriate foreign VAT, leading to potential discrepancies. This fix improves invoice accuracy and compliance.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (ex: l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. opw-5182837 Forward-Port-Of: odoo/odoo#241436 Forward-Port-Of: odoo/odoo#236692
This update fixes an issue where users could inadvertently change product taxes when items were already in their shopping cart. Now, users can still modify product details, ensuring consistent tax calculations and order accuracy. This improves the overall reliability of the point-of-sale system.
Original PR description
- When a product is already in the cart, prevent updating its taxes from the frontend product edit popup. This avoids inconsistencies between the product taxes and the taxes applied to the order line. - Now we can still edit other fields of the product. task-id: 4943650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239867
This update fixes an issue where spreadsheet metadata wasn't being correctly retrieved. The code has been moved to the appropriate module, spreadsheet_edition_account, ensuring accurate metadata is now available for spreadsheet functionality. This improves the reliability of spreadsheet reports and data integration.
Original PR description
This commit moves the override of _get_spreadsheet_metadata to the correct module, spreadsheet_edition_account. 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#241653
This update corrects the location of a key function within the Enterprise module, ensuring accurate retrieval of spreadsheet metadata. This resolves a previous issue and enhances the reliability of spreadsheet integration within the accounting system. It's a minor technical adjustment.
Original PR description
This commit moves the override of _get_spreadsheet_metadata to the correct module, spreadsheet_edition_account. Forward-Port-Of: odoo/enterprise#103054
This update resolves an error that prevented users from opening the employee form within the Point of Sale (POS) frontend. The fix disables the employee selection field on the frontend only, allowing the backend to function correctly where all necessary data is available. This ensures a smooth user experience for POS operations.
Original PR description
Opening employee form in the frontend was throwing an error, since not all thre required assets were available on the PoS frontend. So in this commit 57aba149b6e6927f9055124e58bed03f842329d5, we disabled openening the employee form by making the employee_id field unclikcable, both in forntend and backend!! It was enough however to only macking it unclikcable on the frontend, since it was working fine on the backend where all the required assets were loaded anyway. This commit restores the functionality on the backend, but overriding the `Many2OneField` used by the `employee_id`, and making it unclickable only on the frontned. opw-5252486 Forward-Port-Of: odoo/odoo#241793 Forward-Port-Of: odoo/odoo#241100
This update corrects a problem where product names were duplicated on delivery slips when a kit's component lacked a description. The fix ensures that product names appear only once on delivery slips, improving the accuracy and clarity of shipping documents. This resolves an issue impacting sales order fulfillment.
Original PR description
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with…
When creating a delivery slip, if the product sold is a kit and it's component doesn't have a description, the name will be repeated. Steps to reproduce: ------------------- * Create a product A with a bom of type kit * Add a product "comp" in the bom (don't give it a description) * Create a sales order with the product A and confirm it * Go on the delivery and create a delivery slip -> Issue, the name of the product "comp" appears twice. Observation: ------------- The name is added in description_picking field, since it is considered that the fallback for the description for outgoing deliveries should be display_name: https://github.com/odoo/odoo/blob/584f94e3246b6b59641bf83d4e707f2e872bc1e8/addons/stock/models/product.py#L293-L301 In _compute_description_picking, information about the bom will be added : https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/mrp/models/stock_move.py#L235-L236 This causes the issue because the filter to prevent repeating the name on the delivery slip is implemented directly in the XML: https://github.com/odoo/odoo/blob/08c5fbbb5bc44c4810cd07188b29090c3060e14f/addons/stock/report/report_deliveryslip.xml#L83-L85 However, since we have added elements to the description (the bom information), this filter will not be applied, leading to the repeated name. opw-5265906 Forward-Port-Of: odoo/odoo#236948
This update fixes usability issues with hidden channels in the Odoo discussion platform. It adds a clear button to find hidden conversations and automatically repins conversations when opened, eliminating the previous 'hide' action. The design has also been refined for better clarity and consistency.
Original PR description
1. Discoverability of "hidden channels" was poor in just ctrl-k => Added a new button at bottom of discuss sidebar with "View hidden conversations". 2. When opening a hidden conversation, it's not possible to "undo" the hide. => Automatically repin conversation when opening the conversation. 3. Hide action was in same group as "Leaving", which is confusing because the actions are quite different as shown by color. => Moved "Hide conversation" action in its own group just above the highly destructive action like "Leave" but below settings actions. 4. Iconography of action is poor with a cross icon => use fa-eye(-slash) that matches more the semantics of action. Task-5431819 <img width="506" height="857" alt="Screenshot 2025-12-19 at 15 34 35" src="https://github.com/user-attachments/assets/453258bb-e83d-49db-986e-9c1c74eafc8d" /> Forward-Port-Of: odoo/odoo#240716
This update resolves minor usability issues related to the new channel hiding feature within WhatsApp. The changes enhance the user experience by addressing visual inconsistencies and improving the overall flow when hiding channels. This ensures a smoother and more intuitive experience for users.
Original PR description
Task-5431819 Forward-Port-Of: odoo/enterprise#102594
This update prevents visitor conversations within live chat from displaying the sender's IM status. This change addresses a recent accidental issue and improves the user experience for visitors. The fix ensures a cleaner and more focused chat interaction.
Original PR description
Before this commit, IM status was visible by livechat visitor. This issue comes from recent accidental regression [1]. [1]: https://github.com/odoo/odoo/pull/234715 Task-5435992 Before / After <img width="384" height="129" alt="Screenshot 2025-12-22 at 14 19 14" src="https://github.com/user-attachments/assets/6fb80a49-f04c-4db1-aa9a-254146a313b5" /> <img width="379" height="129" alt="Screenshot 2025-12-22 at 14 19 37" src="https://github.com/user-attachments/assets/10308a02-7370-4818-8bf5-cd1513a1a964" /> Forward-Port-Of: odoo/odoo#240927
This update resolves an error that prevented users from paying invoices when an invoice line lacked a due date. The fix ensures the system correctly handles invoices with multiple payment terms and due dates, preventing a 'date' vs. 'boolean' comparison error. This improves the reliability of the invoice payment process.
Original PR description
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting`…
Currently, an error occurs when a user attempts to pay an invoice. **Steps to Reproduce ([Video](https://drive.google.com/file/d/1onmo1mxeZgH6fkQOoueGCgC67HPjYHX6/view)):** - Install the `Accounting` module. - Go to `Payment Terms` and create `a new Payment Term` with at `least two Due Term lines`. - Go to `Invoices` and `create a new Invoice`. - Add one invoice line and set the `Payment Term` to the `newly created payment term`. - In the `Journal Items` tab > `Enable the Due Date` column (optional hidden). - From the two `Receivable journal items`, remove the `Due Date` from one of the `receivable lines`. - Now `Confirm the invoice` and `Click on Pay`. **Error:** `TypeError: '<' not supported between instances of 'datetime.date' and 'bool'` **Cause:** This error occurs when the user clicks Pay, than it going to calculate the total amount to pay from here [1]. If the payment term has more than one term line, it creates more than one receivable invoice line, and the receivable invoice lines are sorted from here [2]. When two or more invoice lines have the same move_id, they are sorted based on the due date. However, if one of the receivable lines does not have a due date, the error is raised. Similarly, as shown in [3], when the system retrieves the installment data, it sorts the lines based on the due date and raises the same error. **Fix:** This commit ensures that when there is no due date on any receivable invoice line and two lines belong to the same invoice, the comparison uses the maximum date as like here [4] and places that line at the end for that invoice, thereby maintaining the correct flow. The same fix is applied while retrieving the installment data, as described above. [1]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L703 [2]- https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/wizard/account_payment_register.py#L635 [3]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L3305 [4]: https://github.com/odoo/odoo/blob/92a9f6b19670685dfe9fb1714bf01449768e5f62/addons/account/models/account_move_line.py#L522 sentry-713241246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241744 Forward-Port-Of: odoo/odoo#241060
This update resolves an issue where clicking on bookings in the Gantt view was causing errors. The underlying website structure changed, breaking a key reference point used in the application. This fix directly updates the application's code to correctly identify the booking element, ensuring bookings can be accessed reliably.
Original PR description
### Steps to reproduce 1 - Create a booking. 2 - Go to Gantt view. 3 - Click on the booking, traceback occurs. --- The popover footer no longer contains an inner wrapper div, which broke existing xpath inheritance. See: https://github.com/odoo/enterprise/pull/101482 This PR updates the xpath to target the popover-footer container directly. Task-5445909 Forward-Port-Of: odoo/enterprise#102983
This update ensures that changes to product descriptions within Odoo are now correctly reflected in the UrbanPiper system during menu synchronization. Previously, updates to product descriptions weren't consistently propagated to UrbanPiper, leading to outdated information. This fix improves data accuracy for our integrations with UrbanPiper.
Original PR description
Before this commit: --- When we sync the menu with the product description and later update the product description, re-syncing the menu does not update the product description in UrbanPiper. After this commit: --- This fix ensures that any change in the product description is properly sent to UrbanPiper during menu synchronization. task-5439271 Forward-Port-Of: odoo/enterprise#102946 Forward-Port-Of: odoo/enterprise#102846
This update resolves a random error that prevented the point-of-sale tip tour from running correctly. The issue stemmed from the tour not waiting for the confirmation screen to appear after the tip was validated. This fix ensures the tour consistently functions as expected, improving the customer experience.
Original PR description
The PosTipAfterPaymentTour tour would fail randomly because it was not waiting for the feedback screen to be shown after validating the tip screen. runbot-234734 Forward-Port-Of: odoo/odoo#241661
This update simplifies point-of-sale printer settings. Previously, complex configurations led to issues with printer prioritization. Now, the system automatically uses the default receipt printer selected, and the settings interface is streamlined to only show valid receipt printers.
Original PR description
Previously, when an Epos IP and for IoT devices were configured both in one pos config , the Epson printer was prioritized over IoT devices, and a warning message was displayed to notify the user. This behavior has been removed. Printers are no longer managed this way, and the default receipt printer is now always the one selected for printing. Also, the filter for the default receipt printer in the res settings has been adjusted to display only receipt printers in the available field. enterprise pr: https://github.com/odoo/enterprise/pull/102673 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240916
This update removes a confusing warning message related to printer configurations in the Point of Sale system. Now, the default receipt printer is automatically selected, simplifying the setup for users. This change ensures consistent receipt printing across all devices.
Original PR description
Previously, when an Epos IP and for IoT devices were configured both in one pos config , the Epson printer was prioritized over IoT devices, and a warning message was displayed to notify the user. This behavior has been removed. Printers are no longer managed this way, and the default receipt printer is now always the one selected for printing. Also, the filter for the default receipt printer in the res settings has been adjusted to display only receipt printers in the available field. community pr : https://github.com/odoo/odoo/pull/240916 Forward-Port-Of: odoo/enterprise#102673
A recent change temporarily removed image alignment options from the Odoo builder. This commit has reverted that change, restoring the familiar functionality. These options will be permanently removed once a new 'image toolbar' is fully implemented.
Original PR description
Commit [1] removed the image options from the sidebar because a task is planned to move these image alignment options to a new "image toolbar". Merging that commit before the toolbar task was ready was not a good idea, as it leaves us without these options for a long period of time. With this commit, we restore the image alignment options in the sidebar. These options will be removed only when they can be properly moved to the new image toolbar. [1]: https://github.com/odoo/odoo/commit/101d0c782cec6a7b5dadf062c75828aefff2e8a7 Forward-Port-Of: odoo/odoo#241766
This update resolves an issue where VAT reports for Belgian companies were incorrectly setting the 'Client Nihil' field to 'YES' outside of the year-end. The fix reintroduces a checkbox option for this setting, aligning with Belgian regulations. This ensures accurate VAT reporting and avoids potential compliance issues.
Original PR description
## Issue: When exporting the XML for a VAT return, the client nihil field was incorrectly set to YES According to Belgian regulations, this is only allowed on the last report of the calendar year…
## Issue: When exporting the XML for a VAT return, the client nihil field was incorrectly set to YES According to Belgian regulations, this is only allowed on the last report of the calendar year https://finances.belgium.be/sites/default/files/downloads/165-625-directives-2019.pdf ## Cause: Prior to 18.3, nihil was a checkbox option on export Since 18.3, it is automatically selected based solely on a price formula, without checking the report’s date This PR brings back the Client Nihil checkbox in 19.0 But didn't change the default value Causing the issue to still be present https://github.com/odoo/enterprise/pull/99496 ## Steps to reproduce: - Select the Belgian company - Open the Tax Return and select the VAT Return - Click Returns and enter an opening date in January - Click Review for the first available report - Ignore errors and return to previous page - Click on Submit -> Download XML - Before the fix, ClientListingNihil is set to YES ## Potential remaining issue: The legal document specify that it should also be checked in case of "cessation d’activité" So it may be interesting to consider adding the option back opw-5184056 Forward-Port-Of: odoo/enterprise#102482 Forward-Port-Of: odoo/enterprise#98982
This update ensures that new booking forms created through the POS system begin with an empty name field. Previously, the form might automatically populate with a default value, which was causing confusion for users. This change simplifies the booking process and ensures consistency.
Original PR description
In this commit: --------- - Ensure the booking form opens with an empty name when created from POS. - Prevents unwanted auto-filled values during create flow. Task-5431520
This update resolves a technical issue impacting the accuracy of payroll calculations for Belgian employees within the Enterprise module. The fix corrects a 'DDP' error, ensuring that salary figures are correctly processed and reported according to Belgian tax regulations. This improves the reliability of payroll reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#102867 Forward-Port-Of: odoo/enterprise#102787
This update corrects a formatting error in a notification message that was causing incorrect punctuation. Specifically, the message was incorrectly displaying "Done!. rest of the message." The fix removes the exclamation mark, ensuring messages are displayed correctly. Additionally, the word "Done" has been translated for internationalization.
Original PR description
Issue: a notification used the title field with "Done!" and a message. The issue is that a title and message are separated by a period, resulting in "Done!. rest of the message." Solution: remove the exclamation mark Note: Added translation of "Done" Task-5420416 Forward-Port-Of: odoo/enterprise#103026
This update resolves a technical error in the Point of Sale module that prevented accurate price displays. The fix ensures that the 'pricer_display_price' field is correctly populated, improving the reliability of product pricing within the POS app. This change was necessary due to an underlying issue with how Odoo's ORM handles computed fields.
Original PR description
**Step to reproduce:** 1. Install pos_pricer module: 2. Open the Point of Sale app and create a product. 3. Go to the Product Variants menu. 4. Open that product. 5. Activate developer mode. 6. Click…
**Step to reproduce:** 1. Install pos_pricer module: 2. Open the Point of Sale app and create a product. 3. Go to the Product Variants menu. 4. Open that product. 5. Activate developer mode. 6. Click on the Bug icon (top-right corner). 7. Click on Data. **Issue:** A traceback is raised with the error: `Compute method failed to assign product.product(191,).pricer_display_price` The method `_compute_pricer_display_price` was removed in this commit https://github.com/odoo/enterprise/commit/87b1672ac7c1d27cd9eab05138b78f6a9439fea7 , and was reintroduced in a later commit https://github.com/odoo/enterprise/commit/4575d3dfdbd0ccd9bf57bddbd35a89bd47c48798 to avoid the AttributeError. **Cause:** The computed field `pricer_display_price` is a type Char and and is non-stored was not being assigned a value inside the compute method. So ORM requires that records to be assigned a value in a compute method. **Solution:** To fix this, assign a default value to `pricer_display_price` inside the compute method to prevent the error. opw-4887318 Forward-Port-Of: odoo/enterprise#90676 Forward-Port-Of: odoo/enterprise#88517
This update clarifies the dependencies within the Brazilian tax reporting module (l10n_br_edi_sale_fiscal_reform). Previously, the module relied on several indirect dependencies, which has now been explicitly defined. This ensures the module functions correctly and avoids potential compatibility issues.
Original PR description
l10n_br_edi_sale_fiscal_reform depends on l10n_br_edi_sale, which depends on both l10n_br_edi and sale, but not explicitly on l10n_br_avatax_sale. runbot-exception-762 [runbot-error-237690](https://runbot.odoo.com/odoo/runbot.build.error/237690) Forward-Port-Of: odoo/enterprise#103117
This update corrects a typo in the dashboard name and updates the labels for key scorecards to use more accurate terminology ('Avg revenue per guest' and 'Avg revenue per order'). These changes improve the dashboard's readability and provide more precise data insights for restaurant performance analysis.
Original PR description
Desired behavior after PR is merged:
- Fix typo in first sheet name: 'Dahsboard' -> 'Dashboard'.
- Rename scorecards to reflect average values:
- 'Total revenue per guest' -> 'Avg revenue per guest'.
- 'Total revenue per order' -> 'Avg revenue per order'.
Task: [5447108](https://www.odoo.com/odoo/project/2328/tasks/5447108)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241838
Forward-Port-Of: odoo/odoo#241598