Thursday, November 6, 2025
34 changes · 19.0
Resolved issues and error corrections
Users can now search for messages in mailboxes and jump directly to the matching message. This fixes a navigation issue that previously prevented message links from working in mailboxes, making it easier to find and review conversations.
Original PR description
Before this commit, we could not jump to messages in mailboxes. This happens because the `useMessageHighlight()` hook prevented jumping to messages in thread that were not their origin thread. This commit fixes the issue by removing this limitation specifically for mailboxes. opw-4948798 opw-5087102 Forward-Port-Of: odoo/odoo#234526
Fixed an issue where the image toolbar would not open if the editable area had lost focus. The update makes toolbar behavior more reliable when users click between content and other parts of the page.
Original PR description
Description of the issue: - The image toolbar failed to open when the editable had lost focus. - Previously, `focusEditable()` exited early if the active element was inside the editable, even when the actual document selection wasn’t. Solution: - Updated the condition in `focusEditable()` to also check whether the document selection is inside the editable. - Now it only returns early when both the active element and the selection are within the editable. task-5117272 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234338 Forward-Port-Of: odoo/odoo#230549
When a portal user updates their profile details, Odoo will now avoid overwriting any custom bank account holder name if the user did not actually change their name. This prevents an unexpected data change in employee bank details and preserves manually entered account information.
Original PR description
Steps to Reproduce: ------------------------- 1. Install the Website and Employees modules. 2. Create a Test User and It's Employee. 3. On the Employee record, go to Private Information, create a…
Steps to Reproduce: ------------------------- 1. Install the Website and Employees modules. 2. Create a Test User and It's Employee. 3. On the Employee record, go to Private Information, create a Bank Account with a custom Account Holder Name. 4. Log in to the Website using the Test User. 5. Navigate to My Account and click Edit Information. 6. Fill in the address details (without changing the Name) and click Save. 7. Go back to the Employee’s Bank Account and check the Account Holder Name. Observation: ------------------------- The Account Holder Name was overwritten to the partner's name. Issue: ------------------------- In `_compute_account_holder_name` method, https://github.com/odoo/odoo/blob/c3b543631bde96260082484a3baac19d942f6b9f/odoo/addons/base/models/res_bank.py#L104-L107 The Account Holder Name is always recomputed using the Partner’s name. When submitting the form from the frontend, the name field is included in the values sent to update the Partner, even if the user did not actually change the name. https://github.com/odoo/odoo/blob/be3a4283c383d187570f5a73f337030e6ae9d05c/addons/portal/controllers/portal.py#L196-L205 which re-triggers this compute and as a result, the Partner’s name overwrites the Account Holder Name on the linked Bank Account Solution: ------------------------- Prevent the Account Holder Name compute method from being triggered when updating information from the frontend if the Partner’s name has not been changed. opw-5059247 Forward-Port-Of: odoo/odoo#232723 Forward-Port-Of: odoo/odoo#229210
This update prevents users from editing stages in a shared project kanban board. It avoids an error that could appear when they try to search for more projects, improving stability for shared project users.
Original PR description
Steps to reproduce: - 1. Install the Project module. 2. Create a new project and share it with a user. 3. Log in as that user. 4. Open the shared project Kanban view and try to edit a stage. 5. Try to search for more projects. Issue: - A traceback occurs when clicking on 'Search More'. Fix: - Prevent stage editing in shared project Kanban view. task-5176630 Forward-Port-Of: odoo/odoo#233557
This update corrects the data sent to ECPay for invoices created from down payments. It ensures negative quantities are handled properly so the invoice information remains valid and the payment record can be processed without errors.
Original PR description
When an invoice is created from a sale order with a downpayment, the invoice line for the downpayment typically has a negative quantity and a positive unit price. However, ECPay does not accept negative quantities, and this also leads to incorrect price values being sent in the JSON payload. To address this, when an invoice line has a negative quantity, it is inverted to ensure the data sent to ECPay is valid and consistent. **task**-5211264 Forward-Port-Of: odoo/odoo#233359
This update fixes two issues in the Australian TPAR report: exported file lines now use the correct country name format, and PDF generation no longer fails when rendering report lines. As a result, users can export and print the report reliably without errors.
Original PR description
Behavior before: Exporting the TPAR report using the TPAR option failed with a line length error because the SQL query returned the full JSON object for country names (e.g., {'en_US': 'Australia'})…
Behavior before:
Exporting the TPAR report using the TPAR option failed with a line length error because the SQL query returned the full JSON object for country names (e.g., {'en_US': 'Australia'}) instead of plain text, resulting in incorrect line lengths. Additionally, PDF export failed with a KeyError for the missing 'level' key, as dynamically generated report lines did not include a level field, which the QWeb template requires.
Behavior after:
SQL query uses the JSONB text extraction operator (->>) to retrieve only the country name string (e.g., 'Australia'), ensuring correct line lengths during export. All dynamic report lines are assigned 'level': 1 so that PDF export works correctly without errors.
Root cause:
Country names are stored as translatable JSONB fields, and the previous query did not extract the localized text, returning the full JSON structure. Dynamic report lines for partners did not include a level key by default, causing the PDF template rendering to fail.
Ticket [link](https://www.odoo.com/odoo/project.task/5148697)
opw-5148697
Forward-Port-Of: odoo/enterprise#98020
Forward-Port-Of: odoo/enterprise#97990This change moves the accrual menu’s parent to a menu that is always available in the main accounting module. It prevents a setup issue that could break menu access when related accounting add-ons are installed and then removed.
Original PR description
The PR odoo/enterprise#97151 introduces a miss-match between module dependency (new modules depend of `account_accountant`) and by records used as parent menu (defined in `account_report`.) `account_report` depends of `account_accountant` and is in auto-install which means by installing modules there is no issue, but in config where `account_accountant` is installed and then `account_report` is uninstalled, it causes issue. To fix that, a new menu item is created in `account` and will be used by accrual menu item as parent menu. **Enterprise PR:** https://github.com/odoo/enterprise/pull/98914
Boleto payment methods are now marked as non-tokenizable, so customers can no longer save them for future reuse. This avoids inconsistent behavior across payment providers and prevents issues with providers that do not support reusable Boleto payments.
Original PR description
## Versions 17.0+ ## Issue Boleto is an offline, one-time-use payment method and cannot be tokenized with most payment providers (e.g., Adyen: https://docs.adyen.com/payment-methods/boleto-bancario/, Nuvei: https://www.nuvei.com/apm/boleto). ## Exception Stripe allows a form of tokenization by storing the customer's billing information and regenerating a new Boleto for each payment (cf. https://docs.stripe.com/payments/boleto). Technically, the Boleto itself is not reusable — Stripe simulates tokenization by associating customer info with new Boleto transactions. ## Fix To maintain consistent behavior and avoid provider-specific edge cases, tokenization is disabled for Boleto payments globally. opw-5156718 Forward-Port-Of: odoo/odoo#234373
This update prevents inventory reservation cleanup from running on kit-type products, which could trigger errors when users open the stock quant list. It helps avoid blocking users from adjusting stock quantities when a product was changed to a kit after being used in inventory operations.
Original PR description
Since this commit: 766ec99 We try to clean reservations because, for some reason, there could be a discrepancy between the sum of “stock.move.line” and the quantity/reserved quantity on…
Since this commit: 766ec99 We try to clean reservations because, for some reason, there could be a discrepancy between the sum of “stock.move.line” and the quantity/reserved quantity on “stock.quant”. However, there are cases where a user creates a storable product, updates its quantity, and then uses it in a “stock.move.line”, confirms it, and later changes the product type to a kit. So, when trying to clean the reservations for these “stock.move.line”, a user error occurs because the system attempts to create a quant for a kit-type product: https://github.com/odoo/odoo/blob/c07778bbce4311c142bd8e2ce3013998d4f126ae/addons/mrp/models/stock_quant.py#L6-L11 As a result, each time users try to access the quant list, clean_reservation is triggered, causing a user error that prevents them from modifying the quantity of any quant. Solution: For kits, we can skip cleaning their quant to avoid unnecessary errors. This is a manual forward-port of #200595 opw-4625002 opw-4624008 opw-4621175 opw-4625465 opw-4621504 opw-4623523 opw-4621508 opw-4623329 opw-4629386 opw-5179369 Forward-Port-Of: odoo/odoo#234417 Forward-Port-Of: odoo/odoo#232646
This update ensures delivery fees in subscription invoices are kept as fixed charges instead of being reduced when invoices are prorated. It prevents shipping costs from being undercharged when subscriptions are billed according to a calendar or partial period.
Original PR description
Version - 18.0 Steps to reproduce: 1. Create a subscription with delivery product. 2. Select align to calendar in the recurring plan 2. Add shipping method by assigning a delivery product with recurring_invoice. 3. Create an invoice with prorated Issue: - Delivery products are considered service-type products and their price was prorated in invoice. Cause: - The proration logic treated delivery lines like normal recurring service products, instead of keeping their fixed charge. Solution: - Exclude delivery products from proration by setting their period ratio to 1. Co-authored-by: Darshan Patel dvpa@odoo.com Co-authored-by: Federico Braidi brfe@odoo.com task-4662188 Forward-Port-Of: odoo/enterprise#98784 Forward-Port-Of: odoo/enterprise#91133
The VIES summary report now uses the amount converted into the company currency when invoices are issued in another currency. This ensures the reported totals are accurate and prevents mismatches in tax reporting.
Original PR description
**Issue** When an invoice is issued in a currency different from the company currency, the VIES summary report incorrectly displays the total value as if it were already converted. This results in…
**Issue** When an invoice is issued in a currency different from the company currency, the VIES summary report incorrectly displays the total value as if it were already converted. This results in incorrect totals in the report. **Steps to Reproduce:** 1. Install the Accounting app and the l10n_cz_reports_2025 module. 2. Go to Accounting > Customers > Invoices. 3. Create a new invoice using a currency other than CZK. 4. Add a product with Code Supply set to Gold and Transaction Code set to 0 Goods. Confirm the invoice. 5. Navigate to Accounting > Reporting > VIES Summary Report. 6. Observe that the total value is not correctly converted to the company currency. **Expected Behavior:** The total amounts in the VIES summary report should be correctly converted to the company currency if the invoice was created in a foreign currency. **Actual Behavior:** Amounts are displayed in the invoice currency without conversion, leading to incorrect totals when the invoice currency differs from the company currency. **Root Cause** The report fetches raw invoice data without handling currency conversion. Specifically, it retrieves the unconverted total value, even when the invoice currency differs from the company’s. **Fix** To solve the issue the balance field is used, which correctly reflects the value in the company currency. opw-4688638 Forward-Port-Of: odoo/enterprise#97894 Forward-Port-Of: odoo/enterprise#82978
This update blocks duplicate invoice settlements in Point of Sale. If a customer invoice is already being settled, the system now prevents it from being selected again and keeps the customer selection in place if an error occurs.
Original PR description
Steps to reproduce: ------------------------- - Install POS. - Create an invoiced order and pay with customer account. - Settle the created invoices from customers list. - Try to settle the invoice again from the same order. Issue: ------- - The system allows settling the same invoice multiple times. Cause: --------- - There is no check in place to verify whether the invoice has already been under settlement process before settling it again. Fix: ----- - Add a validation step to ensure that if the same invoice is selected again, the system prevents duplication and it will show that already being settled. - Also if error occured due to second try of settlment will not lose the selected partner. task: 5028009 related PR: [227971](https://github.com/odoo/odoo/pull/227971) Forward-Port-Of: odoo/enterprise#95156
This update fixes an issue in Point of Sale where selecting different variants of a lot-tracked product could accidentally change the prices of all variants. Pricing now stays correct for each variant, helping prevent billing mistakes at checkout.
Original PR description
Before this commit, when a product had multiple variants with different prices and was tracked by lot, adding different variants in the PoS would incorrectly update all product prices. opw-5228830 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234332 Forward-Port-Of: odoo/odoo#234171
The inventory valuation report will no longer fail if the company’s valuation account is missing. This lets users generate the report first and only see a warning later if they try to create an accounting entry without the required account.
Original PR description
****Behavior:**** **Current:** When generating the inventory valuation report, if the default stock valuation account is removed in the company settings, the system assumes that there will be an…
****Behavior:**** **Current:** When generating the inventory valuation report, if the default stock valuation account is removed in the company settings, the system assumes that there will be an account linked to the debit/credit and will attempt to access it without any other check which will lead to an IndexError. **Expected:** We want to avoid blocking users as much as we can, so we will allow users to generate the report without the account and later fallback to stopping them with a warning if they try to generate an accounting entry from the valuation. Since we are now checking that there is an account before trying to access it, it doesn't matter if it is empty. **Steps to reproduce:** - Enable warehouse locations - Make sure the Production location has a 'Cost of Production' account. - Create two products with costs and prices - Create a bom and manufacture one of the products. - Go to Settings/Inventory Valuation and remove the Valuation Account - When trying to generate the Inventory Valuation, you should get an error opw-5184300
This change prevents a crash that could happen when users add a new line to a bank statement linked to a copied or non-default journal. It makes bank statement entry more reliable and avoids interrupting accounting work.
Original PR description
The system will crash when user tries to create new bank statement line. **Steps to produce:** - Install `Invoicing` module without demo data. - Go to `Configuration > Journals` and duplicate the…
The system will crash when user tries to create new bank statement line. **Steps to produce:** - Install `Invoicing` module without demo data. - Go to `Configuration > Journals` and duplicate the default Bank journal to create Bank (Copy). - `Dashboard` and Click on 3 dots of Bank(Copy) and click on `Transactions`. - Create a new transaction and set the Statement also(Create new and assign it). - Go to that statements and Add a line and set the foreign currency as `USD`. **Error:** `ValueError: Wrong value for account.bank.statement.journal_id: account.journal(7, 6)` **Cause:** - During an onchange on a new, unsaved `statement line`, our code tried to read the `statement_id.journal_id` ([1]). This forced to compute the journal on the unsaved parent statement, which failed with a error. **Solution:** - We use `self.statement_line_id.statement_id._origin.journal_id` to read the journal's stored value [1] https://github.com/odoo/odoo/blob/ec2d8d026d9f13c8fb869ad1f7b8026a144e85ec/addons/account/models/account_move.py#L887 **sentry-6928858335** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change corrects how accrual menu items are connected so they no longer depend on a menu that can disappear in certain setup changes. It helps ensure users can reliably access accrual-related options after installing or removing accounting-related components.
Original PR description
The PR odoo/enterprise#97151 introduces a miss-match between module dependency (new modules depend of `account_accountant`) and by records used as parent menu (defined in `account_report`.) `account_report` depends of `account_accountant` and is in auto-install which means by installing modules there is no issue, but in config where `account_accountant` is installed and then `account_report` is uninstalled, it causes issue. To fix that, a new menu item is created in `account` and will be used by accrual menu item as parent menu. **Community PR:** https://github.com/odoo/odoo/pull/234577
This update restores the bank statement view that was previously removed and adjusts the button action so it opens the correct screen again. It fixes a broken workflow in bank reconciliation, helping users review and process statements without errors.
Original PR description
This commit: 935b25f change the view of the bank statement but by doing so they broke the use of the statement button on the bank rec widget. This commit will add the old view back and change the view used in the action of the statement button. (This view has already been added in 19.1 so it's kind of a backport of https://github.com/odoo/enterprise/commit/2ea690bb5b08ac014f89cc05813c557ccb8832bb) no task id
This fix ensures the minimum rental period is calculated correctly for calendar months, so a one-month rental works as expected in shorter months like February. It prevents customers from being blocked by an incorrect extra-long minimum end date when selecting rental dates on the website.
Original PR description
Issue: Currently minimum rental duration uses a hardcoded 30 days. This cause issue for non-30 days month e.g. Feb. which is 28 days. To reproduce: 1- Install `website_sale_renting` 2- From Setting,…
Issue: Currently minimum rental duration uses a hardcoded 30 days. This cause issue for non-30 days month e.g. Feb. which is 28 days. To reproduce: 1- Install `website_sale_renting` 2- From Setting, set `Minimum Rental Duration` to 1 month. 3- Create a rental product and from website, choose the date: - 01/02/2026 - 28/02/2026 4- This fails. The earliest end date it accepts is 03/03/2026. Cause: This is due to hardcoded 30 days: https://github.com/odoo/enterprise/blob/7ffb9f3cb0d818cf3616d6972df424bf0ca251a4/website_sale_renting/static/src/js/renting_mixin.js#L7-L12 https://github.com/odoo/enterprise/blob/7ffb9f3cb0d818cf3616d6972df424bf0ca251a4/website_sale_renting/static/src/js/renting_mixin.js#L47-L53 We can use luxon plus method instead. ```diff + const minEndDate = startDate.plus(Object.fromEntries([[unit, duration]])); ``` In all usages of `msecPerUnit` we can do the same. Also we can keep remove `msecPerUnit` from master. opw-5094534 Forward-Port-Of: odoo/enterprise#98899 Forward-Port-Of: odoo/enterprise#98168
This update fixes an issue where the attendance camera could fail to start correctly in some cases. It helps ensure employees can reliably use camera-based attendance without getting blocked by a blank or broken camera view.
Original PR description
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
This change prevents the Point of Sale session from failing when an order line has a 100% discount. It ensures sessions can be closed normally, avoiding interruptions for staff and delays in end-of-day operations.
Original PR description
Before this commit, when an order line had a 100% discount, a division by zero error occurred when closing the PoS session. opw-5240429
This update fixes an error that could block sending Romanian e-Factura invoices when a bank account is linked to the payment details. The system now correctly uses the bank’s own address field, so invoice submission works as expected.
Original PR description
Issue: When setting up a payment reference and linking a bank to an invoice, sending an E-Factura (SPV) triggers an exception: state_id not defined for res.bank. Repro Steps: 1- Create invoice for…
Issue:
When setting up a payment reference and linking a bank to an invoice, sending an E-Factura (SPV) triggers an exception: state_id not defined for res.bank.
Repro Steps:
1- Create invoice for romanian localization.
2- Link payment account to invoice.
3- Add bank to payment account.
4- Confirm and send invoice with "Send E-Factura SPV" checked.
Video:
https://drive.google.com/file/d/1rweJgknjbKrpouJRTQ2cluKHsIXNZtSz/view?usp=drive_link
Cause:
The state field is defined differently for res.bank and res.partner. res.partner uses state_id, while res.bank uses state. The code that retrieves addresses assumes the same field for both, leading to an exception when accessing state for res.bank.
Fix:
The fix checks the type of the input and selects the appropriate field (state or state_id) accordingly.
Test:
Linked the bank in the test suite. The test fails without this fix, confirming the issue is resolved.
opw-5099816
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#231399This fix prevents the delivery date on an invoice from being unexpectedly changed when the invoice is confirmed in anglo-saxon accounting flows. It helps ensure the delivery information stays accurate for invoiced sales orders, avoiding confusion and manual correction.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable anglo-saxon accounting; 2. have a product category with automated AVCO; 3. assign category to a deliverable product; 4. set product to invoice on…
Versions
--------
- 17.0+
Steps
-----
1. Enable anglo-saxon accounting;
2. have a product category with automated AVCO;
3. assign category to a deliverable product;
4. set product to invoice on delivery;
5. add product to a sales order;
6. confirm order & delivery;
7. create invoice;
8. change the delivery on the invoice;
7. confirm the invoice.
Issue
-----
The delivery date gets reset.
Cause
-----
Commit 818cf04f05767 added `delivery_date` as a permanently protected field when modifying moves or move lines, protecting the records on `write`. With anglo-saxon accounting however, new move lines are created when confirming an invoice, which in turn recalculate the delivery date, as `_get_protected_vals` isn't used for their move on `create`.
Solution
--------
Add `self.env['account.move'].protecting(_get_protected_vals({}, moves))` when creating new lines for a move, to avoid recomputing fields that should always be protected.
opw-4965036
Forward-Port-Of: odoo/odoo#231186This change prevents an error that could appear when asking for feedback on an appraisal if a survey was restricted to certain users. The system now only shows surveys the current user is allowed to access, so the wizard works reliably and avoids a confusing access failure.
Original PR description
To reproduce (on runbot): - As 'admin' user: * Create a survey of type 'Appraisals' and name it 'Test No Access' * Set `Restricted to' to 'admin' user only. - As 'demo' user: * Create an appraisal for another employee * Click on "Confirm" button * Click on "Ask Feedback" button * Try to choose an Employee. An exception is raised saying we don't have 'read' access to the survey 'Test No Access'. This commit force computing `survey_template_id` as non-superuser only get survey that the user has access to.
This update corrects how Spanish electronic invoicing tax data is loaded so the right tax settings are available during setup. It also prevents tax values from being applied to unrelated taxes, reducing the risk of incorrect tax configuration.
Original PR description
Currently the tax data defined in l10n_es_edi_facturae is incomplete and never loaded. This commit makes sure that the l10n_es_edi_facturae_tax_type is loaded correctly and adds the appropriate templates for es_common_mainland and es_canary_common. The default is also removed on the field l10n_es_edi_facturae_tax_type to avoid the value being assigned for unrelated taxes. task-4981325 Forward-Port-Of: odoo/odoo#232911 Forward-Port-Of: odoo/odoo#231277
This change corrects how website sale pages redirect users after an action, making sure the browser is sent to the intended web address. It helps avoid broken or inconsistent navigation for shoppers and improves the overall checkout and browsing experience.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/233842 Forward-Port-Of: odoo/enterprise#98804 Forward-Port-Of: odoo/enterprise#98492
This fix prevents a rare crash that could happen when a network request was still running and the cache was refreshed at the same time. It ensures the system clears all related tracking information, so repeated requests behave safely and the web interface remains stable.
Original PR description
PR [1] recently reworked the `read` function of RPCCache to better handle rejected promises. Unfortunately, it introduced a small regression producing a crash in a specific scenario: - do an rpc - during the rpc (before it returns), invalidate the cache - still during the rpc, do that same rpc again (same params). Before this commit, it crashed because we didn't clear the `pendingRequests` structure, whereas the ramCache was emptied. In `read`, we assume that if there's a pending request, there's an entry in the ram cache for that request, which is a correct assumption, except in that faulty scenario. With this commit, pending requests are also cleared upon invalidation. [1] odoo/odoo#233610 runbot error~233763 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
Fixed an issue where event registration forms could fail if users took more than a couple of minutes to complete them. The reCAPTCHA check is now generated at submit time, so the form stays valid and can be submitted successfully even after a longer delay.
Original PR description
Steps to reproduce =============== 1. Enable reCaptcha in Settings and configure keys. 2. Go to an event and click Register. 3. Fill in the form but wait more than 2 minutes. 4. Submit the form ---> An error message is shown. When reCaptcha was enabled on event registrations, the token was being requested too early (during `willStart`). Since a token is only valid for 2 minutes, users who took longer to fill out the registration form encountered an error when submitting. After this commit, the reCaptcha token is requested only on submitting. This way, the token is always valid and the form can be submitted successfully, even after several minutes. Task-4982067 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#233517 Forward-Port-Of: odoo/odoo#223538
This update corrects the quantity displayed when editing a production step on the shop floor after a backorder is created. Users will now see the amount needed for that specific step, instead of the total remaining quantity for the whole manufacturing order, which prevents confusion and mistakes.
Original PR description
**PROBLEM** When creating a backorder, the quantity to produce during an operation is correctly displayed on the shop floor step. But when clicking to modify it, the pop over display the total…
**PROBLEM** When creating a backorder, the quantity to produce during an operation is correctly displayed on the shop floor step. But when clicking to modify it, the pop over display the total quantity to produce, and not the quantity to produce in that specific operation. **STEP TO REPRODUCE** 1. create a BoM of product with 3 or more operations 2. Create a Manufacturing order for i.e. 10 unit 3. Open shop floor 4. Register the production in shopfloor: - Op1 – 10 units registered - Op2 – 7 units registered - Op3 – 5 units registered 5. At the end, a backorder is created for 5 units. 6. When we open the wizard to register the production on the Op2, the quantity to produce that is displayed is 5, which is wrong because we only need to produce 3 unit for that step. **CAUSE** When creating the confirmation dialog, we pass the wrong value `qty_remaining` which is the quantity of product we will end after finishing the Manufacturing Order. **FIX** We should pass `qty_production` instead which is the quantity to produce for the specific step. opw-5011739 Forward-Port-Of: odoo/enterprise#98036 Forward-Port-Of: odoo/enterprise#93599
This change removes a Windows-specific version pin that was preventing the IoT box image from installing correctly. As a result, Windows users can now install the required dependency using the latest compatible version, improving setup reliability.
Original PR description
Forcing aiortc version to 1.4.0 on windows made it impossible to install, we then removed the marker to install the latest.
This fix ensures barcode transfers refresh the available stock quantities when a product or source location is changed. As a result, users will now see the correct stock information immediately instead of missing quants in the barcode interface.
Original PR description
Issue: In this bug, stock quants are not being updated when product_id or location_id is updated. To reproduce: 1- Create a db with demo database and barcode installed 2- Enable storage locations 3- Open barcode -> operations -> Internal transfers -> New 4- Add a product -> e.g. Drawer which there are quants in demo 5- As you see quants are not shown Cause and Fix: This is a partial backport of: #55917 `_compute_product_stock_quant_ids` should depend on `product_id` and `parent_location_id` to be recomputed when product or source location is updated. opw-5065624 Forward-Port-Of: odoo/enterprise#98900 Forward-Port-Of: odoo/enterprise#95906
This fix stops users from canceling a manufacturing order that is already completed. Instead of affecting related stock moves by mistake, the system now clearly warns that a done manufacturing order cannot be canceled. This helps avoid confusion and protects completed production records from unintended changes.
Original PR description
Steps to reproduce:
- Enable multi-step routes.
- Go to Warehouse:
- Manufacturing Operations - Enable 3 steps.
- Create a storable product P1.
- Create a MO to produce one unit of P1.
- Validate the MO.
- Go to the MO list view.
- Select the MO.
- Try to cancel it.
Issue:
The MO is not canceled, but the picking from production to stock is canceled instead.
A done MO should not be cancelable, a UserError should be raised.
opw-5216220
Forward-Port-Of: odoo/enterprise#98758This update prevents purchase warnings from failing when a contact has no name. As a result, users can create purchase orders and related invoices for such contacts without encountering an error, improving reliability in an edge case.
Original PR description
When creating a purchase order for a partner without a name, a traceback occurs. Steps to reproduce the error: - Install purchase with demo data - Enable purchase warning from settings - Open `Azure…
When creating a purchase order for a partner without a name, a traceback occurs. Steps to reproduce the error: - Install purchase with demo data - Enable purchase warning from settings - Open `Azure Interior` Contact > In Contact, Add Contact > Type: invoice > Save & close - Add warning in newly created contact - Create a purchase order with the newly created partner and create an invoice with the newly created partner Traceback: `TypeError: unsupported operand type(s) for +: 'bool' and 'str'` https://github.com/odoo/odoo/blob/96887e0b9e7a9b01482b9dc1fcf99040e9de6b2c/addons/purchase/models/purchase_order.py#L298 https://github.com/odoo/odoo/blob/96887e0b9e7a9b01482b9dc1fcf99040e9de6b2c/addons/purchase/models/account_invoice.py#L131 Here, `partner_id.name` is `False`, which leads to string concatenation with a boolean in purchase warning messages and results in the above traceback. I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231603
This change makes a stock-related database query more efficient when a company has a very large number of locations. It helps prevent slowdowns and query processing issues, improving performance and reliability in large databases.
Original PR description
In the `_read_group`s on https://github.com/odoo/odoo/blob/704405b1af4cd80f0687712d280baf5b536bdc84/addons/stock/models/product.py#L203-L204 when there are too many locations (37K on a real DB) the `Domain.OR` variant leads to a very big query that runs too slow. Even the query planner has issues parsing with it. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change stops users from canceling manufacturing orders that are already done. Instead of silently canceling the related stock transfer by mistake, the system now shows an error so users know the order cannot be canceled.
Original PR description
Steps to reproduce:
- Enable multi-step routes.
- Go to Warehouse:
- Manufacturing Operations - Enable 3 steps.
- Create a storable product P1.
- Create a MO to produce one unit of P1.
- Validate the MO.
- Go to the MO list view.
- Select the MO.
- Try to cancel it.
Issue:
The MO is not canceled, but the picking from production to stock is canceled instead.
A done MO should not be cancelable, a UserError should be raised.
opw-5216220
Forward-Port-Of: odoo/odoo#234126