Daily updates from Odoo
Thursday, August 7, 2025
33 changes
8 changes
Resolved issues and error corrections
This fixes an issue in Point of Sale where staff could not add multiple existing serial-numbered items to the same order when creating new serial numbers was disabled. The checkout flow now correctly accepts serial numbers that were already selected, helping avoid blocked sales for tracked products.
Original PR description
**Steps to reproduce:** - Install `point_of_sale`. - Go to POS -> configuration -> settings - Search 'Operation type' -> open picking type -> Disable `Create new` - Create a storable product 'test'…
**Steps to reproduce:** - Install `point_of_sale`. - Go to POS -> configuration -> settings - Search 'Operation type' -> open picking type -> Disable `Create new` - Create a storable product 'test' with serial tracking. - Add on-hand quantity with serial numbers. - In POS, select the product and choose one SN, - Select it again and choose another SN. **Observation:** - The order line should have 2 quantities with a list of Serial numbers chosen by the user. For one quantity, it's working fine, but for multiple quantities, an issue occurs. **Issue:** - While confirming edit serial numbers popup for multiple quantities, it checks whether each selected SN is valid or not. - The condition is that the entered SN is in the existing available SNs option. But the already chosen SN is not in the existing SN option, - Also, creating a new SN is disabled, so it's considered an invalid input. https://github.com/odoo/odoo/blob/876b7337eb689e0682ab48e9e833f9f0dc6bb8d2/addons/point_of_sale/static/src/app/store/select_lot_popup/select_lot_popup.js#L190-L193 **Solution:** - Added a condition to allow SNs that are already selected (matched by name and ID) to be considered valid inputs. opw-4865902 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221058 Forward-Port-Of: odoo/odoo#219205
Customers no longer receive automatic emails asking them to pay when a payment is already being processed through the payment register with a saved payment method. This avoids confusing payment reminders and improves the customer experience around invoice payments.
Original PR description
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the…
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the transaction move is posted and the invoice payment status is updated to "In Payment." This results in the email incorrectly asking the customer to remit payment, even though the payment is already being processed. **Steps to Reproduce:** 1. Enable "Automatic Invoicing" from Sales settings. 2. Enable and publish any payment provider (e.g., Demo) in test mode. 3. Create an invoice and generate a payment link. Open the link in a new incognito tab and pay using any dummy card number (ensure the "Save my payment details" checkbox is checked). This saves the payment token for the partner. 4. Create a new invoice with the same partner, then register payment. Select the payment method and the previously saved token, then confirm. 5. Observe that the payment status is "In Payment," but the email sent to the customer incorrectly asks them to remit payment. **Fix:** This change prevents payment notification emails from being sent automatically when the payment is manually created from the payment register wizard. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4850293) opw-4850293 Forward-Port-Of: odoo/odoo#221997 Forward-Port-Of: odoo/odoo#221587
Vendor bills now select the correct product unit of measure when the same vendor supplies a shared product in multiple companies. This prevents bill creation errors in multi-company purchasing setups and keeps company-specific vendor settings respected.
Original PR description
**Step to reproduce:** 1. Install purchase and account module. 2. Enable the uom option (Purchase > Configuration > Settings). 3. Create a vendor (partner). 4. Set up companies (have at least two…
**Step to reproduce:**
1. Install purchase and account module.
2. Enable the uom option (Purchase > Configuration > Settings).
3. Create a vendor (partner).
4. Set up companies (have at least two companies).
5. Create a product (Vendors bills > Product) that is shared across two companies.
6. Go to Vendors > Product : in the product’s Purchase tab:
- Add the same vendor twice - one line for each company.
- Assign different UoMs (e.g., “Unit(s)” for US company and “Kilogram(s)” for AT company).
7. Switch to one company.
8. Create a vendor bill in one of the companies using that product and vendor.
**Issue:**
A ValueError is raised when creating the vendor bill:
`ValueError: Wrong value for account.move.line.product_uom_id: uom.uom(1, 2)`
https://github.com/odoo/odoo/blob/0e23327c322acbdf6acfecd52385ffee0266220c/addons/account/models/account_move_line.py#L806-L807
**Cause:**
During the computation of product_uom_id where retrieves all seller records
matching the partner_id but fails to limit the result.
**Solution:**
To fix this, retrieve sellers by both partner_id and company_id and first matching
seller is used. This ensures the UoM is correctly set according to the company also.
opw-4877577
Co-authored-by: PIYUSH <pish@odoo.com>
Forward-Port-Of: odoo/odoo#217137This fix ensures that when users create a sales order item from a project task, the company is filled in automatically and product taxes appear as expected. This avoids missing tax information during billable project and timesheet workflows, especially in multi-company environments.
Original PR description
## Short functional explanation of the error When clicking on "create and edit" on a Sales Order Item field in a task, the company field is left blank. As a result, the taxes linked to the product…
## Short functional explanation of the error When clicking on "create and edit" on a Sales Order Item field in a task, the company field is left blank. As a result, the taxes linked to the product don't appear. ## Reproduction Steps 1. Install the modules sales, timesheet and project. 2. Make sure that you have at least 2 different companies in the settings. 2. Click on the project app and create a new project. Check the Billable and Timesheets boxes. 3. Create a task and click on it. Set a customer: the field "Sales Order Item" should appear. 4. Click on the "Sales Order Item" field. Type random letters and click on "create and edit". 5. Select a product that has at least one tax. ### Expected behavior The company field should be filled as soon as we click on the create and edit button, and the taxes field should be filled with the taxes of the product as soon as we select said product. ### Unexpected behavior The company and taxes field remain empty. ## Origin of the issue Some fields were set at "default_." __ opw-4904861 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221342
Customers no longer receive automatic emails asking them to pay when a payment has already been started through the manual payment registration flow. This avoids confusion and reduces the risk of duplicate payment attempts or unnecessary customer support follow-up.
Original PR description
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the…
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the transaction move is posted and the invoice payment status is updated to "In Payment." This results in the email incorrectly asking the customer to remit payment, even though the payment is already being processed. **Steps to Reproduce:** 1. Enable "Automatic Invoicing" from Sales settings. 2. Enable and publish any payment provider (e.g., Demo) in test mode. 3. Create an invoice and generate a payment link. Open the link in a new incognito tab and pay using any dummy card number (ensure the "Save my payment details" checkbox is checked). This saves the payment token for the partner. 4. Create a new invoice with the same partner, then register payment. Select the payment method and the previously saved token, then confirm. 5. Observe that the payment status is "In Payment," but the email sent to the customer incorrectly asks them to remit payment. **Fix:** This change prevents payment notification emails from being sent automatically when the payment is manually created from the payment register wizard. opw-4850293 Forward-Port-Of: odoo/enterprise#91761 Forward-Port-Of: odoo/enterprise#91570
Fixed an issue where editing depreciation for assets with a negative value could swap debit and credit amounts in journal entries. This helps keep accounting entries accurate after depreciation adjustments.
Original PR description
Before this commit, creating an asset with a negative value then editing the depreciation caused a inversion between credit and debit in the Journal entries The account_depreciation_id and account_depreciation_expense_id were not inverse for negative depreciation, in the function `_inverse_depreciation_value()` We add that missing account inversion for negative assets Steps to reproduce: - Create an asset with negative Original Value - You can choose any Depreciation Account and Expense Account - Click on Compute Depreciation - Check the Posted Entries and note the values position (credit/debit) - Go back to the Asset > Depreciation Board - Add 10 to the first line Depreciation - Remove 10 to the second line Depreciation - Save the Asset - Check the Posted Entries again - The changes ones should have credit/debit inversion before the fix opw-4759988 Forward-Port-Of: odoo/enterprise#91340 Forward-Port-Of: odoo/enterprise#88907
This fix ensures that time off overlapping with a public holiday is not incorrectly carried over to a future payslip. It helps keep payroll calculations accurate when employees request sick leave or other absences during periods that include public holidays.
Original PR description
The aim of this commit is to prevent a sick day or any other type of time off taken on a public holiday to be deferred. To reproduce: - Create a public Holiday for previous month - Regenerate the work entries for that month - Compute a batch of payslip for last month, validate and mark it as paid --> The public holiday should be on the payslip - OPTIONAL: run the cron `Payroll: Generate pdfs` to make create the payslip in document and make it available to the concerned employee. - With the concerned employee, put a time off on the whole week of the last month. It should overlap with the public holiday. - Validate the time off and defer it for next payslip - Compute a batch of payslip for following month, validate and mark it as paid Before this commit: The overlapping sick day gets deferred completely ignoring the fact it was a public holiday. After this commit: The overlapping sick day doesn't get deferred. opw-4903546 Forward-Port-Of: odoo/enterprise#89264
The journal report now keeps draft invoice lines grouped consistently when several draft invoices share the same date. This prevents errors when users include draft entries and use the Load More option, improving reliability for finance reporting.
Original PR description
**Issue description:** When fetching AMLs for the journal report with _query_aml(), it sorts the AMLs based on (am.date, am.name), which are not unique in case we have multiple (draft) moves with the same date. The lines will end up mixed and ordered with respect to the account, which causes errors with the "Load More" functionality, as it assumes that the lines are ordered based on their move. For posted entries, it's not an issue as the am.name is unique. **Steps to reproduce:** -Create 3 or more invoices (with 3+ AMLs each) in draft and on the same invoicing date. -Open journal report settings and set the Load More Limit to 5. -Open the journal report and set the date to this day and check the "Include Draft Entries" option. -Press "Load More", you will get an error. opw-4929907 Forward-Port-Of: odoo/enterprise#91746 Forward-Port-Of: odoo/enterprise#90360
13 changes
Resolved issues and error corrections
Italian electronic invoicing now preserves the manually selected document type when sending reverse charge tax integrations from vendor credit notes. This ensures credit notes generate negative amounts, so the transaction is correctly treated as a reversal rather than a second vendor bill.
Original PR description
When tax integrations are sent from a credit note (of a vendor bill) they should have a negative value, as it is the reversal operation. However, currently the amounts are positive, so it appears to…
When tax integrations are sent from a credit note (of a vendor bill) they should have a negative value, as it is the reversal operation. However, currently the amounts are positive, so it appears to be a second Bill rather than its reverse. **Steps to reproduce (with an IT Company)** - Create a non-eu [PARTNER] with complete address and VAT - Create a Vendor Bill with: - Partner: [PARTNER] - Electronic Invoicing > Document Type set to TD18 - A line having Reverse charge tax (ie. 22% G RC) - Confirm and send tax integration - Reverse move - Ensure the document type is set to TD18 as well - Confirm and send tax integration - Check the generated xml **Issue** Credit note tax integration will have a positive amounts, while being a credit note it should have negative amounts This occurs because when generating the xml, the document type is recomputed from the invoice features, even if the user set it manually Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4788529) opw-4788529 Forward-Port-Of: odoo/odoo#221672 Forward-Port-Of: odoo/odoo#220878
The point of sale now blocks duplicate orders, order lines, and payments when multiple requests happen at the same time. This helps keep sales records and payments accurate, reducing the risk of duplicated transactions and reconciliation issues.
Original PR description
Before this commit, it was possible for concurrent requests to create duplicate PoS orders, order lines, and payments. This was due to the absence of unique identifiers at the database level for these records during their creation. This commit addresses the issue by adding SQL unique constraints on the UUID fields for the `pos.order`, `pos.order.line`, and `pos.payment`. These database-level constraints ensure that any attempt to insert a duplicate record (based on its unique UUID) will be rejected, thereby preventing data duplication and maintaining transactional integrity. opw-4899804 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221975 Forward-Port-Of: odoo/odoo#216862
This fixes an editing issue where embedded videos in sanitized website HTML fields disappeared during edit mode, even though they returned after saving or leaving the editor. Users can now see, remove, or adjust videos while editing content, reducing confusion and preventing accidental content changes.
Original PR description
Scenario: - Insert a video in a sanitized html field (for example event.event().description) - Save - Edit Result: the video disappear when editing, so it's hard to remove it or modify it, but reappear when leaving edition. Cause: sanitized field remove iframe, so we need to re-add the iframe when editing the page. Fix: run the code that re-adds the iframe when editing the page. opw-4919773 Forward-Port-Of: odoo/odoo#219397
Customers are no longer sent automatic payment request emails when a payment is already being manually processed through the payment register. This avoids confusing customers with reminders to pay invoices that are already in progress.
Original PR description
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the…
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the transaction move is posted and the invoice payment status is updated to "In Payment." This results in the email incorrectly asking the customer to remit payment, even though the payment is already being processed. **Steps to Reproduce:** 1. Enable "Automatic Invoicing" from Sales settings. 2. Enable and publish any payment provider (e.g., Demo) in test mode. 3. Create an invoice and generate a payment link. Open the link in a new incognito tab and pay using any dummy card number (ensure the "Save my payment details" checkbox is checked). This saves the payment token for the partner. 4. Create a new invoice with the same partner, then register payment. Select the payment method and the previously saved token, then confirm. 5. Observe that the payment status is "In Payment," but the email sent to the customer incorrectly asks them to remit payment. **Fix:** This change prevents payment notification emails from being sent automatically when the payment is manually created from the payment register wizard. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4850293) opw-4850293 Forward-Port-Of: odoo/odoo#221997 Forward-Port-Of: odoo/odoo#221587
Vendor bills no longer fail when the same vendor supplies a shared product with different units of measure in different companies. The system now selects the vendor setup for the active company, helping multi-company purchasing and accounting teams create bills reliably.
Original PR description
**Step to reproduce:** 1. Install purchase and account module. 2. Enable the uom option (Purchase > Configuration > Settings). 3. Create a vendor (partner). 4. Set up companies (have at least two…
**Step to reproduce:**
1. Install purchase and account module.
2. Enable the uom option (Purchase > Configuration > Settings).
3. Create a vendor (partner).
4. Set up companies (have at least two companies).
5. Create a product (Vendors bills > Product) that is shared across two companies.
6. Go to Vendors > Product : in the product’s Purchase tab:
- Add the same vendor twice - one line for each company.
- Assign different UoMs (e.g., “Unit(s)” for US company and “Kilogram(s)” for AT company).
7. Switch to one company.
8. Create a vendor bill in one of the companies using that product and vendor.
**Issue:**
A ValueError is raised when creating the vendor bill:
`ValueError: Wrong value for account.move.line.product_uom_id: uom.uom(1, 2)`
https://github.com/odoo/odoo/blob/0e23327c322acbdf6acfecd52385ffee0266220c/addons/account/models/account_move_line.py#L806-L807
**Cause:**
During the computation of product_uom_id where retrieves all seller records
matching the partner_id but fails to limit the result.
**Solution:**
To fix this, retrieve sellers by both partner_id and company_id and first matching
seller is used. This ensures the UoM is correctly set according to the company also.
opw-4877577
Co-authored-by: PIYUSH <pish@odoo.com>
Forward-Port-Of: odoo/odoo#217137Delivery operation reports now print correctly even when an item has no reserved stock. The report also hides zero-quantity lines, making delivery slips clearer and avoiding confusing empty entries.
Original PR description
**Steps to reproduce:** 1. Install Inventory > Go to Inventory > Configuration > Tick Storage Locations. 2. Go to Operations > Deliveries > create a new delivery. 3. Add two products: one with…
**Steps to reproduce:** 1. Install Inventory > Go to Inventory > Configuration > Tick Storage Locations. 2. Go to Operations > Deliveries > create a new delivery. 3. Add two products: one with on-hand quantity, one without. 4. Set demand quantities > mark as To Do, check availability, and try to print. **Issue:** - A traceback (IndexError: tuple index out of range) occurs when printing picking report if a product has no reserved quantity, due to missing move lines. **Cause:** - The template attempts to access `move.move_line_ids[0]` without checking if `move_line_ids` is non-empty. This raises an IndexError if there's no move lines. https://github.com/odoo/odoo/blob/f539705023993e284dce5dc1027c3c3af9c42d75/addons/stock/report/report_stockpicking_operations.xml#L143-L146 - Also, move lines with zero quantity are displayed in the picking operation report. <img width="529" height="94" alt="image" src="https://github.com/user-attachments/assets/61c439a2-16c4-44aa-a664-fbec672f6226" /> **Solution:** - Add a check to ensure `move.move_line_ids` is non-empty before accessing the first element. - Add filter to avoid rendering move lines with zero `quantity` in the delivery. **opw-4961985** Forward-Port-Of: odoo/odoo#220317
This update prevents access errors when opening the Transaction button on reconciled payments in multi-company setups. It ensures the payment uses the correct default bank statement journal for the selected company, avoiding accidental selection of a journal from another company.
Original PR description
This fixes the access error when using the 'Transaction' smart button from a reconciled payment present since Steps to reproduce: - Multi-company environment with account_accountant installed - Only select one company - Create a payment with a journal entry (by adding an account on the payment method) - Create a corresponding bank statement and reconcile them both together - Go to the payment form view - Click on the Transaction button `button_open_statement_lines` - Access error is raised due to a "random" assignation of journal which is likely to be one from the other company This make sure we select the default statement line journal by default, ensuring we don't search for a journal in every company
The Romanian SAF-T export now handles missing optional product group information without crashing. VAT checks were also aligned with the correct validation logic, reducing false errors and helping businesses complete required tax exports more reliably.
Original PR description
- Added fallback for missing to prevent crash during export. - Replaced incorrect usage of with to align with actual partner VAT validation logic and avoid false errors. These changes ensure smoother SAF-T export by handling optional fields and validation more robustly. Forward-Port-Of: odoo/enterprise#91737
Customers no longer receive automatic emails asking them to pay when a payment has already been manually registered with a saved payment method. This avoids confusing payment reminders while the invoice is correctly marked as being processed.
Original PR description
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the…
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the transaction move is posted and the invoice payment status is updated to "In Payment." This results in the email incorrectly asking the customer to remit payment, even though the payment is already being processed. **Steps to Reproduce:** 1. Enable "Automatic Invoicing" from Sales settings. 2. Enable and publish any payment provider (e.g., Demo) in test mode. 3. Create an invoice and generate a payment link. Open the link in a new incognito tab and pay using any dummy card number (ensure the "Save my payment details" checkbox is checked). This saves the payment token for the partner. 4. Create a new invoice with the same partner, then register payment. Select the payment method and the previously saved token, then confirm. 5. Observe that the payment status is "In Payment," but the email sent to the customer incorrectly asks them to remit payment. **Fix:** This change prevents payment notification emails from being sent automatically when the payment is manually created from the payment register wizard. opw-4850293 Forward-Port-Of: odoo/enterprise#91761 Forward-Port-Of: odoo/enterprise#91570
Time off that overlaps with a public holiday is no longer deferred into the next payslip. This prevents employees from incorrectly losing future leave or having payroll adjustments for days that were already treated as public holidays.
Original PR description
The aim of this commit is to prevent a sick day or any other type of time off taken on a public holiday to be deferred. To reproduce: - Create a public Holiday for previous month - Regenerate the work entries for that month - Compute a batch of payslip for last month, validate and mark it as paid --> The public holiday should be on the payslip - OPTIONAL: run the cron `Payroll: Generate pdfs` to make create the payslip in document and make it available to the concerned employee. - With the concerned employee, put a time off on the whole week of the last month. It should overlap with the public holiday. - Validate the time off and defer it for next payslip - Compute a batch of payslip for following month, validate and mark it as paid Before this commit: The overlapping sick day gets deferred completely ignoring the fact it was a public holiday. After this commit: The overlapping sick day doesn't get deferred. opw-4903546 Forward-Port-Of: odoo/enterprise#89264
Australian payroll tax withholding amounts are now included when preparing tax return closing entries, improving the completeness of payroll-related tax reporting. The payroll accounting module also installs more reliably when Australian localization is being set up for a new company.
Original PR description
This PR is divided in 2 commits: A first commit is an implementation AU specific and will create the lines related to tax on salary in the tax return closing entry. Before this commit, these lines…
This PR is divided in 2 commits: A first commit is an implementation AU specific and will create the lines related to tax on salary in the tax return closing entry. Before this commit, these lines weren't taken into account in the closing entry. The condition to select the account.move.line are the following: - The journal item has a "W2", "W3" or "W4" (Withholding Tax) tax grid whose journal entry is linked to an hr.payslip. - The journal item does not have an originating tax record (i.e., tax_line_id is empty). - The journal item is posted to a tax provision account (i.e., a balance sheet one) as defined on the salary rule. A second commit fixes a bug: the manifest of the l10n_au_hr_payroll_account module was having a 'countries': ['au'] dependency, that was adding a condition to the dependencies to auto install the module: we expect an existing AU company in DB. But for example if the user installs l10n_au, the condition is evaluated at the moment he clicks on install, and no AU company exists at that time. Task-4921992
When products are added to a Field Service task, the related sales order is no longer locked too early when automatic sales locking is enabled. This ensures the delivery order is created correctly and users can continue managing the Field Service sale without getting stuck in an inconsistent state.
Original PR description
Issue: When the "Lock Confirmed Sales" setting is enabled, adding a product to a Field Service task would lock the associated sales order before its picking could be created. The confirmation process…
Issue: When the "Lock Confirmed Sales" setting is enabled, adding a product to a Field Service task would lock the associated sales order before its picking could be created. The confirmation process locks the order first , and the subsequent step to create stock moves (`_action_launch_stock_rule`) explicitly skips locked orders. Reproducible on 17.0~master [Task](https://www.odoo.com/odoo/action-4043/4633977) Odoo 17: https://drive.google.com/file/d/1qmAYhSu6gU91efuJEDF-Irn2cLGUQP0A/view?usp=drivesdk Odoo 18: https://drive.google.com/file/d/1x8IeXwT7ZFM7Av9Vp6GSvGIbOaEGfmVx/view?usp=drivesdk Steps to reproduce: 1. In Sales > Configuration > Settings, enable "Lock Confirmed Sales". 2. Go to a Field Service task. 3. In the kanban view via the "Products" smart button, add a product. 4. Come back to the task, refresh the browser, open the linked Sales Order from the smart button. 5. **Before this fix:** The SO is locked, no picking is created, and SO lines will have delivered_qty set even though we haven't delivered anything. 6. **After this fix:** The SO is not locked, and a Delivery smart button is correctly displayed, linking to the generated picking. This behavior left the sales order in an inconsistent state: it was locked, but had no corresponding delivery order. As a result, users were blocked from removing or modifying the products added to the task, as the system prevented edits on a locked order with no picking to cancel. Let's step through what's going on here; 0. We enable "Lock Confirmed Sales" option. 1. Add a product to the Field Service(FS) task https://github.com/odoo/enterprise/blob/4256ea170c31209b83ff808e51145757571f8556/industry_fsm_sale/controllers/catalog.py#L19-L42 https://github.com/odoo/enterprise/blob/4256ea170c31209b83ff808e51145757571f8556/industry_fsm_sale/controllers/catalog.py#L38 2. set_fsm_quantity() is invoked, which will create a SO for the FS task https://github.com/odoo/enterprise/blob/35e1f47160d5840e8701fc0ad43ec42bbfaf9e36/industry_fsm_sale/models/product_product.py#L144 3. `_fsm_create_sale_order()` will immediately `action_confirm()` the new SO, because of the reasons in the function description. ( Since we are immediately confirming newly created SO, I think we should consider not applying the "Lock Confirmed Orders" option to FSM SOs.) https://github.com/odoo/enterprise/blob/2347dac2568dbcf83578f044f8fe41ab70a20f47/industry_fsm_stock/models/project_task.py#L124-L134 https://github.com/odoo/enterprise/blob/2347dac2568dbcf83578f044f8fe41ab70a20f47/industry_fsm_stock/models/project_task.py#L134 4. `odoo/addons/sale/models/sale_order.py/action_confirm()` will lock SO because we enabled 'Lock Confirmed Sales' https://github.com/odoo/odoo/blob/863c064fd911cb4eeedad0abec82adb4690128f6/addons/sale/models/sale_order.py#L964 6. `_action_launch_stock_rule()` is invoked, is in charge of creating Pickings for SOs https://github.com/odoo/odoo/blob/3be83d363786526fe470e41122169e594b5467fb/addons/sale_stock/models/sale_order_line.py#L303 https://github.com/odoo/odoo/blob/3be83d363786526fe470e41122169e594b5467fb/addons/sale_stock/models/sale_order_line.py#L343-L344 7. But, since `line.order_id.locked` , the system do not create Pickings for the SOs. https://github.com/odoo/odoo/blob/3be83d363786526fe470e41122169e594b5467fb/addons/sale_stock/models/sale_order_line.py#L315-L316 The line was introduced by https://github.com/odoo/odoo/commit/17bece3e797913bcba8dd7e07fc8541c0a45e3f7 This commit resolves the issue by passing a context key `fsm_create_sale_order=True` when confirming a sales order that is being created from a Field Service task. The `_should_be_locked` method on the sale order is overridden to check for this context key. If the key is present, it prevents the order from being locked within that specific transaction, allowing the stock rules to execute correctly and create the necessary picking. The order will be locked for any subsequent operations as intended. Tradeoff here; We are sacrificing the universal application of one feature (automatic lock on confirmed sales order) to fix a critical bug that makes the entire FSM delivery process unusable. --- EDIT: Without this change, all of [test_fsm_stock](https://github.com/odoo/enterprise/blob/17.0/industry_fsm_stock/tests/test_fsm_stock.py)'s test cases that use `_fsm_ensure_sale_order()` will fail if the setting is on. (around ~20 test cases). [In the past, similar issue occurred for Subscription Orders, and the PO confirmed that the "Lock Confirmed Order" setting should never affect the subscriptions. ](https://github.com/odoo/enterprise/commit/e4f9d76c0a58f3cc226a2372f3936cea4547312e). This commit takes the same approach to ignore the setting upon SO confirmation. opw-4633977 opw-4749653 opw-4880664 Forward-Port-Of: odoo/enterprise#91563 Forward-Port-Of: odoo/enterprise#88855
The journal report now keeps draft accounting entries grouped consistently when several invoices share the same date. This prevents errors when users include draft entries and use the Load More option, making report navigation more reliable.
Original PR description
**Issue description:** When fetching AMLs for the journal report with _query_aml(), it sorts the AMLs based on (am.date, am.name), which are not unique in case we have multiple (draft) moves with the same date. The lines will end up mixed and ordered with respect to the account, which causes errors with the "Load More" functionality, as it assumes that the lines are ordered based on their move. For posted entries, it's not an issue as the am.name is unique. **Steps to reproduce:** -Create 3 or more invoices (with 3+ AMLs each) in draft and on the same invoicing date. -Open journal report settings and set the Load More Limit to 5. -Open the journal report and set the date to this day and check the "Include Draft Entries" option. -Press "Load More", you will get an error. opw-4929907 Forward-Port-Of: odoo/enterprise#91746 Forward-Port-Of: odoo/enterprise#90360
3 changes
Resolved issues and error corrections
Fixes a reconciliation issue where currency conversions with many decimal places could create small artificial differences, such as one cent. The system now keeps the original foreign currency amount when the recalculated value is close enough, helping invoices reconcile correctly and reducing manual follow-up.
Original PR description
The aim of this commit is to keep the original foreign amount currency if the computation ends up close enough to it. Before this commit: The reconciliation process was losing so much precision that…
The aim of this commit is to keep the original foreign amount currency if the computation ends up close enough to it. Before this commit: The reconciliation process was losing so much precision that it could mess up the reconciliation of one single invoice. After this commit: We keep the original amount as it is most probably the correct one. Context: With a rate of 1 US$ = 5.421327349 R$ and an invoice of 143.62 R$, we convert the amount in US$ which is 26.491668921649627 US$. As we have to round it for the accounting, we end up with 26.49 US$ as company currency amount, losing the rest of the decimals. During the reconciliation process, we convert back the US$ to R$ ending up with 143.61096147501 R$ that have to be rounded to 143.61 R$. This creates a difference of 0.01 R$ which surfaces later on. Chosen solution: As we still have the original currency amount and the rate, we are able to recompute the raw numbers and we are able to make "fairer" comparison between the amounts. If we can confidently tell that the amounts are close enough, we can just keep the original amount and prevent all those rounding errors to be taken into account. opw-4937508 Forward-Port-Of: odoo/enterprise#91650 Forward-Port-Of: odoo/enterprise#91462
This update fixes issues that could prevent AI live chat conversations from being found correctly, especially for website visitors. It also keeps the AI live chat status accurate when a conversation is transferred to a human operator, reducing broken or confusing chat experiences.
Original PR description
This commit solves the following bugs: - Update the logic of retrieving ai chat channel to include livechat channels. - Given that retrieving ai chat channel relies of `is_member` being True, the value of the `mail.guest` record corresponding to the current user (in case of public users) should be added to the context. - The value of `livechat_with_ai_agent` wasn't synced when the livechat channel was forwarded to a human operator. This caused bugs in the ai livechat snippet.
Applying a commission or partnership grade to a company contact will no longer automatically apply it to related child contacts. This restores the intended behavior and helps avoid incorrect commission or subscription partnership settings being assigned across linked contacts.
Original PR description
This reverts commit 14001a8a0216750be0c897d0e1bf31fccfc51c6a so that applying a grade no longer adds it to the children of the partner as well. TASK-4985900 Forward-Port-Of: odoo/enterprise#91618 Forward-Port-Of: odoo/enterprise#91456
9 changes
Resolved issues and error corrections
Users can now add images by URL even when the source website has certificate issues that previously blocked the upload. This reduces failed image insertions in the HTML editor and helps users reuse externally hosted images more reliably.
Original PR description
Currently, an error is generated when the user uploads an image with a URL like https://hcmute.edu.vn/Resources/Images/SubDomain/HomePage/tin%20tuc/B%C3%A1o%20ch%C3%AD%20n%C3%B3i%20g%C3%AC%20v%E1%BB%81%20HCMUTE/Nen/Nen%20phu%20nu.jpg error: `SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)` This is because `requests.head()` is trying to verify the user-provided URL server has a valid TLS certificate, but it is not found with the above url. This commit will fix the above issue by disabling SSL verification on the user provided image URL. sentry-5998939121 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could block users from registering payments when an invoice and its payment use different currencies. Businesses using multi-currency accounting can now process these payments more reliably without hitting an unexpected system error.
Original PR description
Currently, an error occurs when register a payment for an invoice in a different currency. Step to produce: - Install the ```account``` module. - Activate multicurrency - Create a new invoice(in USD), add an invoice line and customer, and confirm it. - Change the currency to EUR when making an invoice payment. ```IndexError: tuple index out of range``` An error occurs when the system tries to get a move line at [1], 'move_id' for a payment is not available Link [1]: https://github.com/odoo/odoo/blob/8e95527210a40f354ffb3c57e49f6580252edbfa/addons/account/wizard/account_payment_register.py#L1110 To handle this issue, add a condition to retrieve the move line value if an invoice is available for payment. Sentry-5989418366 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures withholding taxes on refund payments are recorded using the proper refund treatment, so tax reports reflect the amounts correctly. It also prevents an issue that could stop users from editing payments when certain default company accounts were used.
Original PR description
Currently, there is an issue with how the repartition line is selected when registering payment for a refund for withholding taxes. It would select the invoice repartition line, causing the tax amounts to affect the tax report in the wrong way. - It is not setting the is_refund param on the base line, leading to incorrect lines on the payment's entry. - Detecting if we are a refund is tricky with the current system, which is based on the wizard payment_type. It requires some changes in order to be able to have withholding lines with a type_tax_use which doesn't match the payment wizard. Also fixes an issue where a payment could not be edited after creation if the withholding tax line is using the company's default transfer account. In this case, the lines would be counted as counterparts and cause issues. As the account on the base line does not matter that much, we decided to use the simple solution of blocking its usage.
This fix ensures Malaysian e-Invoices use the right state information for foreign customers and consolidated invoices. It helps businesses avoid submission errors and stay aligned with Malaysian e-Invoicing requirements.
Original PR description
## Before this commit: The `CountrySubentityCode` was computed by simply using the `state code` of the partner, without handling the following cases: - Non-Malaysian Partners: For partners located outside Malaysia, the format requires the `state name` to be passed instead of the `state code`. - Consolidation Entries: For consolidation invoices, a fixed value `17` should be passed as the `CountrySubentityCode`, regardless of the partner’s state. ## After this commit: The computation of `CountrySubentityCode` has been updated to handle both cases correctly: - For non-Malaysian partners, the `state name` is used. - For consolidation entries, the fixed value `17` is used. - For regular Malaysian partners, the `state code` continues to be used as before. This ensures compliance with Malaysian e-Invoicing specifications and prevents errors. > Task-4938198 Forward-Port-Of: odoo/odoo#219201
The Luxembourg tax report XML export now follows updated legal rules for special scheme fields, only including certain fields for periods that touch 2025 or later. Annual VAT reports also ensure required fields are present when related fields are included, reducing rejection risk during filing.
Original PR description
As per legal requirements, the 491, 492 and 493 fields of the xml export of the tax return only need to be included if at least one day of the period includes dates in 2025 or later. As per legal requirements too, the 192 and 193 fields are mandatory in the annual report if some other fields are present. Among those are 361 and 362 which are mandatory even if null so if 192 and 193 are not there yet, we set them to 362 and 363 values (0.0 in most cases). --- from feedback on task-4587067 opw-4757770 Forward-Port-Of: odoo/enterprise#91648 Forward-Port-Of: odoo/enterprise#89437
Winbooks imports now continue when the source chart of accounts uses tax accounts differently from Odoo's default setup. This prevents import failures and lets users review and adjust the imported draft data inside Odoo afterward.
Original PR description
When importing Winbooks data, if the CoA configuration in Winbooks is different from Odoo's default, users will experience a failure with a message similar to ``` Validation Error Tax Receivable Account (411000 VAT Recoverable) should be an account of type "Receivable" or "Payable" with both options "Allow Reconciliation" and "Non Trade" enabled. ``` This occurs because the account 411000, meant to store the tax provisions, in Winbooks was used as tax receivable. In similar cases we should not raise any error and should let the import go through: the data is imported in draft and the user has the possibility to bring the modifications in Odoo opw-4850314
This update resolves several operational issues across accounting localization, bank statement imports, IoT device handling, and point of sale compliance. It helps prevent errors during e-invoicing, financial report exports, dry-run imports, and device subscription reporting.
Original PR description
Revert odoo/enterprise/pull/81587 because errors are triggered on dry-run. closes odoo/enterprise#83391 Signed-off-by: Paolo Gatti (pgi) <pgi@odoo.com>
Fixes an error that could block customers from paying a renewed subscription after using the preview and payment flow more than once. Missing invoice amounts are now treated as zero, allowing the payment process to continue reliably.
Original PR description
Currently, an error occurs when the user again pays for sale subscriptions. Step to produce: - Install the ```sale_subscription``` module. - Create a new sale order, add a customer name, add a…
Currently, an error occurs when the user again pays for sale subscriptions. Step to produce: - Install the ```sale_subscription``` module. - Create a new sale order, add a customer name, add a product in the order line that has 'Subscriptions', and add a 'Recurring Plan' with date and confirm the sale order. - Create an invoice for this sale order and confirm it. - Back to the sale order, click on 'Renew' button. - Open a preview of the sale order, and click on 'Sign & pay', and come back to the edit mode of the sale order. - Again open a preview of the sale order. - Again click on 'Pay' for this sale order subscription. ```TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'``` An error occurs when the system attempts to compare invoice amounts with the recurring amount at [1], but value of an invoice amount is 'None'. Link [1]: https://github.com/odoo/enterprise/blob/df2735cdd067df9ec88cad8202da2314ffd9d65a/sale_subscription/controllers/portal.py#L396 To handle this issue, provide a default amount for an invoice as zero. Sentry-6014356823
The Czech VIES summary report now uses the correct invoice count, transaction terminology, grouping, and whole-crown totals. This helps businesses submit more accurate VAT reporting in line with Czech tax authority requirements.
Original PR description
There are some errors in the VIES summary report fixed here:
1. The supply number is not the quantity invoiced, it is the
number of invoices
2. There was some confusion between the terms "supply transaction"
and "supply code", with "supply code" not being used
in this report (but still in Python code to avoid breaking stable versions)
3. We were considering journal items, whereas it is preferable
to group them by journal entry
4. The total value is rounded up to the nearest whole crown (Czech currency)
Here is a link to the documentation:
adisspr.mfcr.cz/dpr/adis/idpr_pub/epo2_info/popis_struktury_detail.faces?zkratka=DPHSHV
where pln_hodnota is the total value; pln_pocet is the supply number; and k_pln_eu is the supply transaction.
opw-4688616