Daily updates from Odoo
Thursday, August 7, 2025
27 changes · saas-18.3
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
This fixes an error that could occur when a company added its chart of accounts after initial setup and then tried to validate the tax return wizard. The accounting onboarding steps are now created as needed, helping users complete tax return setup without interruptions.
Original PR description
For companies that didn't have COA installed, they didn't have onboarding created leading to traceback when setting up fiscal year onboarding for Tax Returns. Steps to reproduce: * A company installed but don't have COA. * Install COA from settings. * In Accounting Dashboard -> Tax Returns * Traceback when validating the return wizard. task-4981853 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where newly created calendar meetings could lose the intended contact link and be saved with an empty placeholder instead. Users creating meetings from a contact will now see the meeting correctly associated with that contact, reducing confusion and follow-up errors.
Original PR description
To reproduce:
=============
- Pick any contact
- Click on meeting
- Select the time for the meeting with that contact
- Click on more options
- Add a meeting and save
- Click on meeting & contact
Problem:
========
- When creating calendar events, res_id=0 is passed in vals_list
- Events are created with res_id=0 instead of using default value
Solution:
=========
- Add separate handling for res_id in vals_list processing
- Apply defaults.get('res_id') when vals.get('res_id') is falsy
opw-4892445
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#221767
Forward-Port-Of: odoo/odoo#216042The 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
The ORM now ignores empty index definitions instead of trying to create invalid database indexes. This prevents module installations from failing when an index setting is accidentally left blank or returns no value.
Original PR description
Currently when trying to create an index with a falsy definition, either a string or a callable, psql raises a SyntaxError preventing the installation of the module. This commit fixes that by skipping the index creation in case of a falsy definition. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222080
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log int
Original PR description
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct…
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log into to one of the demo Argentinean Companies: (AR) Responsable Inscripto 4. Create a customer invoices of type "B" 5. Go to the partner and change the Language to Spanish 6. Return to the invoice and print the PDF 7. Check that the VAT Content section is not translated. ### **Current behavior before PR:** <img width="572" height="407" alt="image" src="https://github.com/user-attachments/assets/e28e609e-2cd2-4ace-9509-f969692ec893" /> ### **Desired behavior after PR is merged:** The "VAT Content section should appear as "IVA Contenido" when printing the report in Spanish. opw-4938520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221832 Forward-Port-Of: odoo/odoo#219912
This update fixes grammatical mistakes in invitation and password reset notifications. It improves the clarity and professionalism of messages users receive during account signup and recovery flows.
Original PR description
**Before this commit:** - The notifications for `Send an Invitation Email` and `Send Password Reset Instructions` contained grammatical mistakes. **After this commit:** - The grammatical mistakes have been corrected. task-4975439 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220840
Portal users can now read marketing cards, matching the access already available to public users. This helps intended recipients, who are often customer or partner contacts, view the cards without unnecessary access errors.
Original PR description
The access right that allows public users to read cards should obviously apply equaly to portal users. Recipients will very often be partners so them not being allowed is very annoying. task-5000332 Forward-Port-Of: odoo/odoo#222037
This fix prevents an error when website editors quickly add, remove, and add carousel slides. It makes carousel editing more reliable by checking that the selected slide still exists before continuing.
Original PR description
Previously, when rapidly adding and removing slides in the Carousel snippet (s_carousel), a JavaScript traceback would occur under certain conditions. Step to reproduce: 1. Drag and Drop a Carousel Snippet (s_carousel) on the page. 2. Rapidly `add -> remove -> add` slides button in editor. 3. Traceback occurs. Cause: - The issue occurred because the currently active slide was passed as the target to activate a snippet. During rapid DOM changes, the active slide could be destroyed or not yet rendered, resulting in a race condition and JavaScript error. Solution: - Additional guards have been added in the `_activateSnippet` function to ensure the `editorToEnable` target is still present in the DOM. task-4270369 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222055 Forward-Port-Of: odoo/odoo#214721
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
The Stripe documentation link in Point of Sale payment provider settings now points to the correct setup instructions. This helps users configure Stripe payments without running into a broken help link.
Original PR description
Before this commit: ---------------- - The Stripe documentation link in the POS payment provider configuration was broken, leading to a poor user experience. After this commit: ------------------------------- - The Stripe documentation link has been corrected to ensure proper access to setup instructions. Task - 4797691 Forward-Port-Of: odoo/odoo#210515
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#217137This fix prevents an error when users create a new payroll work entry from the list view without start or end dates. It improves reliability for French payroll workflows by allowing record creation to proceed safely instead of showing a traceback.
Original PR description
Currently, a traceback occurs when a user attempts to create a work entry in the list view. **To reproduce this issue:** 1) Install the `l10n_fr_hr_work_entry_holidays` module. 2) Switch to the `French` company and open the payroll. 3) Open the work entries in list view and try to create a new record. **Error:** ``` AttributeError: 'int' object has no attribute 'seconds' ``` **Cause:** By default, when creating a work entry through the list view, no `start` or `end` date is provided. This leads to the traceback originating from the following line when computing the duration. https://github.com/odoo/odoo/blob/84b15dc1f866e27d5c8a5fe3e457c2f982bcb133/addons/l10n_fr_hr_work_entry_holidays/models/hr_work_entry.py#L28-L32 **Solution:** Adding an extra check of the `start` and `end` date would resolve this issue. opw-4943104 Forward-Port-Of: odoo/odoo#221442 Forward-Port-Of: odoo/odoo#220127
Delivery 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 fixes an error that could appear when an employee without Time Off permissions changed the type of a time off request. Users can now complete the request flow without being blocked by an internal overtime field access issue.
Original PR description
Steps: ([demo](https://drive.google.com/file/d/1nphgXlAc_w3z0oE7ickuTaGhl5khLhxo/view?usp=drive_link)) - Remove Time Off access to "Demo" user - Login as demo - Request a "Paid Time Off" - Change the Request time off type to "Sick" Actual result: - overtime_id field access error Expected result: - no error Caused by: https://github.com/odoo/odoo/pull/207780 opw-4929659 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218095
Purchase Order PDFs now handle very long product purchase descriptions more reliably when they continue across multiple pages. This prevents the description text from overlapping table headers, making printed purchase documents easier to read and share.
Original PR description
**Steps to reproduce**: 1. Install the `purchase` module. 2. Go to a product's `Purchase` tab and add a long purchase description (approx. 40–45 lines). 3. Create a Purchase Order using this product.…
**Steps to reproduce**: 1. Install the `purchase` module. 2. Go to a product's `Purchase` tab and add a long purchase description (approx. 40–45 lines). 3. Create a Purchase Order using this product. 4. Print the PDF of the Purchase Order (via gear icon). **Observation**: The long product description overlaps with the table header when the table spans multiple pages in the generated PDF. **Issue**: wkhtmltopdf does not handle multi-page table headers properly by default. causing header/content overlap when the table breaks across pages. **Solution**: Apply a known wkhtmltopdf workaround by explicitly setting: `<thead style='display: table-row-group;'>` This ensures headers will not repeat same as sale order. ref(https://github.com/odoo/odoo/pull/53909) Before: <img width="1003" height="426" alt="image" src="https://github.com/user-attachments/assets/38b7b4de-ea81-445f-8cd2-ae164fcb7531" /> After: <img width="1000" height="414" alt="image" src="https://github.com/user-attachments/assets/ef09ef94-2a26-468a-b6e7-03d93b4515b8" /> opw-4908457 Forward-Port-Of: odoo/odoo#219830
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
The VoIP call timer now uses the user's device timing consistently instead of mixing it with server timing. This prevents calls from showing a negative starting time when device and server clocks are slightly out of sync.
Original PR description
It was reported that the timer for the call would sometimes start as a negative number. Examining the code that computes it suggests that the timestamp sent by the server was a few seconds in the future compared to luxon.DateTime.now() (client time). This discrepancy is most likely due to the clock skew between the client and the server. This commit adapts the code so that it only computes time based on client-side values, effectively preventing clock skew issues. Task-4930666 Forward-Port-Of: odoo/enterprise#91738
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
Menu synchronization now sends a supported selection limit for multi-checkbox product options on Doordash. This keeps checkbox-style choices displaying correctly instead of appearing as single-choice radio buttons.
Original PR description
Steps: - Configure urban piper in pos.config - Select products that has attribute and its type is multi-checkbox - Sync menu. Issue: - For Doordash multi-checkbox appears as radio instead of checkbox. Cause: - max_selectable is -1 which is not supported by Doordash. Fix: - Send static value as 30 instead of -1. task- 4971545 Forward-Port-Of: odoo/enterprise#91499
This fixes a timing issue when processing Spanish Amazon sales invoices that could lock the invoice name too early. The change helps ensure invoice references are handled correctly, reducing the risk of incorrect or blocked invoice processing.
Original PR description
Accessing `invoice_line_ids` was flushing and protecting `move_name` too early. runbot-162079 Forward-Port-Of: odoo/enterprise#91703