Daily updates from Odoo
Monday, July 28, 2025
36 changes · saas-18.3
Resolved issues and error corrections
Corrects an issue where invoicing a closed point-of-sale order could fail when cash rounding was enabled only for cash payments and the customer used a mix of bank and cash payment. This helps businesses avoid blocked invoices and accounting imbalance errors in affected POS sessions.
Original PR description
Before this commit, an imbalance entry error occurred when invoicing a posted order under specific conditions. This issue arose when cash rounding was enabled only for the cash payment method, but the order was paid using both bank and cash. For example, if an order had a total of 12.91, and was partially paid with a bank transfer of 15.59, resulting in a cash return of -2.70, the session could be closed. However, attempting to invoice this order after closing the session would fail due to the imbalance. opw-4912399 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218430
Fixed an issue where customers who already had loyalty points could still claim a reward after the program's maximum usage limit had been reached in the current Point of Sale session. This helps ensure promotional limits are applied consistently and prevents unintended extra reward redemptions.
Original PR description
When an existing partner with points tries to claim a reward from a loyalty program that has reached its max usage in the current session, he was still able to claim the reward. Steps to reproduce: ------------------- * Create a loyalty program with max usage set to 1 * Create a partner and assign points to him * Open PoS and select any partner and make an order * Claim the reward from the loyalty program * Select the partner that already has points * Make an order and try to claim the reward again > Observation: The reward can be claimed, even though the max usage is already reached. Why the fix: ------------ When updating programs, we were not removing the couponPointChanges for programs that are not applicable anymore. We now make sure to delete them when the program is not applicable anymore. opw-4805704 Forward-Port-Of: odoo/odoo#220460 Forward-Port-Of: odoo/odoo#218425
The Calendar app’s “Attending?” filter now correctly shows events based on the current user’s attendance status, such as declined events. This fixes searches that previously returned no results, helping users find and manage relevant meetings more reliably.
Original PR description
The filter on an event's "Attending?" status was not working correctly. When filtering, the search would always return an empty result set because the underlying search implementation was logically flawed. It incorrectly compared calendar.event IDs with calendar.attendee data, which could never match. This commit corrects the `_search_current_attendee` method to properly query the `calendar.attendee` model. It now finds the intersection of attendees that both belong to the current user and match the filter criteria (e.g., state is 'declined'). It then uses these results to return the correct parent calendar events. A unit test has been added to verify the filter now works as expected. opw-4892386 Forward-Port-Of: odoo/odoo#218878
This change updates a point of sale test so it no longer depends on demo data being present. It helps ensure automated checks run consistently, reducing false failures during development and release validation.
Original PR description
Before this commit: = - The test `test_quantity_package_of_non_basic_unit` used `product_uom_inch`, which is `archived` by default, causing the test to fail without demo data. - It only worked with demo data because `l10n_us_account` `unarchives` this UoM. After this commit: = - Created a **test UoM** to ensure consistent test behavior. Runbot-error: 223122 Forward-Port-Of: odoo/odoo#214547
This fix lets Odoo hide or disable image transformation controls in contexts where they do not work, such as PDF reports. It prevents users from applying changes that would be ignored, reducing confusion and improving editing reliability.
Original PR description
Problem: In some contexts, such as reports, the `transform` option is not needed or applicable. For example, `transform` is not supported by `wkhtmltopdf`, so any applied transformation is ignored. Solution: Introduce the ability to disable the `transform` option when needed. opw-4809761 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220110 Forward-Port-Of: odoo/odoo#218352
Paid orders created through QR-code self-ordering now appear correctly in the POS ticket list. Staff will see the proper paid status and refund action, reducing confusion when handling already-paid customer orders.
Original PR description
**Steps:** - Configure POS with self-ordering via QR code and online payment. - Open a session and place a paid order through self-ordering. - In the POS UI, open the TicketScreen and apply the "Paid Orders" filter. **Issues:** - The paid order does not show the "Paid" tag. - The "Load Order" button appears instead of the "Refund" button. **Cause:** - The paid order retains an outdated uiState, with `uiState.locked` incorrectly set to false. **Fix:** - Use `finalized` instead of `uiState.locked` to determine order state on TicketScreen. - Remove the unused `locked` property from `uiState` in posOrder. Task: 4745869 Related: odoo/enterprise#86684 Forward-Port-Of: odoo/odoo#220193 Forward-Port-Of: odoo/odoo#207406
This update prepares Odoo for newer platform versions, including Python 3.13 and Debian Trixie, by adjusting dependencies and internal compatibility checks. It helps keep deployments reliable on upcoming operating system environments while also aligning tests with changed Python and library behavior.
Original PR description
Forward-Port-Of: odoo/odoo#220147 Forward-Port-Of: odoo/odoo#219270
This fix makes Odoo more accurately decide when users are allowed to publish website pages and partner-related content. It prevents misleading publish options from appearing when the user does not have the right access, reducing confusion and failed publishing attempts.
Original PR description
*: website_crm_partner_assign, website_customer, website_membership, website_partner Commit [1] (alongside commits [2] and [3]) introduced a new context key `can_publish_unsudo_main_object` with the…
*: website_crm_partner_assign, website_customer, website_membership, website_partner Commit [1] (alongside commits [2] and [3]) introduced a new context key `can_publish_unsudo_main_object` with the goal of properly computing `can_publish` without sudo... but it missed using it properly. The related test was passing... because it was also not properly written. This commit fixes the issue by using the context key at the proper places. However, this limits the fix to pages and partners at the moment as the bug is not critical in stable versions. It however fixes a test while run in no-demo (which becomes the norm in later versions). With that in mind, this also changes the view (by *adding* things to be as stable as possible) to go around the use of the context key and make new databases properly compute `can_publish` for all records type. Old databases will keep the old behavior for some models, which leads to displaying the "Publish" button but not be able to use it (access right warning). [1]: https://github.com/odoo/odoo/commit/d47d824fc484e1592fc4af8d0d378d5a4a579550 [2]: https://github.com/odoo/odoo/commit/1a83b2508b9383e2b7df192f8641751f71f852da [3]: https://github.com/odoo/odoo/commit/436a167dedb2ed008bcb88e8a4eccafc8d20812c Related to runbot-161791 Forward-Port-Of: odoo/odoo#220292 Forward-Port-Of: odoo/odoo#219389
Vendor bills created before goods are received now calculate foreign-currency amounts using the full billed quantity, not just one unit. This also prevents small unwanted exchange differences when the related receipt is later validated, improving accounting accuracy for purchase workflows.
Original PR description
**Current behavior:** Creating a purchase order in a foreign currency and billing the product prior to reception will produce 2 issues: A) The bill line for the product will only make a conversion of…
**Current behavior:** Creating a purchase order in a foreign currency and billing the product prior to reception will produce 2 issues: A) The bill line for the product will only make a conversion of 1 single unit of the product with the defined currency exchange rate, making the amount on the line incorrect when qty > 1 B) When the receipt is finally validated, there will be an unwanted exchange difference on the journal items generated due to asymmetrical rounding for the bill AMLs and receipt valuation AMLs **Expected behavior:** Correct bill line currency amounts and symmetric rounding. **Steps to reproduce:** 1. Set the company currenct to IQD, make a product invoiced on ordered qty, for sake of example set cost to 500 IQD 2. Create a currency exchange record to USD with a company rate of `0.00756` 3. Create a PO for 13 of the product created in step 1, with a discount of 1% 4. Confirm the PO and create the bill -> post it * Issue A) look at invoice line, see only 1 unit in the converted currency amount is accounted for by the `balance` 5) Receive the product -> look at the journal items generated and see that there is a diff of 0.185 IQD **Cause of the issue:** A) commit: 90158f6 added a method to try and calculate an AML balance from its purchase line values, but mistakenly is using `qty_received` instead of `qty_to_invoice` which explains why this issue only presents for the bill-before-receipt flow B) commit: 9f046d5 is using `round=False` context for `AccountTax.compute_all()` when the expected key is `round_base` **Fix:** A) Replace `qty_received or 1` with `qty_to_invoice` * Also make the test added in 90158f6 more robust B) Add `round_base=False` alongside the `round` key (not removing as that existing one could have become expected in this context) opw-4689170 Forward-Port-Of: odoo/odoo#216898 Forward-Port-Of: odoo/odoo#205850
This fixes two editor issues that could disrupt content editing: pasted list items now keep the correct structure, and bold or italic formatting can be removed even when selected text includes line breaks. The change makes website and HTML editing more reliable for users working with copied content and multi-paragraph selections.
Original PR description
**Current behavior before PR:** **Issue 1:** - Paste a content with multiple `<li>` elements without `ol/ul` tag, each `<li>` having a paragraph element inside. - Try to create a list from these…
**Current behavior before PR:** **Issue 1:** - Paste a content with multiple `<li>` elements without `ol/ul` tag, each `<li>` having a paragraph element inside. - Try to create a list from these elements. - List is created with wrong element structure. The problem occurs because when pasting multiple `<li>` elements without an `<ol>/<ul>` tag, `sanitizeNode` replaces existing `<li>` elements with new `<p>` elements. Since each `<li>` already contains a `<p>`, this results in paragraphs being nested inside other paragraphs. As a result, creating the list from these paragraphs leads to an incorrect structure. **Issue 2:** If there are multiple paragraph selected along with newline character nodes `(\n)`, it is not possible to remove bold or italic format from selected content using toolbar. The issue happens because `isSelectionFormat` method fails to give correct value if traversed nodes contains one or more newline `(\n)` characters. **Desired behavior after PR is merged:** **Issue 1:** Now, if an `<li>` contains a `<p>`, the `<li>` is unwrapped instead of creating a new paragraph, resulting in a correct element structure when creating a list. **Issue 2:** Now, `\n` nodes are filtered from traversed nodes so that format can be removed from selected content. task-4752385 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217361 Forward-Port-Of: odoo/odoo#208127
This fix prevents valid product combinations from being incorrectly blocked in Point of Sale after an attribute line is removed from a product. It helps ensure staff and customers can continue selling available variants without disruption in POS and self-order flows.
Original PR description
Before this commit, removing an attribute line from a product would inadvertently prevent the sale of any combination in the PoS interface. opw-4947529 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219251
Reception report PDFs with many products now print cleanly across multiple pages. This prevents product rows from overlapping with section headers, making longer warehouse reception reports easier to read and use.
Original PR description
## Short functional explanation of the error When printing a reception report containing a lot of products, the top row of the pages after the first one is overlapped with its corresponding header in…
## Short functional explanation of the error When printing a reception report containing a lot of products, the top row of the pages after the first one is overlapped with its corresponding header in the resulting PDF. ## Reproduction Steps 1. Open the settings. In the inventory section, enable "Reception Report". 2. Create a new quotation and add at least 40 different products. Each product should have at least 1 copy in stock, and the quantity to order must be greater than the quantity we have of this product in stock. 3. Confirm the sales order. 4. Create a new purchase order and add the exact same products you added in the quotation. 5. Confirm the order and click on the "Recept" smart button. 6. Click on the "Allocation" smart button and click on the "Assign all" gray button. 7. Click on print and open the PDF once it finishes downloading. ### Expected behavior Each row (corresponding to the reception of a product) and its corresponding header is printed properly, regardless of how many pages constitute the report. ### Unexpected behavior The PDF has more than one page, and on the top of the second page, the product row is overlapped with the header of its corresponding section. ## Origin of the issue It comes from an issue with WKHtmltopdf itself: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1524 The report uses the "thead" tag for the headers. However, in some cases, when the header is linked to a table dynamically (with for-each, for example), WebKit ignores or breaks the "Thead" behavior. ## Explanation of the fix I override the default behavior of thead, which repeats the header automatically at each new page, with a new style. Now, the "Thead" special behavior is ignored and treated like ordinary lines. The header isn't shown at each new page anymore, avoiding the overlapping of product rows. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215398
This fix keeps the website editor toolbar from adding unwanted blank space below the page footer when it is hidden. It improves page layout consistency for users editing website content without changing visible functionality.
Original PR description
Description of the issue/feature this PR addresses: - Commit [189a7c96](https://github.com/odoo/odoo/commit/189a7c96e6e26825dc05c0c6466576fe63aa091e#diff-de0d67e89972b45b101a9c4b04f316824314b0d69aba6208528586f1edb4f01cL25-L40) moved scrollbar from `#wrapwrap` element to `<body>`, caused the space below the footer visible for the floating toolbar. Current behavior before PR: - Space below the footer was always visible, even when the toolbar was hidden. Desired behavior after PR is merged: - `top: 0;` is applied on `.oe-toolbar` to ensure it stays out of the layout flow. - This prevents unnecessary layout space and ensures correct toolbar positioning. task-4652202 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217270
This change removes an unnecessary database index for project collaborators because an existing uniqueness rule already supports the same lookup. It simplifies database maintenance without changing how users work with projects.
Original PR description
There is a unique constraint `_unique_collaborator`, whos first key is `project_id`, which will cover the necessity for an explicit index on `project_id` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale invoices now automatically include the related order name in the Customer Reference field. This makes backend invoice records easier to identify and reconcile after invoiced POS sales.
Original PR description
## Short functional explanation of the error When selling items in the point of sale module with an invoice, when we check said invoice in the backend, the customer reference field is empty. ##…
## Short functional explanation of the error When selling items in the point of sale module with an invoice, when we check said invoice in the backend, the customer reference field is empty. ## Reproduction Steps 1. Go to Point of sale and open a shop interface. Add a random item to the basket and select a customer. 2. Click on payment, then check Invoice, select a payment method, and Validate. 3. Click on the hamburger menu on the top right and click on Backend. 4. Hover the box of the shop you opened with your mouse. In the top right corner of the box should appear a 3-dot menu. Click on it and click on Sessions. 5. Click on the latest session ID. On the top of the page, click on the "Orders" smart button. 6. Click on the order you just finalized. On the top of the page click on the "Invoice" smart button. 7. Click on "Other info" tab. ### Expected behavior The Customer Reference field should be filled with the name of the order. ### Unexpected behavior The Customer Reference field is left empty. ## Origin of the issue When setting the values for the invoice, the field 'Ref' was absent. opw-4732492 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218158
This fixes an error that could appear when moving the final item from one table of contents block into another on a website page. Website editors can now reorganize these blocks without interruptions or crashes.
Original PR description
Since [1], a traceback appears when we drag the last block of a table of content into another one. Drag and drop two tables of content on the website page One by one, drag and drop the blocks from the second table to the first one traceback for the last one... This commit resolves the issue [1]:https://github.com/odoo/odoo/commit/6cd9606e285741b59042b9674bf6682273c43a69 task-4144022 Forward-Port-Of: odoo/odoo#180039
Fixes an issue where the drag-and-drop upload area stayed visible after users added documents to Expenses. After an upload or drop, users are returned to the expense list so they can see the generated expenses, even if OCR processing fails.
Original PR description
When dropping documents on Expense, the drop zones would stay being displayed. We now stop to display it when a file is uploaded / dropped. task-4942503 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Reordering rules now respect the replenishment unit of measure, so purchase orders and related warehouse transfers match how vendors actually sell products. This also improves quantity rounding for packaged goods and prevents manufacturing orders from being updated with quantities in the wrong unit.
Original PR description
**PROBLEM** 1. When setting up a product with vendor that sell the product in different packaging, when triggering the reorder, the PO use the stock UoM instead of the replenishement UoM. 2. Once the…
**PROBLEM** 1. When setting up a product with vendor that sell the product in different packaging, when triggering the reorder, the PO use the stock UoM instead of the replenishement UoM. 2. Once the first issue is fixed, we can notice the packaging quantity in the picking order is not exactly what it should be (rounding error of 0.01). 3. Once the first issue is fixed, there is a failing test concerning the manufacture procurement route. **STEP TO REPRODUCE** 1. activate the UoM and packaging option. 2. create a product with a vendor that sells it in a packaging. 3. create a reordering rule with the replenishement UoM being the packaging unit. 4. trigger the reordering, notice the PO doesn't use the right unit and the picking doesn't use the right packaging. (Same steps to reproduce, just revert my change on stock_move.py before) (To reproduce the 3rd issue, run the test in odoo/addons/sale_mrp/tests/test_sale_mrp_procurement.py) **CAUSE** The procurement for the reordering rule is always created with the stock UoM. The `_compute_packaging_uom_qty` method doesn't specify the rounding_method to use when converting from the product uom to the replenishment uom. By default, it uses the 'UP' method. The _run_manufacture method has a bug: when there is a new procurement for a product that has already a mo opened, it will try to update the mo quantity. To do so, it calculate a new quantity, by adding the previous quantity and the procurement quantity, but it assumes the quantity is in the product default uom which is not always the case (for example, when there is a replenishment UoM set on the reordering rule). **FIX** 1. If a remplenishement uom exists on the reordering rule, we create the replenishement with this unit instead of the stock one. 2. Use the 'HALF-UP' rounding method, to reduce the rounding error. 3. Converting the procurement quantity into the product default UoM before computing the new mo quantity. opw-4858992
The bank reconciliation widget now only suggests statement lines that are still waiting in the suspense account. This prevents already assigned bank statement lines from reappearing as possible invoice matches, reducing confusion and avoiding duplicate reconciliation work.
Original PR description
Create a bank statement line with partner A Assign it to a random account Create an invoice with partner A Confirm it. => The statement line appears It should not, it has been assigned. Only lines that are still on the suspense account should be taken into account --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The view-switching shortcut label now stays clearly visible when users change views with Shift + V. This prevents the shortcut hint from overlapping the active view button, making the interface easier to understand and use.
Original PR description
Previously when switching views using the hotkey, the hotkey (SHIFT + V) was not properly visible, it was overlapping with the active view button. After this commit the hotkey (SHIFT + V) will be visible and not overlap with the active view. task-4828401 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217639
When a salesperson changes the product on a quotation line after manually editing its price, Odoo now recalculates the price for the newly selected product. This prevents quotes from accidentally keeping the old product’s price, improving pricing accuracy for sales orders.
Original PR description
step to reproduce - Create a quotation, - Select a product - Update the price manually - change the product - The amount stays the same expectation: with change of product in SO, price should also recompute issue: currently,`_compute_price_unit` depends on `technical_price_unit` such that `price_unit` won't update if `price_unit` and `technical_price_unit` are not same. which is the case when price_unit was manually set, regardless of the product https://github.com/odoo/odoo/blob/12ef230df58122fbdac0b4c1b4781c535b8516ba/addons/sale/models/sale_order_line.py#L567-L570 we should reset to original price with change of product opw-4813069 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218192 Forward-Port-Of: odoo/odoo#213912
Fixes an error that could block users from sending multiple invoices at once when the invoice email template had custom recipients configured. This helps accounting teams send invoices in bulk reliably without manual workarounds.
Original PR description
Currently, an error occurs when sending invoices in bulk. Steps to Reproduce: - Install the `account` module. - Go to `Email Templates` and open `Invoice: Sending`. - In the `Email Configuration`,…
Currently, an error occurs when sending invoices in bulk. Steps to Reproduce: - Install the `account` module. - Go to `Email Templates` and open `Invoice: Sending`. - In the `Email Configuration`, uncheck `Default Recipients` and enter `demo@gmail.com` in the `cc` field. - Go to `Invoices`. - Select multiple invoices and click `Send`. `KeyError: <NewId origin=33>` This error occurs when sending invoices in bulk. As mentioned in commit https://github.com/odoo/odoo/commit/058d324855a6e2fe3df51386aa153d46419766bf, the issue was introduced in commit https://github.com/odoo/odoo/commit/39d1907d77ca9c88431e7e9dc9e8c938c79a2987, where the _compute_alerts method attempts to set an alert in the wizard. However,since this is a computed field, the wizard record has a NewId and calls the method with a transient record [1]. When trying to access record.id, it returns a NewId [2], and later, when this NewId is used as a res_id [3],it raises a KeyError. [1]-https://github.com/odoo/odoo/blob/aff5f006d5b1996ea3ecc67998067cd0e292cf2a/addons/account/wizard/account_move_send_batch_wizard.py#L63 [2]- https://github.com/odoo/odoo/blob/c70bca77d0447b005b3898e1861facc2828475fc/addons/mail/models/mail_thread.py#L2037 [3]- https://github.com/odoo/odoo/blob/c70bca77d0447b005b3898e1861facc2828475fc/addons/mail/models/mail_thread.py#L2084 This commit fixes the above issue by using move_ids._origin, ensuring that the method is always called with real records, and removes the changes from the previous commit https://github.com/odoo/odoo/commit/058d324855a6e2fe3df51386aa153d46419766bf. sentry-6562659542 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217730
Saving a spreadsheet global filter with a duplicate label and a selected value range no longer causes a crash. Users now see the duplicate label error directly, making the validation smoother and avoiding disruptive tracebacks.
Original PR description
Steps to reproduce: - Create a global filter with label 'aa' - Create a new text filter with the same label - Check 'Restrict values to a range' - Select a range with some values - Confirm the range selection - Click the save button Current behavior before PR: - A traceback occurred when saving the new filter with a duplicate label and a selected range. After the crash, the duplicate label error was shown. Desired behavior after PR is merged: - The duplicate label error is raised directly without triggering a traceback. Task: [4813177](https://www.odoo.com/odoo/2328/tasks/4813177)
Installing Accounting Reports or Accountant after Accounting now creates the VAT return journal when needed, even if the chart of accounts was already set up. This helps prevent missing VAT closing records and makes tax return setup more reliable for companies and branches.
Original PR description
Issue: The VAT return journal is not created when installing `account_reports` (or `accountant`) after `account`, when the CoA is already created. Solution: Create it in the post init hook. Note that…
Issue: The VAT return journal is not created when installing `account_reports` (or `accountant`) after `account`, when the CoA is already created. Solution: Create it in the post init hook. Note that we force the creation of the journal only when `accountant` is installed because it would make noise for invoicing only in most cases. It will still be created automatically when needed. Also, make the code a little bit more robust: * instead of mixing "default misc journal" and vat return journal logic, just use one logic * the function `_get_tax_closing_journal` could return multiple journals but was always used as if it could only contain one * the function `_get_tax_closing_journal` could not return any journal. Instead, we now create the journal or look for a value on the parent companies if any. * Manage `show_on_dashboard` in `create` also by using an inverse field. Even if in normal cases the journal will always be created after the company the thus set through `write`, it is not impossible to set it in `create` when creating company branches. Since it is always done when setting the journal on the company, there is no need to set the field in the post-init hook.
Studio now hides image transformation options when editing reports because those effects do not appear in generated PDFs. This prevents users from applying formatting that would be lost in the final PDF, making report previews and output more predictable.
Original PR description
Problem: Image transformations are not applied in generated PDFs because they are not supported by `wkhtmltopdf`. Solution: Disable image transform options when rendering reports to ensure expected output and avoid unsupported behavior. Steps to reproduce: - Open any report in Studio - Add an image - Apply a scale transformation - Generate a PDF preview > The image transform is not applied in the generated PDF opw-4809761 Forward-Port-Of: odoo/enterprise#90776 Forward-Port-Of: odoo/enterprise#89952
Fixes accounting reconciliation so models using a different currency calculate foreign currency amounts and balances correctly. It also prevents automatic reconciliation models from being created when users apply receivable or payable actions, reducing unintended accounting setup changes.
Original PR description
Before this commit when applying a reco model with a different currency, the amount currency and the balance were equals. task-4931177 Before this commit when applying the receivable or payable button, the automatic reco models would be created. We don't want that behavior task-4930730
This update keeps several Odoo Enterprise apps working reliably with newer Python 3.13 and Debian Trixie environments. It adjusts automated tests to handle date comparisons, translated date spacing, and PDF warnings more consistently, reducing upgrade-related failures without changing business features.
Original PR description
Forward-Port-Of: odoo/enterprise#90794 Forward-Port-Of: odoo/enterprise#90352
Clearing a document selection from the control panel now also clears the details panel. This prevents users from seeing stale document information after they have removed the current selection.
Original PR description
The details panel does not update when clearing the selection through the control panel. Steps to Reproduce: ==================== - Open the detailsPanel. - Select a document. - Click on a blank space, which removes the current selection. - Re-select a document. - Click the ‘x’ button on the control panel to clear the selection. - The document selection in the detailsPanel does not get cleared. Technical =========== In DocumentsRightPanel and how DocumentsDetailsPanel is handled, The panel relies on the `state.focusedRecord` to determine which record's details to display. However, when clicking the ‘X’ button in the control panel to clear the selection, the `state.focusedRecord` is not being Updated or cleared, the detail panel still shows the previously focused record. After this PR: Clicking the ‘x’ will properly clear the selection from the detailsPanel. Task-4752944
Uploading an attachment from the chatter in Documents no longer shows temporary upload progress cards or rows in the main kanban or list views. This keeps the workspace cleaner and avoids confusing users with duplicate or unexpected visual elements during uploads.
Original PR description
Step to reproduce: - In Documents, open the chatter either on a folder or a document. - Upload an attachment through the chatter. - You will see the upload kanban card / list row showing the progression. There should be no visual in kanban/list views showing the progression. Task-4863051 Forward-Port-Of: odoo/enterprise#90836 Forward-Port-Of: odoo/enterprise#87410
Mobile self-ordering orders are now sent to the preparation display as soon as the customer proceeds to pay, instead of waiting until cashier payment. This helps staff start preparing mobile orders earlier and avoids delays or missed visibility in the kitchen workflow.
Original PR description
When doing a self order from a mobile device, the order was not sent to the preparation display until it was paid at the cashier. Steps to reproduce: ------------------- * Setup a PoS with self-ordering mode set to 'mobile'. * Setup a preparation display to show orders from this PoS. * Place an order from a mobile device. * Click on "Pay" > Observation: The order does not appear on the preparation display. Why the fix: ------------ Instead of just sending the order from the kiosk, we also need to send it from the mobile device. opw-4819732 Forward-Port-Of: odoo/enterprise#90169
Fixes an issue where receiving a file reply in WhatsApp could trigger an error when request debugging was enabled. The system now logs file response size instead of trying to store binary content as text, improving reliability for businesses using WhatsApp messaging.
Original PR description
When Debug requests is enable on the whatsapp business account and user replies with the file, a traceback will appear. Steps to reproduce the error: - Install ``whatsapp`` and ``contacts`` - Create…
When Debug requests is enable on the whatsapp business account and user replies with the file, a traceback will appear. Steps to reproduce the error: - Install ``whatsapp`` and ``contacts`` - Create a whatsapp business account > Enable Debug requests - Create a contact > Add a phone number > send whatsapp message with any whatsapp template - Now reply with the file(ex. pdf or image) in message from the contact's whatsapp. - Traceback in terminal Traceback: ``ValueError: A string literal cannot contain NUL (0x00) characters.`` https://github.com/odoo/enterprise/blob/b52a93da7d680b60646cb08a9126cf6c12f5307d/whatsapp/models/whatsapp_account.py#L166 Here, ``message`` contains NUL (0x00) characters because user replies with the file, value for the ``message`` comes from the below response. response: https://github.com/odoo/enterprise/blob/b52a93da7d680b60646cb08a9126cf6c12f5307d/whatsapp/tools/whatsapp_api.py#L49-L57 Here, ``res.text`` contains NUL (0x00) characters. So, it will lead to the above traceback. sentry-6314521165 Forward-Port-Of: odoo/enterprise#83274
Fixed an issue where sending customer statements could fail if one of the selected customer contacts had no name. The system now skips unnamed contacts when preparing the report details, helping scheduled statement emails complete reliably.
Original PR description
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install…
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install the account_reports module - From the accounting app, create a new company customer (Customers/Customers) - From that new company customer form view, add a new contact of type "other" and don't specify a name for it. - Create an invoice for the company - From the customer list view, select all, and trigger the action "Open Customer Statements" - Send -> Print and Send - Check the console, the cron task should traceback on the template **CAUSE** In accout_report.py, we get the name of each selected partners, and we don't check if the name doesn't exist. In the template `pdf_export_filters`, we try to join all the name in a string, it fails because one of the name isn't a string (its value is False because it doesn't exist on the partner record). **FIX** When getting the partners names, filter out the partners without names. opw-4916660 Forward-Port-Of: odoo/enterprise#90154
The UrbanPiper point of sale integration now uses the actual finalized order status instead of an unused internal flag. This helps ensure order state is shown consistently on the ticket screen and removes obsolete internal data.
Original PR description
In this commit: ==== - Use `finalized` instead of `uiState.locked` to determine order state on TicketScreen. - Remove the unused `locked` property from `uiState` in posOrder. Task-4745869 Related: odoo/odoo#207406 Forward-Port-Of: odoo/enterprise#90829 Forward-Port-Of: odoo/enterprise#86684
Online synchronization fields no longer disappear when provider data is not supplied by OdooFin. This keeps bank connection details accessible and corrects a related search filter, requiring a module update.
Original PR description
The fields on the online synchronization were invisible if no provider_data wass put on the synchro. But now, this info is not given anymore from Odoofin. So, we should not hide these fields based on provider_data. Also fixed a search domain. It will need an update of the module. Forward-Port-Of: odoo/enterprise#91027 Forward-Port-Of: odoo/enterprise#90785
This fix prevents the disallowed expenses report from failing when expense lines have a zero or missing rate. It ensures each report line is uniquely identified, avoiding duplicate entry errors and improving report reliability.
Original PR description
Before this **PR**: When only the account_disallowed_expenses module was installed, the report failed with a duplicate key error if a line had a 0 rate or no rate at all. This was because such child lines were assigned the same line_id as their parent. After this **PR**: Lines with a 0 or no rate have the parent account appended to their line_id to ensure uniqueness and avoid key collisions. Forward-Port-Of: odoo/enterprise#90236
Fixes an issue where users could encounter an error when removing an end date from an existing commission plan. This prevents unnecessary save failures and keeps commission plan management smoother for sales operations.
Original PR description
Currently, an error occurs when clear the date_to field from an already created record. Steps to Reproduce: - Install the `sale_commission` module. - Go to `Commission Plans` and create a record. -…
Currently, an error occurs when clear the date_to field from an already created record. Steps to Reproduce: - Install the `sale_commission` module. - Go to `Commission Plans` and create a record. - Now, clear the `date_from` field and save. `TypeError: '>' not supported between instances of 'bool' and 'datetime.date'` This error occurs when we clear the date_to field from an already created record. The error started occurring after https://github.com/odoo/enterprise/commit/926c8f041b51a04f0153be27cfcc8658a07be5b0 this commit that introduced the daterange widget for the date_from field. And when we clear the date_to field and try to save, it triggers the constraint [1] and raises the error. [1] https://github.com/odoo/enterprise/blob/377321fd7e7b1b2026734b75c79c74c8947e2e6c/sale_commission/model/commission_plan.py#L64 This commit ensures that the record is saved only if the date_to field is also present in the record. sentry-6710699656 Forward-Port-Of: odoo/enterprise#88769