Daily updates from Odoo
Thursday, August 28, 2025
33 changes · saas-18.3
Resolved issues and error corrections
Exchange returns now treat replacement items as new stock movements, preventing old serial numbers from being reused incorrectly. This also keeps stock counts and forecasts accurate after exchanges and limits the exchange action to relevant incoming or outgoing transfers.
Original PR description
When returning tracked-by-serial products from an incoming picking for an exchange, the exchange move will have selected existing serial numbers for the new incoming picking. This happens because…
When returning tracked-by-serial products from an incoming picking for an exchange, the exchange move will have selected existing serial numbers for the new incoming picking. This happens because `move_orig_ids` is set on the exchange move(s), then `_action_assign()` happens. If there's a `move_orig_ids`, it will use the available move lines from the move_orig_ids and so assign the corresponding serial number. Additionally, the buttons to generate/import serials/lots are invisible because `origin_returned_move_id` is set on the same exchange move(s). Again, the exchange move(s) should be considered 'new' move thus having no origin. task 4893860: Additionally (again), it fixes an issue where on-hand quantities and forecasted quantities of the exchanged product were incorrect after validating the exchange. task 4778066: Finally, this PR also hides the 'Return for Exchange' button for pickings that are neither `incoming` nor `outgoing`. tasks 4748294 (& 4778066 & 4893860) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216111
This fix ensures that when an individual customer is linked to a company, their assigned pricelist stays synchronized with the company's pricelist. It prevents quotations from unexpectedly switching to a different pricelist, helping sales teams keep pricing accurate and predictable.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Create an individual partner; 2. assign them a pricelist A; 3. create a new company partner for them; 4. create a new pricelist A & sort it on top; 5. open a…
Versions
--------
- 18.0+
Steps
-----
1. Create an individual partner;
2. assign them a pricelist A;
3. create a new company partner for them;
4. create a new pricelist A & sort it on top;
5. open a new quotation;
6. set new company as customer;
7. change customer to the individual partner.
Issue
-----
The quotation's pricelist changed from B to A. The pricelist used for the individual should be identical to the one used for their company.
Cause
-----
Commit de302c2d36305 added the `specific_property_product_pricelist` field to `res.partner`, as the way company-dependent fields are managed was changed on the database-level.
Commit 67cf577cd0a0 added the `_company_dependent_commercial_fields` method to enable syncing company-dependent commercial fields. The base method fetches all fields retrieved via `_commercial_fields`, and selects those whose `company_dependent` attribute is `True`.
In previous versions, the `_company_dependent_commercial_fields` override in `product` adds `property_product_pricelist`, as this field does not have the `company_dependent` attribute set, but it behaves as a company-dependent field. Starting from 18.0, the override adds `specific_property_product_pricelist` instead, which does have the `company_dependent` property set.
As a consequence, when `_company_dependent_commercial_sync` gets called, it does not sync the `specific_property_product_pricelist` as it's not included in the `_commercial_fields` override, nor does it sync when retrieving it from `_company_dependent_commercial_fields`, as it skips the current company, assuming the field was already handled by `_commercial_sync_from_company`: https://github.com/odoo/odoo/blob/c40760244d128cb57e11a233e89a93dd92b8fb56/odoo/addons/base/models/res_partner.py#L667-L668
Solution
--------
- Move `specific_property_product_pricelist` to `_commercial_fields`
- This enables it to sync in `_commercial_sync_from_company`
- Remove the `_company_dependent_commercial_fields` override
- `property_product_pricelist` shouldn't get synced by itself
- `specific_property_product_pricelist` is already included by the base method
opw-4988736
Forward-Port-Of: odoo/odoo#222223Fixed a Point of Sale issue where decreasing an unsaved order line could accidentally remove two items from the current order instead of one. This helps cashiers keep orders accurate and avoids unintended changes during checkout.
Original PR description
- Fix issue in `handleDecreaseUnsavedLine` which was leading to removing two orderlines instead of one in the current order. This issue appeared since this commit (8e964000474125ca2db4ee4e5883be8424d9fca1). Since we already set the line qty to 0 (or remove it) inside `updateSelectedOrderline` after calling `_showDecreaseQuantityPopup`, we don't need to call `removeOrderLine` inside `handleDecreaseUnsavedLine`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224230
Changing a customer or vendor VAT number in the Indian localization no longer causes the invoice fiscal position to be recalculated. This keeps tax-related settings stable and consistent with standard Odoo behavior, reducing unexpected changes during partner detail updates.
Original PR description
The field fiscal_position_id in l10n_in was dependent on l10n_in_gst_treatment, which itself depended on partner.vat, partner.country_id, and partner.l10n_in_gst_treatment. As a result, any change to the partner’s VAT triggered a recomputation of fiscal_position_id. This contradicts the generic behavior, since VAT changes should not affect fiscal position. This fix removes the unnecessary dependency chain. reference - https://github.com/odoo/odoo/pull/224511
Website editors can now resize columns and use grid layouts correctly when editing pages in right-to-left languages such as Arabic. This improves the editing experience for multilingual websites and prevents layout controls from behaving incorrectly in RTL mode.
Original PR description
**[FIX] web_editor, mass_mailing: fix resizing columns in rtl mode** This commit fixes issues in edit mode when resizing columns or using grid mode on websites displayed in a right-to-left (RTL) language like Arabic. task-4815296 Forward-Port-Of: odoo/odoo#224313 Forward-Port-Of: odoo/odoo#217338
This fix prevents completed manufacturing orders from failing during unbuild when component tracking rules were changed after production. Businesses can now reverse eligible production without being incorrectly asked for lot or serial numbers that did not exist at the time.
Original PR description
**Description of the issue/feature this PR addresses:** This PR fixes a regression when using the _Unbuild_ feature on a previously completed `mrp.production` whose components did not originally…
**Description of the issue/feature this PR addresses:** This PR fixes a regression when using the _Unbuild_ feature on a previously completed `mrp.production` whose components did not originally require tracking (no lot/serial), but have been updated later to require it. When unbuilding such a product, `stock.move.line._action_done` currently raises a UserError requiring a lot/serial number, because the component moves created by `mrp.unbuild`: - do not have a picking_type_id, - are not inventory moves, - are not scrap moves, - and lack lot/serial information. However, in this context, the lot requirement is misleading, as the original `mrp.production` did not generate tracked components. It is valid to restore untracked components even if they are now tracked. **Current behavior before PR:** - Create an `mrp.production` for a product with untracked components. - Complete the production. - Later, enable lot tracking on one or more of the original components. - Attempt to unbuild the production. - ❌ Error is raised: “You need to supply a Lot/Serial Number for product…” **Desired behavior after PR is merged:** - The unbuild operation proceeds without error. - The untracked components are restored correctly. - Behavior remains unchanged for tracked components that did require lot info during the original MO. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222612 Forward-Port-Of: odoo/odoo#217282
Point of Sale now shows a clear Access Denied pop-up when a user lacks permission to load sample product categories, instead of failing with a technical error. This helps administrators and users understand the permission issue and avoids a disruptive crash when opening a POS session.
Original PR description
Currently, an error occurs when a new user with the Member role and Administrator rights for the Point of Sale app attempts to open POS Category. Steps to reproduce: --- - Install the `point_of_sale`…
Currently, an error occurs when a new user with the Member role and Administrator rights for the Point of Sale app attempts to open POS Category.
Steps to reproduce:
---
- Install the `point_of_sale` module (without demo data).
- Create a new User and give Administrator rights for POS & Accounting
- Now log in with a new user in a different browser
- Open the pos session(Clothes or bar)
Traceback:
---
```py
AccessError: You are not allowed to modify 'Product Category' (product.category) records.
This operation is allowed for the following groups:
- Products/Admin en Products / Create
Contact your administrator to request access if necessary.
ParseError:while parsing /home/odoo/src/odoo/saas-18.3/addons/point_of_sale/data/scenarios/clothes_category_data.xml:5, somewhere inside <record id="product_category_clothes" model="product.category">
<field name="name">Clothes</field>
</record>
```
This commit prevents the error by displaying an "Access Denied" pop-up when a user with the "Member" role and Administrator rights attempts to open the POS Category.
sentry-6683335275, 6679363278, 6823710988
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prExpense line analytic distributions are now retained when users click Save & Close. This prevents selected cost allocations from being lost and helps keep expense reporting accurate.
Original PR description
**Issue** When creating an expense line, if the user selects an analytic distribution and clicks "Save & Close", the selected distribution is not saved. However, closing the popup with the "X" icon…
**Issue** When creating an expense line, if the user selects an analytic distribution and clicks "Save & Close", the selected distribution is not saved. However, closing the popup with the "X" icon does trigger the save. **Steps to Reproduce** 1. Go to Expenses > Expense Reports 2. Select an employee (e.g., Ronnie Hart) 3. Add a new expense line 4. Set an Analytic Distribution 5. Click Save & Close 6. Observe that the analytic distribution is not retained **Root Cause** The save behavior is triggered by a window click event, but clicks inside modals (like the analytic distribution popup) do not propagate as expected. Because everything within the popup is modal, the click does not satisfy the criteria to trigger saving the data. **Fix** Refine the modal detection logic in the `onWindowClick` handler. Specifically, allow modals that contain `this.widgetRef.el` to trigger the closing (and thus saving) behavior, ensuring that selections made in such modals are not lost when clicking Save & Close. Opw-4765799 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213996
Creating a discussion channel with guest members no longer triggers an error. This helps users save channels reliably when adding guests as members.
Original PR description
Currently, an error occurs when creating a channel that includes guest members. Steps to Reproduce: - Install the `mail` module. - Go to `Channels > New`. - Fill in the `channel name` and `Under…
Currently, an error occurs when creating a channel that includes guest members. Steps to Reproduce: - Install the `mail` module. - Go to `Channels > New`. - Fill in the `channel name` and `Under Members`, add a member with a `guest`, and `save`. `KeyError: 'partner_id'` This error occurs when a user creates a channel and adds a guest in the Members section. This error occurs after [this commit]( https://github.com/odoo/odoo/commit/ad612321bcafe6dfdaabf3aa37f26af364185a69), where the partner_id and guest_id fields dynamically become readonly [1], so that if only the guest is entered, the partner becomes readonly, and when the record is created, the partner_id key does not exist, and raises the error [2]. This commit ensures that the partner_id is accessed only if it is present in the record. [1]- https://github.com/odoo/odoo/blob/5bddf9bfb634d09d3264e4fe4734d75f1083775a/addons/mail/views/discuss_channel_views.xml#L87-L88 [2]- https://github.com/odoo/odoo/blob/5bddf9bfb634d09d3264e4fe4734d75f1083775a/addons/mail/models/discuss/discuss_channel.py#L235 sentry-6791956423 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222211
The two-factor authentication test flow now waits for page elements to be ready before continuing. This reduces intermittent test failures and helps keep release validation stable, without changing the user-facing login experience.
Original PR description
Added wait steps in the TOTP flow tests to ensure that UI elements are fully loaded and ready this should help to avoid race conditions in the tests. build_error-107908 Forward-Port-Of: odoo/odoo#219260
This fixes an unreliable automated test in the Sales Timesheet area by making sure a required kanban column is created before the test continues. It helps reduce false test failures and improves confidence in future updates without changing user-facing behavior.
Original PR description
In this commit, we fix the undeterministic behavior by adding a step to ensure kanban column is created before continue scenario. runbot-error-id~181916 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 fix prevents an error when editing a sales order that has multiple linked invoices visible on the form. Users can now trigger updates, such as changing a product line, without the screen failing due to duplicate-reference checks on several invoices at once.
Original PR description
**Step to reproduce** - create a SO - link 2+ invoices to it - using studio, add invoice_ids to the SO Form - trigger a onchange (ex. change the product from SOL) - we receive a traceback…
**Step to reproduce** - create a SO - link 2+ invoices to it - using studio, add invoice_ids to the SO Form - trigger a onchange (ex. change the product from SOL) - we receive a traceback **Traceback:** ```ValueError: Expected singleton: account.move(<NewId origin=35>, <NewId origin=31>, <NewId origin=32>, <NewId origin=33>, <NewId origin=34>)``` **Issue:** - from `onchange` triggers chain,`_compute_duplicated_ref_ids` is invoked calling `_fetch_duplicate_reference` for the related moves (invoice_ids) such that as they are in create/edit mode - at this time `convert_to_write(moves[field_name], moves)` fails as moves has more than 1 record and `recordset[field]` is not valid syntax in such case https://github.com/odoo/odoo/blob/3966753eb5a8534c8b5b8a16e626f5250c9013cf/addons/account/models/account_move.py#L1868-L1884 - hence, we receive valueError, expecting a singleton **Fix;** - we adapt the method to accept multiple moves which may be in create/edit mode opw-4959528 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223513
This fixes an issue where inherited property values could be wrong or unavailable after the system cache was cleared or missed. It helps keep records consistent and prevents unexpected missing data in workflows that rely on inherited properties.
Original PR description
inherited properties should be computed from its related field after cache miss 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#224550 Forward-Port-Of: odoo/odoo#224359
Fixed an issue where printed reception reports could cut a table row between two PDF pages when the report contained many product lines. This makes inventory reception documents easier to read and helps avoid confusion during warehouse review or record keeping.
Original PR description
### Issue: - In the settings enable reception report. - Create a storable product with a product name of length 60. - Create and confirm a delivery with 20+ lines of 1 x that product. - Create and…
### Issue: - In the settings enable reception report. - Create a storable product with a product name of length 60. - Create and confirm a delivery with 20+ lines of 1 x that product. - Create and confirm a PO with 20+ lines referring to 1 x that product. - Validate the receipt > Allocation smart button > Assign all. - Click on print and open the PDF. #### > The last row of the first page is cut in half at the end of the page and the beginning of the next one. ### Cause of the issue: The class `o_report_reception` is used both in the view of the reception report `ReceptionReportMain`: https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.xml#L16 and its printed version: https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/report/report_stock_reception.xml#L43-L44 However, when the report becomes too big (many lines), the class did not allow the user to scroll down the view and a fix has been implemented adding the overflow-y style to the class see https://github.com/odoo/odoo/commit/d8a19285939fb31f6d34290cb8138d402e93024b https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/static/src/scss/report_stock_reception.scss#L3 The issue being that wkhtmltopdf relies on the size of the table to determine if a row should be displayed on a page or an other one and if you can scroll down he will apparently not do his job correctly. opw-4824221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224434
This fix prevents an error when users add a new Cards block on a website page and resize its card grid vertically. It makes the website editor more reliable for creating and adjusting card layouts.
Original PR description
Scenario: - add a "Cards" snippet (s_floating_blocks) - click on "Add New" cards - resize vertically the grid containing "Card Title" Result: traceback error is shown TypeError: Cannot read properties of undefined (reading 'substring') at iframeWindowMouseUp (snippets.options.js:4799:1) Cause: the code assume that there is always a g-col-* class and it is there on demo cards, as well as if the grid is resized horizontally, but it's not there when adding a new card. Fix: adding the class the the new card template. opw-5027818
Saudi Arabia point-of-sale receipt QR codes now show the local KSA time instead of UTC. This helps scanned e-invoice details match the printed receipt and supports ZATCA compliance expectations.
Original PR description
**Problem:** If you have an SA company, and try to scan the QR code generated on the receipt, the time will be the UTC time instead of the KSA time, as we are in SA. **Steps to reproduce:** - Change your company to SA and install l10n_sa_pos - Make a purchase with a customer from SA - Scan the QR code from the receipt using an app such as E-invoice QR reader - The invoice date will be the UTC time, or 3 hours less than it should **Why the fix:** Before this fix, the time was always displayed as UTC. It could have been correct if it also displayed a 'Z' in the end, to indicate that it is not local KSA time. We now directly change it using the KSA time, to respect the ZATCA guidelines. The time is now the same on the printed invoice and in the app when scanning the QR code. opw-4769521 Forward-Port-Of: odoo/odoo#223348 Forward-Port-Of: odoo/odoo#216640
This fix prevents errors in Discuss calls when someone leaves or crashes just as another participant joins. It makes call handling more reliable by safely ignoring late connection updates after a call has already ended.
Original PR description
Before this commit, since https://github.com/odoo/odoo/pull/202167, a race condition could occur where the call is over when the the rtc session matching a track event is obtained. This could occur if you crash or leave at the moment another user arrives. You could get a track event from the SFU, wait for the rtc session record from Odoo, leave te call, finally get the rtc session from odoo. This would lead to a traceback as this handler expected that the call was still ongoing.
Manufacturing orders created from make-to-order sales now remain in draft when the product recipe has no components or operations. This prevents empty production orders from being confirmed automatically, giving users a chance to add the needed details first.
Original PR description
Issue Before This Commit: ============================ Currently, if a BOM has `no components or operations` and is triggered via `MTSO`, the generated Manufacturing Order (MO) is automatically set to a `confirmed` state. This behaviour is inconsistent and not meaningful, as there's nothing to produce or track. Steps to Reproduce: ============================ - Install the `mrp and sale` module. - Enable MTSO route. - Create a product with a BOM that has `no components or operations`. - Create a sale order for that product. MO is created in a `confirmed` state. With This Commit: ============================ This commit ensures that MOs triggered via `MTO(Already worked) or MTSO` are created in draft state if their BOM has no components and no operations. This allows the user to manually add required details before confirming the MO. supporting custom use cases. TaskID:- 4920195 Forward-Port-Of: odoo/odoo#221844
Users composing messages in Discuss with an input method editor can now press Enter to choose suggested text without accidentally sending the message. This prevents incomplete or unintended messages from being posted, improving reliability for users typing in languages that rely on composition input.
Original PR description
Before this commit, pressing ENTER to pick a composition suggestion from IME in a discuss channel composer would send a message with the current content of composer. This is definitely not the intended behavior: it should change the composing text by the IME software but the send on ENTER press should not happen while the text is in composing. This commit fixes the issue by adding condition for composing text. Task-5043396 Forward-Port-Of: odoo/odoo#224390 Forward-Port-Of: odoo/odoo#224265
The Timesheet Leaderboard now opens correctly even when the current employee is excluded from the billing rate ranking due to a very low billing rate. This prevents an error screen and keeps managers and employees able to view leaderboard information reliably.
Original PR description
**Issue:** A traceback occurs when clicking the Timesheet Leaderboard widget. **Cause:** The template `timesheet_leaderboard_dialog.xml` assumes that `state.current_employee` is always defined. However, when the current user's employee has a billing rate ≤ 0.5%, they are filtered out from the leaderboard. As a result, `setCurrentEmployeeIndexFromLeaderboard` returns `undefined`, causing the widget to crash. https://github.com/odoo/enterprise/blob/70ed91ba1ebb94cb1919df49a4d95fad26935d03/sale_timesheet_enterprise/static/src/services/timesheet_leaderboard_service.js#L18-L31 **Steps to reproduce:** 1. Set up a company with 4+ employees having billing targets. 2. Ensure the current user's employee has a billing rate ≤ 0.5% (e.g., 0.3 hours logged / 100 hours target). 3. Switch the leaderboard to "Billing Rate" mode. 4. Click the Timesheet Leaderboard widget. opw-4875410
The Return for Exchange button now keeps the correct visibility rules in rental stock return flows. This prevents the button from appearing or disappearing incorrectly, reducing confusion for users handling exchanges.
Original PR description
Adapt the xpath to make sure the invisible condition on the 'Return for Exchange' button is not overriden. tasks 4748294 & 4778066 Forward-Port-Of: odoo/enterprise#89090
Fixes an Accounting issue where deleting a generated bank statement line could fail when the related journal entry used multiple reconciliation models. This helps users correct bank reconciliations without encountering a blocking error.
Original PR description
Currently, an error occurs when trying to remove a move line from a bank statement line if the journal entry contains lines with different reconciliation models. **Steps to Reproduce:** 1. Install…
Currently, an error occurs when trying to remove a move line from a bank statement line if the journal entry contains lines with different reconciliation models. **Steps to Reproduce:** 1. Install the Accounting module. 2. Duplicate the "Internal Transfer" reconciliation model. 3. Accounting dashboard > click on Bank > create new record. 4. Add the invoice, apply "Internal Transfer" reconciliation model. 5. Edit the balance of the line to lower, apply duplicated model(Internal Transfers (copy)). 6. Try deleting the generated Liquidity Transfer line. (Refer [this video](https://drive.google.com/file/d/1cz80Q5325x3rqYUlGahVzFIXH2iqrbRF/view?usp=drive_link) for steps to reproduce.) **Error:** ValueError - Expected singleton: account.reconcile.model(8, 6) **Cause:** In the method `delete_reconciled_line` at [1], the `reco_model_id` is fetched from `self.move_id.line_ids.reconcile_model_id`. If the move contains lines linked to multiple reconcile models, this causes a singleton error during subsequent processing. **Fix:** This commit uses the already computed `move_lines_to_remove` to retrieve `reconcile_model_id` instead of accessing it from `self.move_id.line_ids`, which may result in a multi-recordset. [1] - https://github.com/odoo/enterprise/blob/89aa58029a79928788277489414f8192aa5353e4/account_accountant/models/account_bank_statement.py#L1041-L1049 sentry-6781788260
This fix prevents an error when a subscription sales order has no previous invoice date. The system now uses today's date as a fallback, helping stock movements linked to subscriptions continue without interruption.
Original PR description
The Issue: Prior to this commit, When the sale order last_invoice_date is False, a traceback is thrown The Fix: To resolve this, We get the last_invoice_date or todays date opw-4403557 Forward-Port-Of: odoo/enterprise#75717
Fixed an issue where enabling Shiprocket delivery could prevent users from opening the Google Merchant Center data source link. The system now avoids validating incomplete temporary customer records, preventing an unnecessary error and keeping the export flow available.
Original PR description
Steps to Reproduce: 1. Go to Delivery Methods. 2. Enable and configure Shiprocket, then publish it. 3. Go to Settings. 4. Search for Google Merchant Center Data Source. 5. Enable the checkbox. 6.…
Steps to Reproduce:
1. Go to Delivery Methods.
2. Enable and configure Shiprocket, then publish it.
3. Go to Settings.
4. Search for Google Merchant Center Data Source.
5. Enable the checkbox.
6. Click on the Copy File Link button.
7. Open the copied link in a new browser tab.
Observation:
A traceback occurs, stating that some of the customer’s fields are missing.
Issue:
In the `_prepare_best_delivery_by_country` method, we create a temporary partner
record. Later, in `_check_required_value`, we validate the Street, Email, Pincode,
and Phone Number fields for that partner. However, these fields are not set
in the temporary record, which causes the validation to fail.
Solution:
Added a check on `recipient._origin` to ensure that required field validations are only
applied on actual partner records. This prevents raising validation
errors when using temporary partner records in Shiprocket flow.
Added `@mute_logger('odoo.tools.translate')` to suppress translation warnings in
test. In our test case, we are calling `_check_required_value` directly, which
internally calls `_get_lang`. The `_get_lang` method attempts to fetch the
language from `http.request`, but since `http.request` is not available in test
context, it fails to retrieve the language and logs a warning.
https://github.com/odoo/odoo/blob/642dde9546417115cbce5b826cdf996970dfbb48/odoo/tools/translate.py#L514C5-L517C1
opw-4972889Vendor bills without taxes are no longer included in GSTR2B reconciliation. This prevents bills that were likely not filed by vendors from appearing in the reconciliation process, improving the accuracy of Indian GST reporting.
Original PR description
Before this commit- We included the Vendor bills without taxes for GSTR2B reconciliation After this commit- We exclude the Vendor bills without taxes for GSTR2B Because if no tax is there on the bill it means wasn't filed by the Vendor as well task-5023013 Forward-Port-Of: odoo/enterprise#93028 Forward-Port-Of: odoo/enterprise#92866
Fixed an issue where returning a rental order paid through Point of Sale could incorrectly increase the delivered quantity. This keeps rental order quantities accurate after returns, reducing billing and inventory confusion for users.
Original PR description
**Issue:** Before this commit, the qty_delivered was wrong when using the Return button when a Picking was made in PoS **Cause:** The `_compute_qty_delivered` method in `pos_sale` adds `pos_line.qty`…
**Issue:** Before this commit, the qty_delivered was wrong when using the Return button when a Picking was made in PoS **Cause:** The `_compute_qty_delivered` method in `pos_sale` adds `pos_line.qty` to the related `sale_line` each time it runs When there is no PoS order, the method add 0 to the line, so the expected behavior work But when you have a PoS Picking, a quantity was added to `qty_delivered` each time the `rental.order.wizard` is used The issue also occured earlier when the `flush_all()` is called in `_process_order()` **Fix:** There is already a `_compute_qty_delivered` method in `pos_sale_stock_renting` that override the `qty_delivered` But it's restricted by `_are_rental_pickings_enabled()` That's not necessary because we don't use any `stock.picking` in the `_compute_qty_delivered` function, only `stock.move` so we removed that verification To make the code working, we also need to extend the _get_outgoing_incoming_moves() results Because there were also block by a `_are_rental_pickings_enabled()` condition even if there is only moves here We need all the moves to calculate `qty_delivered` properly **Steps to reproduce:** - Create a New Product "Rental PoS" that Can be Rented - Create and confirm a New Rental Order, with any customer and your product - Open a PoS Session - Click on Quotation/Order - Choose the last Order and Settle the order - Click on Yes (to confirm import to PoS) - Click on Payment, select Cash and Pay - Go in the Backend, and to your RO - Click Return and Validate - Before the fix, the Delivered should be 2.0 opw-4877019 Forward-Port-Of: odoo/enterprise#93279 Forward-Port-Of: odoo/enterprise#90510
Commission reports now use the right database access mode when preparing report data. This prevents warnings or errors when opening reports that rely on temporary data for faster calculations.
Original PR description
Since https://github.com/odoo/enterprise/pull/88646 a temporary table is created to speed up computation of commission report. As dislayng the report is creating and dropping the temporary table, it is not compatible anymore with a read only cursor. This commit ensure that a read write cursor is used to prevent warning and errors. task-4982555
Restoring an XLSX file with no folder now saves a clear default folder value instead of an undefined setting. This prevents the Documents search panel from ending up in an invalid state after files are restored from the trash.
Original PR description
Steps to reproduce: - Go to documents and upload an XLSX file - Move the XLSX file to the trash - Restore the XLSX file Current behavior before PR: - The key 'searchpanel_documents_document' was set to undefined, When the file had no folder Desired behavior after PR is merged: - Files without a folder now store 'false' as the default search panel folder_id Task: [5005319](https://www.odoo.com/odoo/2328/tasks/5005319) Forward-Port-Of: odoo/enterprise#92799
This fix places detraction information in the legally expected columns of the Peruvian TXT purchase report. It helps businesses generate SUNAT-compliant reports and avoid filing issues caused by misplaced data.
Original PR description
According to the Annex N.°8 of RS 040-2022/SUNAT (page 20 of https://www.sunat.gob.pe/legislacion/superin/2022/anexo-040-2022.pdf), detraction informations are considered as additional informations and should be displayed in columns 42 and 43. This commit moves detraction infos from columns 38, 39 to columns 42, 43. opw-4860530 Forward-Port-Of: odoo/enterprise#93044
The Luxembourg annual VAT declaration now correctly includes 0% custom tax rates in exported XML files, preventing rejected submissions. Employee average fields are also handled as decimal values, improving accuracy for the annual report.
Original PR description
**PROBLEM** 1. In Annexes D and E you can declare custom tax rate. If the custom rate is 0%, this percentage will not be exported into the xml. When submitting the xml to the ECDF, the submission…
**PROBLEM** 1. In Annexes D and E you can declare custom tax rate. If the custom rate is 0%, this percentage will not be exported into the xml. When submitting the xml to the ECDF, the submission will be rejected because the xml doesn't state how much % is the custom tax rate. 2. In Section V, code 110, 108 and 109 should be decimal since they are averages. **STEP TO REPRODUCE** 1. install the l10n_lu module and select the demo lu company. 2. In accouting app, goes to the annual tax report (Accounting/Reporting/Tax Report, select Annual VAT Declaration). 3. Goes to Appendix D or E, and fill code 128, 136, 144, and 162, and leave the custom rate(%) above each of them at 0%. 4. Export to xml (using the little cog thingy). 5. Notice the code 396, 394 149, and 153 doesn't appear in the xml. **CAUSE** 1. Field containing zero are filtered out the xml by default, which is the case of the custom rate (%) fields. 2. Average number of employee during the year is declared in the report data file to be of the integer type. **FIX** 1. Adding custom rate fields to the mandatory fields. 2. Changing type of average employee fields to float. opw-4978365 Forward-Port-Of: odoo/enterprise#91938
Duplicating a move related to a tax return no longer keeps the duplicate incorrectly attached to the original return. This prevents accidental links that could confuse return records and reporting.
Original PR description
Duplicating some return's move also kept the duplicate linked to the return. This is wrong. task-5046319
Fixed an issue in the OCR manual correction screen where deselecting highlighted boxes appeared to work but was not saved. Users will no longer see previously deselected boxes return as selected after refreshing the page.
Original PR description
During refactoring of the boxes interface of the OCR (see commit acfbaf3), this occurrence of `dataMoveId` wasn't replaced with `recordId`. It causes a small bug where the box unselection wouldn't work properly. Visually, it looked like it was working as the JS code handling the unselection of boxes worked fine, but the unselection wasn't saved to the database. Upon refresh, all the boxes that were selected at some point will still be displayed as "user selected" in the UI. task-none Forward-Port-Of: odoo/enterprise#92980
The tax return wizard now uses the company's accounting opening date to determine which returns to prepare. This ensures earlier-year returns, such as 2024, are correctly triggered instead of only processing later periods like 2025.
Original PR description
Previously, the wizard gave the impression that tax returns for both 2024 and 2025 would be generated, but only 2025 returns were processed. This fix ensures that 2024 tax returns are properly triggered when using the wizard. Solution: - use account_opening_date to get the start date of a tax return report task-5006247