Wednesday, March 4, 2026
14 changes · 18.0
Resolved issues and error corrections
This update fixes a critical error that occurred when calculating time off for employees on hour-based schedules (like contractors with 0 hours). Previously, a division by zero caused server errors. Now, the system validates these cases, preventing crashes and ensuring accurate time off calculations. This resolves issues impacting client experience and avoids potential Odoo system instability.
Original PR description
Description of the issue/feature this PR addresses: Hour-based Time Off allocations use employee working hours for calculation. Contractors may have 0 hours/week as their working schedule. This caused ZeroDivisionError during time off allocation. Clients faced server errors, assuming Odoo was at fault. 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 update corrects a bug where manually adjusted tax amounts on vendor bills were incorrectly reset to the original value when a price difference was created. The fix ensures that manually set tax values remain accurate, preventing unnecessary recalculations and maintaining correct tax accounting for price differences. This improves the reliability of vendor bill tax settings.
Original PR description
When manually changing the tax amount of a vendor bill in the html input field (input above total price), if there is a price difference account move line created, the manual tax inputted will be…
When manually changing the tax amount of a vendor bill in the html input field (input above total price), if there is a price difference account move line created, the manual tax inputted will be ignored. This is due to the price difference and associated correcting account move lines having tax_ids. As such, both lines are considered taxable when they should not be and every time we create a price difference line, all taxes are recomputed and manually set tax lines are ignored. This is not the intended behavior because tax for price difference is already accounted for in the tax lines (computed before confirmation of bill) and the price difference lines themselves are just for account balancing and should not be considered taxable. Steps to reproduce bug on empty DB: 1) Install account and purchase_stock 2) Turn on automatic accounting in settings 3) Create a product category. Set inventory valuation to automated and create and set a price difference account. 4) Create a product. Set the price, set to product category to the created one, and enable track inventory. 5) Create a vendor bill with the product and set a bill date. 6) Change the price of the product in the bill lines to anything but the original price. 7) Change the tax by clicking on the input field with the pencil icon above amount total to anything but the original tax. 8) Confirm the vendor bill and notice the manually changed tax value revert back to the original value. Behavior after bug fix: Upon completing step 8, the manually changed tax value should stay and not be recomputed. opw-4854669 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where manually set prices in Point of Sale (PoS) quotations weren't correctly applied during settlement, leading to incorrect final prices. Now, PoS settlements accurately reflect user-defined prices for products, ensuring accurate revenue calculations. This improves the reliability of PoS transactions.
Original PR description
**Steps to reproduce:** - Create a product tracked by lot, set it's price to 1000 - Create a quotation add a line with the created product and change the price to 1200 - Add another line with the same product and change it's price to 600 - Go to PoS and settle this quotation - The lines' prices will be 1000 and 600 instead of 1200 and 600 **Why the fix:** In the event of a settle with a product tracked by lots, we are setting the price of all *related_lines* (lines with the same product in this case) to it's base price, not taking into account the fact that this price has been modified by the user when making the quotation. This only happens for related lines, which explains why one line's price is still 600 while the other was reverted to the base price of 1000 instead of being 1200 as it was previously set. To avoid this, we now set the price_unit back to the base one only if the price hasn't been changed manually. opw-5223463
This update fixes a performance issue in the POS self-order module that was causing delays when loading pricelists. By optimizing the database queries, the system now loads pricelists significantly faster, especially with a large number of products. This results in a smoother and more responsive POS experience for users.
Original PR description
Currently when a pricelist is set on a POS session, N+1 queries are generated when loading the data by calling `_get_product_price()` in a loop. This commit avoids the extra queries by performing the computation on the recordset using `_get_products_price()` and looping through the result instead. This commit also generally cleans up the function by removing unnecessary intermediate variables, and removing the redundant product_obj check. Benchmark opening /pos-self/data | product.product count | Before | After | Queries Before | Queries After | | --------------------- | ------ | ----- | -------------- | ------------- | | 1,500 | 2.16s | 0.72s | 1,711 | 185 | | 15,000 | 24.91s | 6.52s | 17,175 | 397 | opw-5477715
This update fixes an issue where landed cost accounting for subcontracted receipts didn't accurately reflect the quantity of stock still in inventory. The fix ensures that the correct number of account move lines are created to properly account for stock movements, aligning with standard accounting practices for non-subcontracted products.
Original PR description
…lues landed cost sbc **Problem:** account move line created from a landed cost on a subcontracted receipt do not take into account already out quantity. **Steps to reproduce:** - create a tracked…
…lues landed cost sbc **Problem:** account move line created from a landed cost on a subcontracted receipt do not take into account already out quantity. **Steps to reproduce:** - create a tracked product with avco auto category - create a subcontracted bom for this product with no comp - create and confirm a PO for 10 unit of this product with the same partner as the subcontractor of the bom - validate the receipt - create and validate a delivery for 4 unit of your product - navigate to inventory/operations/adjustments/landed costs - create a new landed cost - select the receipt from the PO - add a landed cost of 10$ and validate - select the valuation smart button - a 6$ svl was created (which is correct because 6 out 10 products of the receipt are still in stock) - click on the book widget to open the account move view **Current behavior:** Only two account move lines were created both with a value of 10 One crediting sotck interim received On debiting stock valuation **Expected behavior:** 4 extra account move lines (all with a value of 4) should have been created to compensate the out quantity like it is the case for non subcontracted product. One debiting stock interim delivered One crediting stock valuation One debiting expenses One crediting stock interim delivered **Cause of the issue:** _is_in() will return false for the move of a subcontracted receipt https://github.com/odoo/odoo/blob/7462ec423e8b106a5175a71ac009176d16cdf225/addons/stock_landed_costs/models/stock_landed_cost.py#L185 This is wanted and happens because _should_be_valued() will return true when called on the subcontracted location https://github.com/odoo/odoo/blob/7462ec423e8b106a5175a71ac009176d16cdf225/addons/stock_account/models/stock_move.py#L129 As a consequence, qty_out stays 0 https://github.com/odoo/odoo/blob/7462ec423e8b106a5175a71ac009176d16cdf225/addons/stock_landed_costs/models/stock_landed_cost.py#L185-L186 and we do not append the values for the extra amls inside _create_account_move_line() https://github.com/odoo/odoo/blob/7462ec423e8b106a5175a71ac009176d16cdf225/addons/stock_landed_costs/models/stock_landed_cost.py#L465-L466 **fix:** if we make sure the the adjustment line is linked to the move of the MO instead of the move of the receipt, this problem does not happen because _is_in() returns true for the move of the MO. Also in this case we don't need _get_stock_valuation_layer_ids() which was introduced by this PR https://github.com/odoo/odoo/pull/166107 to solve the same issue. That is because the move used in button_validate is the move linked to the adjustment line, which will, after this fix, be the one of the MO, so we can directly take its stock valuation layers. opw-5723126
This update fixes an issue in the batch transfer report where product lines were scattered across the document, causing operators to waste time scanning. The report now sorts move lines by product, grouping similar items together for quicker identification and reduced operational inefficiencies.
Original PR description
Issue Before This Commit: ======================= In the `batch transfer report`, move lines are ordered by the `picking's batch sequence` (picking_id.batch_sequence). When operators use the document…
Issue Before This Commit: ======================= In the `batch transfer report`, move lines are ordered by the `picking's batch sequence` (picking_id.batch_sequence). When operators use the document to pick items, they have to scan through the report to find all lines for the same product. As a result, operators `lose time scanning the document` and `risk of missing lines`. Steps to Reproduce: ======================= - Install the `stock_picking_batch` module. - Create `multiple deliveries` with several `common products`. - Add these deliveries to a batch transfer and print the batch transfer report. - Observe that product lines are ordered by location and then by picking. Cause of the issue: ======================= The batch transfer report currently sorts move lines by picking in the report `(picking_id.batch_sequence)`. When the same product exists in another picking, This causes lines for the same product to be scattered across the report instead of being grouped together, causing the product to appear in multiple places in the document. After This Commit: ======================= In the report, move line sorting by picking (picking_id.batch_sequence) has been replaced with sorting by product `(product_id.id)`. Move lines are now ordered by product, so similar products are displayed together in the document. This helps operators find products more quickly, reduces scanning effort, and makes the process more reliable. TaskID-5379367
This update corrects an issue where phone numbers on Arabic receipts were displayed in reverse (right-to-left) instead of the correct left-to-right format. The fix ensures phone numbers are correctly formatted based on the selected language, improving the user experience for Arabic-speaking customers. Alternative fixes were considered but the XML fix is the most straightforward.
Original PR description
# Steps to reproduce: - Open the company, change the language to Arabic - Go to POS, open the shop - Buy anything and click on receipt # Problem: When clicking on the receipt, you would find the…
# Steps to reproduce:
- Open the company, change the language to Arabic
- Go to POS, open the shop
- Buy anything and click on receipt
# Problem:
When clicking on the receipt, you would find the phone number is written right to left, although it should be printed left to right.
# Cause:
Normally when another language is selected, this line will adapt to it, and translate the whole block "Tel: `props.data.company.phone`" to arabic (right to left)
https://github.com/odoo/odoo/blob/5fc1e34d174f7f61d692d086d0ff65fbfc72b013/addons/point_of_sale/static/src/app/screens/receipt_screen/receipt/receipt_header/receipt_header.xml#L12
# Fix:
We need to specify the direction of the phone number to be Left to right.
```
<div>Tel:<span dir="ltr"><t t-esc="props.data.company.phone" /></span></div>
```
**Result:**
<img width="167" height="86" alt="HATEF" src="https://github.com/user-attachments/assets/4fe0bdd0-fe77-430f-9136-cd7086c4d5d9" />
There is also alternative fixes:
# First alternative fix:
Replace the '+' with '00' (there is no difference when trying to copy), and make a function in js that preserve the whole thing in a string variable.
```
get phoneText() {
return _t("Tel:") + " " + this.props.data.company.phone.replace("+", "00");
}
```
**Result:**
<img width="215" height="148" alt="hatef2" src="https://github.com/user-attachments/assets/e9cb4415-baad-4d66-a04b-ecdb308e3e72" />
**Drawback:**
- The inconsistency between how the number is stored and how we view it.
# Second alternative fix:
**File:** `/home/odoo/codebase/odoo/addons/point_of_sale/static/src/app/screens/receipt_screen/receipt/receipt_header/receipt_header.js`
```diff
import { _t } from "@web/core/l10n/translation";
import { Component } from "@odoo/owl";
+ import { localization } from "@web/core/l10n/localization";
```
```diff
+ get direction() {
+ return localization.direction;
+ }
```
**File:** `/home/odoo/codebase/odoo/addons/point_of_sale/static/src/app/screens/receipt_screen/receipt/receipt_header/receipt_header.xml`
```diff
<t t-if="props.data.company.phone">
- <div>Tel:<t t-esc="props.data.company.phone" /></div>
+ <t t-if="direction == 'ltr'">
+ <div>Tel:<t t-esc="props.data.company.phone" /></div>
+ </t>
+ <t t-elif="direction == 'rtl'">
+ <div><t t-esc="props.data.company.phone" />Tel:</div>
</t>
</t>
```
**Drawback:**
- Too much code for a small issue that probably won't bother the client.
- The need to change in multiple translation files for all RTL languages in odoo.
- Readability
opw-5881503
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where miscellaneous journal entries weren't appearing in the printed follow-up reports, even when marked for inclusion. Now, all relevant information from these entries, including the entry itself, is accurately reflected in the reports sent to partners. This ensures partners receive a complete overview of overdue receivables.
Original PR description
…port Currently, even if users mark a miscellaneous entry to be included in the follow-up report, only its amount is counted in the total overdue; the entry itself is excluded from the printed report sent to the partner. Steps to reproduce: - Have a journal item with partner, receivable account and due date in the past - Open followup report for the partner, uncheck 'No followup' for the aml - Go back to the partner, in the followup section, hit 'Send' and send the manual followup (or wait/trigger the scheduled action) Issue: Printed followup report is missing any info on the misc entry opw-5405657
This update resolves an issue where self-order prices weren't accurately calculated when taxes and fiscal position mappings were involved. The fix ensures prices are correctly recomputed using accounting methods, leading to more accurate order totals and improved financial reporting. This impacts self-service ordering functionality.
Original PR description
Before this commit, the price of order lines from self was recomputed in the backend but for orders with price included taxes and a fiscal position mapping, the recomputation was not correct. This commit fixes the issue by recomputing the prices using compute_all method from accounting on taxes after fiscal position. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where vendor bills with foreign VAT companies were not correctly identifying the country of origin for VAT reporting. The fix ensures accurate JPK country code reporting for both invoices going out and vendor bills coming in, aligning with Polish tax regulations. This improves the accuracy of financial reporting.
Original PR description
PR #81359 fixed the country code for foreign VAT companies by adding the country code to the start. However, this was only fixed for invoices going out, not vendor bills coming in. [opw-5917264](https://www.odoo.com/odoo/project.task/5917264) Forward-Port-Of: odoo/enterprise#109080
This update resolves an issue where validating intercompany receipts could trigger an access error. The fix prevents the system from attempting to access location data from a different company during the validation process, ensuring smooth intercompany transactions. This improves reliability for users managing multi-company stock operations.
Original PR description
**Issue**: Validating a receipt with intercompany move, can lead to access right issue **Steps to reproduce**: - Create two different companies A and B - Create an inter company route with two 'pull…
**Issue**: Validating a receipt with intercompany move, can lead to access right issue **Steps to reproduce**: - Create two different companies A and B - Create an inter company route with two 'pull from' action defined: - One from Virtual Locations/Inter-company transit to A/Stock with operation type A: Receipts - One from B/stock to Virtual Locations/Inter-company transit with operation type B: Delivery Orders - Create a product P accessible from both company - Create a MO (while both company activated with company A selected) for a product that consumes 1 unit P as component and confirm it - Go to the receipt while only company B activated - Select a quantity of 1 and validate it -> A traceback is displayed **Cause**: While confirming the receipt (calling `button_validate`): https://github.com/odoo/odoo/blob/e9a8b81d4a972a57a8f46377864874190b04af2c/addons/stock/models/stock_picking.py#L1403 this will eventually runs: https://github.com/odoo/odoo/blob/e9a8b81d4a972a57a8f46377864874190b04af2c/addons/stock/models/stock_move.py#L2091 https://github.com/odoo/odoo/blob/e9a8b81d4a972a57a8f46377864874190b04af2c/addons/stock/models/stock_move.py#L2036-L2039 Since self.move_dest_ids belongs to another company, accessing the associated location_id triggers an AccessError. opw-5177369
This update corrects inaccuracies in the XML files used for processing Swedish payments (SEPA). Specifically, it ensures the correct BIC number is used, removes a misleading placeholder value, and allows users to select the appropriate payment version even without using the SEPA payment method. This improves the accuracy and reliability of Swedish payment processing within Odoo.
Original PR description
We currently have customizations for the iso20022 xml file for payments in Sweden. But those customizations aren't correct. This commit fix multiples issues: 1) In DbtrAgt, we sometimes have bankgiro information. But this node should always contain the BIC number for Swedish payments. 2) The _get_cleaned_bic_code method was replacing the real bic code with a fake value like 'SE:Bankgiro', but this seems to be wrong. None of the SE banks ask for this BIC, so we remove it. 3) The sepa_pain_version field is supposed to tell Odoo which pain version to use. But the problem is this field is computed, and only editable once the user set the SEPA payment method, but for iso_se, we want to let the user choose as well, even if he didn't add SEPA as payment method. This commit change the invisible on the field, so it can be edited as soon as iso_se is in the journal payment methods. task-5427570
This change reverts a previous update that incorrectly applied taxes to down payments in point-of-sale and sales orders. This ensures accurate tax calculations are applied during down payment transactions, aligning with current accounting standards. The change corrects a previous issue impacting sales order and point-of-sale tax calculations.
Original PR description
This reverts commit 6831d64b80ebc542ed814d322e8e7ec2ca3b044e. opw-5853070
This update ensures that timesheet adjustments for sale order lines accurately reflect the correct cost, regardless of the invoice policy used (ordered_prepaid, delivered_manual, or delivered_milestones). Previously, this calculation was inconsistent, leading to inaccurate sales reporting. This fix resolves a bug that has been identified and tracked in previous PRs.
Original PR description
Originally, timesheet updates for tasks associated with sale order lines would cause the cost (purchase_price) to be recomputed. However, this was prevented if the invoice policy was 'ordered_prepaid.' This should also apply to 'delivered_manual' and 'delivered_milestones.' Otherwise, any timesheet updates will recompute the sales.order.line purchase_price field. Steps to reproduce: Create a service product that creates a project/tasks Create a sales order with the product and manually set the cost Assign the timesheets of the task to an employee Have the employee update their timesheet for the task The cost on the sales order line gets recomputed to the default product price Duplicate of pr-250495 task-5902688 related-pr-205415 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251521