Daily updates from Odoo
Wednesday, April 15, 2026
50 changes · saas-19.2
New functionality added to Odoo
This update introduces basic financial reports tailored for Uzbekistan businesses within Odoo. It includes essential reports like the Balance Sheet and Profit & Loss Report, allowing users to generate key financial data specific to Uzbekistan's accounting standards. This expands Odoo's capabilities to meet the needs of businesses operating in that region.
Original PR description
This commit introduces basic report package for Uzbekistan and includes Balance Sheet and Profit & Loss Report. task-3927927 Community PR - https://github.com/odoo/odoo/pull/241811 Forward-Port-Of: odoo/enterprise#113652 Forward-Port-Of: odoo/enterprise#103136
This update adds a basic accounting package specifically tailored for businesses in Uzbekistan. It includes essential features like charts of accounts, tax management, and demo data, along with Uzbek language support and Uzbekistan state information. This expands Odoo's capabilities to meet the unique accounting needs of companies operating in Uzbekistan.
Original PR description
This **PR** introduces basic accounting package including Demo Data, Chart of Accounts, Account Groups, Taxes and Tax Groups for Uzbekistan. Additionally, it also introduces Uzbek language and Uzbekistan states to support `l10n_uz`. task-3927927 Enterprise PR - https://github.com/odoo/enterprise/pull/103136 Forward-Port-Of: odoo/odoo#258855 Forward-Port-Of: odoo/odoo#241811
This update adds a Polish Outliner (POT) file for the l10n_uz module, which supports Uzbek language localization for Odoo. This expansion allows Odoo to be used by businesses operating in Uzbekistan, improving its global reach and compliance with local regulations. It's a foundational step towards offering a fully localized experience for Uzbek-speaking users.
Original PR description
Related: https://github.com/odoo/enterprise/pull/113933 Forward-Port-Of: odoo/odoo#259342
Enhancements to existing features
This update automatically populates the TimesheetSystray with the project and task the user was working on when they opened it, making it easier to start logging time. Before this change, users had to manually select these values. The update also ensures that the selected project and task are actually valid for timesheet tracking.
Original PR description
To ease UX, we default the project and/or task field of the TimesheetSystray to the one that the user has opened (if the values were not already set manually by the user). OPW-6122906
This update ensures Odoo's Singapore tax calculations align with the latest GST rates and InvoiceNow requirements. Key changes include updated tax rates, fiscal positions, and report formulas to accurately reflect Singapore's tax regulations.
Original PR description
Improves tax data and report to comply with the changes in Singapore GST rates. The improvement is also in compliance to GST InvoiceNow requirements. Key changes: - Taxes: drop outdated GST rates; add 0% NA and 0% TXNA; add fiscal positions; misc. updates - Tax Groups: drop some of tax groups - Fiscal Position: new data - Tax Report: modification to box 1's and box 14's formulas; drop unnecessary aggregate formulas (total amount) for the line sections [Task-6025634](https://www.odoo.com/odoo/my-tasks/6025634) Forward-Port-Of: odoo/odoo#258277
Resolved issues and error corrections
A recent update caused a type error during sign request processing, preventing users from accessing the sign functionality. This fix reorders the checks to ensure the existence of the sign item is verified before type comparisons, resolving the error and restoring normal operation.
Original PR description
This issue occurs because, in the recent [commit], `sign_request` was changed to `sign_item`, but the `sign_item.exists()` check is performed after the type comparison, resulting in a `TypeError`.…
This issue occurs because, in the recent [commit], `sign_request` was changed to `sign_item`, but the `sign_item.exists()` check is performed after the type comparison, resulting in a `TypeError`.
Traceback:
```py
File "/home/odoo/src/odoo/saas-19.2/odoo/addons/base/models/ir_http.py", line 415, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/saas-19.2/odoo/http/routing_map.py", line 207, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/enterprise/saas-19.2/sign/controllers/main.py", line 708, in get_sign_request_items
if not sign_request.exists() or not consteq(sign_item.access_token, token) or not sign_item.exists() or not sign_item.signer_email:
TypeError: unsupported operand types(s) or combination of types: 'bool' and 'str'
```
Solution:
We first perform the existence check and then compare the types.
[commit]: https://github.com/odoo/enterprise/pull/111786/changes/f40082f4e6f50dccbfa639edbef08428868cb31d
sentry-7376866293
Forward-Port-Of: odoo/enterprise#112659This update corrects a minor issue in the Batch Payment report. Previously, the report would incorrectly display placeholder values ('ABC Holder Name' and 'Demo Ref') when the Account Holder Name field was left blank. This fix ensures the report accurately reflects the payment details, providing a cleaner and more professional output for users.
Original PR description
**Steps to reproduce:**
- Install the `account_batch_payment` module.
- Navigate to Invoicing > Customers > Payments.
- Create a new payment with `Payment Type: Send` and
select a customer without setting an `Account Holder Name`.
- Create a batch payment including this payment.
- From the gear icon, click `Print Batch Payment`.
**Observation:**
In the generated report:
- `Account Holder Name` shows `ABC Holder Name`.
- `Memo` shows `Demo Ref`.
**Root Cause:**
At [1], the default demo values ("ABC Holder Name", "Demo Ref") are rendered
when the fields are empty, instead of being left blank.
**Fix:**
This commit ensures that the `Account Holder Name` and `Memo` are `blank`
in the printed Batch Payment report when their values are not set.
[1]:
https://github.com/odoo/enterprise/blob/327d4478128f33fb2e0c477533bd4983178abf17/account_batch_payment/report/account_batch_payment_report_templates.xml#L36-L38
opw-6092595
Forward-Port-Of: odoo/enterprise#113515This update resolves a test failure related to inter-company stock transfers. The test required demo data to function correctly, which is no longer needed. By removing the dependency on demo data, the test now passes consistently in a standard Odoo environment.
Original PR description
*: sale_purchase_stock_inter_company_rules ### Steps to reproduce: - Create a DB without demo data - Install stock_dropshipping, sale_purchase_stock_inter_company_rules - Run the test `test_08_dropship_inter_company_vendor_to_customer` ### Issue: The test `test_08_dropship_inter_company_vendor_to_customer` fails here: https://github.com/odoo/enterprise/blob/fd3c9d894d8821ed1d1a110cdffb5e16fb54590a/sale_purchase_stock_inter_company_rules/tests/test_inter_company_po_to_so.py#L497-L501 since the `lot_ids` are only visible for users with the `stock.group_production_lot` group: https://github.com/odoo/odoo/blob/544961c1c6db254c4292d88096bdf9363e35f0bc/addons/stock/views/stock_picking_views.xml#L310-L318 And this group is only implied with demo data: https://github.com/odoo/odoo/blob/544961c1c6db254c4292d88096bdf9363e35f0bc/addons/stock/data/stock_demo.xml#L190-L193 opw-6085811 Forward-Port-Of: odoo/enterprise#113120
This update fixes an issue where the payroll warning date incorrectly jumped to the next month when the system date was set before the closing day. The fix ensures the warning remains in the current month until the closing day has passed, improving payroll accuracy and reducing potential user confusion.
Original PR description
steps to reproduce: - install `hr_payroll` - set closing day as "5th of next month" (via schedule warning) - set system date as <5 of the month - notice that the warning date jumped to next month description: - it should stay in the current month until closing day has passed cause: - there was no check for if the closing day has passed while in the next month scenario fix: - jump to next month only if today has passed closing date. (also fixed a wrong docstring) [task#6084911](https://www.odoo.com/odoo/project/1251/tasks/6084911)
This update fixes a calculation issue related to canteen costs in the payroll module for Belgium (l10n_be_hr_payroll). Previously, the system didn't accurately calculate canteen costs when there were no recorded workdays. This change ensures that canteen costs are now correctly simulated within the payroll configuration.
Original PR description
We add simulation context in the canteen cost condition, since we dont have worked day lines in that case
This update fixes a calculation error in the employment bonus payments for Belgian businesses. The change ensures that bonus calculations now precisely align with the requirements outlined by the Belgian Social Security authorities, as detailed in their official documentation. This correction improves accuracy and compliance for payroll processing.
Original PR description
The employment bonus computation was missing two roundings steps that are explicitely asked for in the following documentation: https://www.socialsecurity.be/employer/instructions/dmfa/fr/latest/instructions/deductions/workers_reductions/workbonus.html Forward-Port-Of: odoo/enterprise#113776
This update fixes an issue where global invoices generated from customer invoices weren't correctly using the issued address's zip code in the XML file. The fix ensures that the 'LugarExpedicion' field accurately reflects the shipping address, improving compliance with Mexican tax regulations. This impacts invoicing accuracy for Mexican customers.
Original PR description
**STEP TO REPRODUCE** 1. install l10n_mx_edi_extended. 2. Add an issued address on the customer invoice journal, with a zip code. 3. Create invoices, and create a global invoice with them. 4. download the xml, and notice the field LugarExpedicion is not using the zip from the issued address while it should. opw-5956837 Forward-Port-Of: odoo/enterprise#112523 Forward-Port-Of: odoo/enterprise#108732
This update corrects inaccurate titles and links within the Phone dashboard. The changes ensure that users are presented with the correct information and navigation, improving the overall user experience. This fix was implemented as part of a larger effort to maintain dashboard accuracy.
Original PR description
This commit fixes two titles (and links) in the Phone dashboard. Task: 6120857
This update streamlines the loading of data for self-ordering point-of-sale systems. By limiting the fields loaded, the system now performs more efficiently, reducing loading times and improving the overall user experience. This optimization enhances the speed and responsiveness of self-ordering transactions.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. X-original-commit: ce78609b368e541a70c17141ee5b51543c73c1d0 Forward-Port-Of: odoo/enterprise#113661
This update resolves a technical issue that could cause errors when generating sale commission reports. The fix prevents a specific error related to date formatting, ensuring the reports run smoothly and accurately. This improves the reliability of our sales reporting functionality.
Original PR description
Before this commit, the following traceback could occurs when filtering the current period in achievements.
File "/home/arj/PycharmProjects/worktree/saas-19.1/enterprise/sale_commission/report/achievement_report.py", line 79, in _search
date_to_list = date_to_domain and [datetime.strptime(d[2], '%Y-%m-%d') for d in date_to_domain if len(d) == 3 and d[2]]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 554, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 333, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data 'today' does not match format '%Y-%m-%d'
Forward-Port-Of: odoo/enterprise#112981This update simplifies the user interface by renaming the 'Audit Report' to 'Annual Report'. This change eliminates potential confusion for users regarding reporting terminology, improving clarity and ease of use. This is a routine improvement to enhance the user experience.
Original PR description
The user interface currently uses both the terms "Audit Report" and "Annual Report", which can be confusing for users. To eliminate this confusion, "Audit Report" will be renamed to "Annual Report". backport of https://github.com/odoo/enterprise/commit/c2fc5a1643f2e005007437f7ae655d2329ac49ad [feeback-6088379](https://www.odoo.com/odoo/project.task/6088379) Forward-Port-Of: odoo/enterprise#113191 Forward-Port-Of: odoo/enterprise#112989
This update fixes an issue where kit products were incorrectly included in stock valuation calculations, leading to inflated inventory values. The change ensures that only the individual components of a kit are accounted for, providing accurate inventory reporting. This resolves a discrepancy between the reported inventory value and the actual cost of the kit.
Original PR description
Currently, when a user creates a kit, the price of the kit itself is included in stock valuation. ## Steps to produce: * Install `mrp_account` without demo data. * Create a product with inventory…
Currently, when a user creates a kit, the price of the kit itself is included in stock valuation. ## Steps to produce: * Install `mrp_account` without demo data. * Create a product with inventory tracking enabled. * Create a BoM of type kit for that product. * Add component products with a defined cost and on-hand quantity greater than 0 to the BoM. * Recompute the kit product’s cost from its BoM on the product page. * Go to Inventory > Reporting > Stock. ## Observed Behavior: The cost of the kit is currently being included in the stock valuation. For example, consider a kit product called **“Computer”** that is composed of the following components: | Product | Quantity | Cost | |--------|--------|--------| | CPU | 1 | $300 | | Motherboard | 1 | $300 | The total cost of the Computer kit is therefore $600. Since the Computer is made up of the CPU and Motherboard, the total inventory value should be $600. However, the system is currently calculating the total inventory value as $1,200 , which is incorrect because it is counting both the kit and its components. ## Root cause: This behavior started after the refactor in [1], where the `_compute_value_svl` function was replaced by the `compute_value` function to calculate both average and total value for inventory valuation. With this change, the new compute function in [2] now also includes kit products when calculating inventory valuation based on their costing method. In earlier versions, this did not occur because `_compute_value_svl` depended on valuation layer groups. Kit products were excluded at [3] through the `_get_valuation_layer_groups()` call, as illustrated in image [4]. [2]- https://github.com/odoo/odoo/blob/1b9937a702fbeb47cd6d42d8119cead5828fd3fe/addons/stock_account/models/product.py#L139-L169 [3]- https://github.com/odoo/odoo/blob/a9d2e54201173d1d2d5ab97de0904d63a4b6b82b/addons/stock_account/models/product.py#L284 ## Solution: To ensure correct total inventory valuation, kit products should be excluded from valuation and only their individual components should be calculated. This can be achieved by modifying the domains used in 'action_product_stock_view` and `_get_accounts_by_product` to exclude the kits so that the kit products get filtered out, allowing the report to consider only its components. **Before:** <img width="1857" height="938" alt="image" src="https://github.com/user-attachments/assets/bbd4eb94-ba1a-429a-a61c-afbe33729ac0" /> **After:** <img width="1915" height="883" alt="image" src="https://github.com/user-attachments/assets/c93d55c8-8197-4e57-9f87-b2159fe67d87" /> [1]: https://github.com/odoo/odoo/pull/222169/commits/6e694b79b8892d693117f6c79df1a2d3a4759f4f [4]: https://drive.google.com/file/d/1g4BzGscCW2K0rf5iDKrq-psYRlKhYkDP/view?usp=sharing opw-5462515 Forward-Port-Of: odoo/odoo#244030
This update resolves an issue preventing Point of Sale (PoS) users from accessing the sinvoice symbol. By adding the necessary access rights, this change ensures PoS users can utilize this important feature, improving operational efficiency. The fix was part of a larger update related to Odoo version 19.2.
Original PR description
Add access right for sinvoice symbol so that PoS user can access to it. Forward-Port-Of: odoo/odoo#259045
This update fixes a potential issue where website tours could incorrectly proceed due to a faulty check for an empty chat window. The change implements a more reliable method to confirm the chat window is truly empty before allowing the tour to continue, ensuring a smoother user experience.
Original PR description
The previous negative assertion could pass prematurely during fast tour execution. Switching to a specific text based assertion ensures the step only proceeds once the empty conversation is explicitly confirmed. Forward-Port-Of: odoo/odoo#258921
This update fixes an issue where icons were removed when creating links from selections within the HTML editor. The change ensures icons are treated like images during link creation, maintaining their appearance in the final output. This improves the user experience and consistency of links.
Original PR description
Problem: When a selection contains both text and an icon, creating a link removes the icon from the content. Cause: Icons should be treated the same way as images during link creation. If an icon is present in the selection but not handled like an image, it gets removed when the link is applied. Solution: Handle icons in the same way as images when processing selections for link creation, ensuring they are preserved. Steps to reproduce: - Add text "abc" followed by an icon. - Select both the text and the icon. - Create a link. - Observe that the icon is removed and only the text remains. opw-6066195 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256631 Forward-Port-Of: odoo/odoo#256002
This update fixes a visual issue on the self-order combo screen where product images were distorted. We've adjusted the image styling to ensure all images, regardless of their aspect ratio, display correctly and consistently. This improves the user experience and presentation of products on this screen.
Original PR description
Before this commit, the product image shown in the header of the combo screen in the self order interface was squished to fit the container, resulting in distortion for non-square images. After this commit, we add the `object-fit: cover` style to match the how the images are displayed elsewhere in self order. Before the change: <img width="595" height="536" alt="image" src="https://github.com/user-attachments/assets/fb90167c-8c28-46c9-9ab5-3ac472299c67" /> After the change: <img width="597" height="538" alt="image" src="https://github.com/user-attachments/assets/44d5c5a6-037b-46e2-8a28-5ef9df4d5e58" /> Product screen for reference (no change): <img width="561" height="143" alt="image" src="https://github.com/user-attachments/assets/4ee20d8c-9cde-4cc8-bcf1-8179f878a517" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257489
This update resolves a validation error that occurred when the partner autocomplete feature attempted to use incorrectly formatted VAT numbers. The fix automatically ignores invalid VAT values returned during autocomplete, ensuring data integrity and a smoother user experience. This change requires the `base_vat` module to be installed.
Original PR description
### Issue: When autocompleting some partners, the returned VAT could be in an invalid format, leading to a validation error You need `base_vat` installed to get the issue ### Cause: The partner autocomplete feature relies on IAP credits for full data retrieval When no credits are available, only the VAT is returned if it was already fetched before In some cases, this VAT value is incorrectly formatted, which triggers a validation error when applied to the partner ### Fix: Invalid VAT values returned by the autocomplete are now ignored to prevent errors Since the correct VAT cannot be retrieved without IAP credits, the value is simply removed ### Steps to reproduce: - Install `l10n_cy` (we need a localization to enable base_vat) - Create a new partner from an invoice - Enter TONYO 360 and select the autocomplete suggestion Before the fix: The VAT field is filled with an invalid value, causing a validation error opw-6030164 Forward-Port-Of: odoo/odoo#255476
This update resolves a bug in Odoo's accounting module that caused users to receive validation errors when attempting to reconcile payments across different companies. The fix ensures the 'Outstanding Credits/Debits' widget only displays relevant payments for the current invoice's company, improving usability and preventing errors.
Original PR description
The invoice outstanding credits/debits widget currently displays all reconcilable items for a partner across the same account, regardless of the company they belong to. In multi-company environments,…
The invoice outstanding credits/debits widget currently displays all reconcilable items for a partner across the same account, regardless of the company they belong to. In multi-company environments, specifically when accounts have been merged, this allows users to see and try to reconcile payments from Company A into an invoice from Company B. This action eventually triggers a validation error stating that entries must belong to the same company. This commit adds a company filter to the widget's logic to ensure only relevant outstanding payments are suggested, preventing cross-company reconciliation errors and improving UX. **Description of the issue/feature this PR addresses:** This PR fixes a validation error in multi-company environments where the invoice_outstanding_credits_debits_widget suggests payments or credit notes belonging to a different company than the current invoice. The issue typically arises when a partner has outstanding transactions in multiple companies and the accounts (e.g., Account Receivable) have been merged, allowing the widget to query lines that are not valid for the current record's company context. **Current behavior before PR:** When viewing an invoice for Company A, the "Outstanding Credits/Debits" widget displays all reconcilable account.move.line records for that partner that match the account type, regardless of their company_id. If a user clicks "Add" on a payment that belongs to Company B, Odoo attempts to reconcile them, resulting in a traceback or a validation error: "Invalid Operation: All tracebacks/entries must belong to the same company." This creates confusion for the end-user, as they are presented with "ghost" credits that cannot actually be applied. **Desired behavior after PR is merged:** The invoice_outstanding_credits_debits_widget (and the underlying logic in account.move) will strictly filter the suggested outstanding items by self.company_id. Users will only see and be able to reconcile payments, credit notes, or debits that belong to the same company as the invoice they are currently processing. This ensures data integrity and a seamless UX in multi-company setups. **Steps to reproduce:** 1) Enable Multi-Company: Ensure you have at least two companies (e.g., Company A and Company B) active in your database. 2) Chart of Accounts Setup: In both companies, use the same account for Receivables (or merge them so they share the same ID/Code if testing a migrated environment). 3) Ensure the account is marked as Allow Reconciliation. 4) Create a Payment in Company B: 5) Post the payment so it remains as an "Outstanding Receipt". 6) Create an Invoice in Company A 7) Confirm/Post the invoice. 8) Check the Widget: Scroll down to the bottom of the Invoice form in Company A. 9) Observe the "Outstanding Credits" widget. The Error: The payment from Company B will appear as an available credit for the invoice in Company A. 10) Click on "Add". A validation error (UserError) will pop up: "All entries must belong to the same company." **video** https://drive.google.com/file/d/1PfBxupP8t-t21wsP2FIgNXFnTP0Zq140/view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255875
This update resolves an issue where uploading an empty PDF file caused a system crash. The fix adds a validation check to ensure uploaded file content is valid, preventing TypeErrors and ensuring stable operation when users attempt to upload invalid files.
Original PR description
Issue: - Uploading an empty PDF triggered a stack trace. - The uploaded file content sometimes returned False instead of bytes. - Passing this value to io.BytesIO() raised a TypeError. Fix: - Added a check to ensure the content is valid. Impact: - Prevents crashes when users upload empty or invalid PDF files. TaskID-6004471 Forward-Port-Of: odoo/odoo#252208
This update resolves an issue where the Sales/Purchase Tax Report was displaying incorrect, doubled amounts for import VAT taxes. The fix eliminates redundant tax tag definitions, ensuring accurate reporting of untaxed and VAT amounts for imported goods. This improves the reliability of financial reporting.
Original PR description
The Sales/Purchase Tax Report showed doubled untaxed amounts and VAT amounts for bills using import VAT group taxes (e.g. "Imported VAT 10%").
The root cause: the Form 01/GTGT report (line C.I.1 "Purchased Goods and Services") defined its own tax_tags expressions for import VAT tags (e.g. tax_purchase_import_10_base), while the child line C.I.a ("Including: imported Goods and Services") referenced the exact same tags. This created two rows per import VAT tag in account_report_expression.
Fix: remove the redundant tag expressions from line C.I.1 and replace them with aggregation references to C.I.a (23a24a.amount_untaxed and 23a24a.balance). Each import VAT tag now has exactly one expression, so the JOIN produces one row per line, so no more doubling.
task-6083697This update fixes a problem where self-order kiosks using payment terminals would display errors despite successful payments. The fix allows payment data in kiosk mode, validates the order type to prevent fraud, and updates a Viva.com integration for improved functionality. This ensures seamless transactions for kiosk-based self-order payments.
Original PR description
Since odoo/odoo#249455 the order payload from the self order frontend is being checked to ensure the data is valid. However, these checks did not account for the situation where payment data is…
Since odoo/odoo#249455 the order payload from the self order frontend is being checked to ensure the data is valid. However, these checks did not account for the situation where payment data is included, as is the case when using a self order kiosk with a payment terminal connected. The result was that using the kiosk with a payment terminal would result in an error even though the payment was successful on the terminal. Steps to reproduce: - Configure a self order kiosk POS - Connect a payment terminal (Adyen, Stripe, Viva etc.) - Try to pay for an order from the kiosk EXPECTED: - The order is made successfully. ACTUAL: - A generic error message is shown and the order fails. The payment goes through successfully on the payment terminal. The fix is to allow a payment to be included in the self order data, but only in Kiosk mode and only if the payment amount is valid. We also now validate that the self ordering type is correct, this ensures that a kiosk payment cannot be spoofed for a mobile self order POS. Finally, there is also a small change for Viva.com to use the PoS config name instead of UUID, since UUID is no longer loaded in self order. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256042
This update fixes a problem where multiple email aliases could lead to duplicate records being created when emails were processed concurrently. The change uses a locking mechanism to ensure that only one record is created for each email, regardless of how many aliases receive it. This improves data accuracy and reliability.
Original PR description
Concurrent processing of emails with the same `Message-Id` can create duplicate records. ### Steps to reproduce 1. Configure multiple mail aliases (e.g., two helpdesk teams). 2. Send one email with…
Concurrent processing of emails with the same `Message-Id` can create duplicate records. ### Steps to reproduce 1. Configure multiple mail aliases (e.g., two helpdesk teams). 2. Send one email with both aliases as recipient. The Mail Transfer Agent may invoke `odoo-mailgate.py` once per recipient, resulting in concurrent processing of the same email in separate transactions. We expect one record per alias/team, but duplicates may be created. ### Cause This is a race condition in the `Message-Id` deduplication logic, caused by concurrent transactions and PostgreSQL snapshot isolation. Odoo uses the `REPEATABLE READ` isolation level. This means that each transaction takes a snapshot of the database at its first query and cannot see changes committed by other concurrent transactions. When two concurrent transactions process the same email: 1. Both enter `message_process` and take their snapshot. 2. Both search for the `Message-Id`. Because their snapshots don't include each other's work, both find nothing. 3. Both create records. Even if one transaction commits before the other performs the check, the second transaction still uses its original stale snapshot and create duplicates. ### Fix After the initial duplicate check, attempt to acquire a transactional advisory lock on a hash of the `Message-Id` using `pg_try_advisory_xact_lock`. If another transaction is already processing the same email and holds the lock, the call returns false and the email is treated as a duplicate. If the lock is acquired, processing continues as normal. opw-5116492 Forward-Port-Of: odoo/odoo#258847 Forward-Port-Of: odoo/odoo#250027
This update ensures that attachments uploaded to cloud storage retain their original file type. Previously, the system was incorrectly guessing file types, which could lead to issues with how files were handled. This fix improves the reliability of cloud storage uploads and prevents potential data inconsistencies.
Original PR description
When uploading an attachment to cloud storage via `_post_add_create(cloud_storage=True)`, the attachment's original `mimetype` is guessed even if we specify it. With this commit we explicitly preserve given mimetype Discovered during task-5153790 Forward-Port-Of: odoo/odoo#258251 Forward-Port-Of: odoo/odoo#257979
This update fixes an issue where the color picker preview didn't accurately reflect gradient backgrounds applied to the header theme. The fix ensures the preview correctly displays gradient styles by utilizing CSS variables, addressing a discrepancy between the targeted editing element and the actual applied styles.
Original PR description
### Issue: Color picker preview not showing correctly when a theme with a gradient background is applied to the header. ### Steps to reproduce: 1. Go to the Theme tab and open the color presets…
### Issue: Color picker preview not showing correctly when a theme with a gradient background is applied to the header. ### Steps to reproduce: 1. Go to the Theme tab and open the color presets dropdown. 2. Select any preset and set its background to a gradient. 3. Apply this theme to the header. ### Reason: - The color picker preview relies on `getComputedStyle` of the current editing element to determine what background to show. - For the header, the targeted editing element is `#wrapwrap > header`, but the actual gradient styles are applied to its inner `<nav>` elements (e.g., via `customizeWebsiteColorAction`). - Since the `background-image` property is never applied directly to the header element itself, computing its style does not capture the gradient defined on its inner elements, resulting in an incorrect or missing preview. ### Fix: - Avoid depending strictly on the computed style of the main editing element for generating the preview. - Ensure the preview accurately reflects the applied styles by utilizing CSS variables, even when certain builder actions apply those styles to inner elements rather than the primary targeted element, as demonstrated in the header example with `customizeWebsiteColorAction`. task-[6075788](https://www.odoo.com/odoo/project/974/tasks/6075788) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256566
This update fixes an issue where increasing the quantity of a purchase order after cancellation would create a new order instead of updating the existing one. The change ensures that when a purchase order is cancelled and the associated sales order demand is increased, the system correctly updates the existing purchase order to reflect the new quantity needed. This prevents duplicate purchase orders and streamlines inventory management.
Original PR description
### Steps to reproduce: - In the settings enable: Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Routes - Unarchive MTO - Create a storable product with a vendor using the…
### Steps to reproduce: - In the settings enable: Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Routes - Unarchive MTO - Create a storable product with a vendor using the MTO route - Create and confirm an SO for 1 unit of that product - Cancel and reset to draft the associated draft PO - Update the SO demand from 1 to 2 units #### > A new draft PO is created rather than updating the existing one. ### Cause of the issue: Both the confirmation and the demand updates of the SO call the `_action_launch_stock_rule` to generate the related PO. The procurement and PO generated in both cases including the `stock_reference_ids` of the SO: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/sale_stock/models/sale_order_line.py#L277-L289 However, cancelling the PO will remove its assocaited stock reference: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/purchase_stock/models/purchase_order.py#L201-L202 As such, when the second procurement is run, the `_run_buy` will not consider the existing PO without reference as a valid candidate to update: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/purchase_stock/models/stock_rule.py#L370-L372 An it will therefore create a new one: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/purchase_stock/models/stock_rule.py#L101-L115 opw-5940590 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258696
This update ensures that negative discount values are consistently displayed in both the Sale Order preview (portal view) and the generated PDF reports. Previously, the PDF displayed negative discounts while the portal preview did not, due to a discrepancy in how discounts were filtered. This change aligns the reporting output with the user interface for a more accurate representation of sales data.
Original PR description
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view…
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view details button. Issue: --- - Negative discount values are not shown in the preview (portal view), but they are displayed in the generated PDF. Root cause: --- - At [1], the portal template includes a condition to display discounts only when they are greater than 0, while the report templates lack this check, leading to inconsistent behavior. Solution: --- - Applied the same condition in the report templates to align the PDF output with the portal preview behavior. Before: --- <img width="787" height="136" alt="image" src="https://github.com/user-attachments/assets/d32311be-4aec-4d6f-b905-d5e52f712ba4" /> After: --- <img width="775" height="139" alt="image" src="https://github.com/user-attachments/assets/2614a8ad-dca6-49ca-b720-5c234aa91cf6" /> [1]https://github.com/odoo/odoo/blob/0f463fd247d2f5da79d6ec2b6bec18774f6f600b/addons/sale/views/sale_portal_templates.xml#L539 Enterprise PR: https://github.com/odoo/enterprise/pull/111916 opw-6061568 Forward-Port-Of: odoo/odoo#258981 Forward-Port-Of: odoo/odoo#255735
This update corrects how image sizes are displayed in the website builder, specifically addressing issues with CORS-protected images. It now accurately reflects the actual image size and prevents incorrect size displays when images are blocked due to CORS restrictions. This ensures consistent image handling across the platform.
Original PR description
[FIX] html_builder, *: hide the size of CORS-protected images *: html_editor Steps to reproduce: - Add an image on the website. - Replace it with a CORS-protected image. -> The image options display…
[FIX] html_builder, *: hide the size of CORS-protected images *: html_editor Steps to reproduce: - Add an image on the website. - Replace it with a CORS-protected image. -> The image options display a size, but it is incorrect. The problem is that it is not the real size of the image but the size of a default image (due to it, if you replace the image by another CORS protected one, you'll see that the size of the image remains the same). Indeed, the size of an image (in bytes) is computed from the length of the raw b64 content of the image, on which a ratio of 3/4 is applied. Because the image is CORS protected, we can not retrieve the raw b64 of the image so the image size should not be displayed. This commit hides the size of CORS protected image as it is impossible to retrieve. Note: example of a CORS protected image: https://tinyjpg.com/images/social/website.jpg task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: correctly determine image mimetype *: html_editor The goal of this commit is to improve the way the mimetype of an image is determined if the information is not in the DOM. Before this commit, the system relied on the extension of the image source to determine its mimetype. This is not really robust and it is easily trickable. For example, in `html_editor`, if an image in a html field comes from an attachment, its `src` attribute will end by the attachment name. If a user changes the attachment name extension, the next time the image is added on the DOM, the extension is changed but the mimetype of the image is unchanged. To solve the problem, the mimetype of the image is determined thanks to the headers of the http request to the `src` of the image. That way, the information comes from the server hosting the image. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, website: enable the quality change on shaped img This commit improves [this one] by adding a test (this commit was created before [this one] was merged). [this one]: https://github.com/odoo/odoo/commit/738d5fb5ae2154e1f6993817fab5471d2d4384fa task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: hide shape option for CORS-protected images *: website Steps to reproduce the problem: - Add an image on the page. - Replace the image by a CORS protected one. - Try to apply a shape on the image. -> Traceback The goal of this commit is to hide the "Shape" option if the "original image" of an image is not retrievable. Indeed, in this case, the option will fail to apply correctly. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: avoid displaying options that are not compatible *: html_editor, website Few options like filter, quality, format and cropping rely on canvas to work. The problem is that it does not work correctly for mimetypes like `svg` or `gif`. Indeed, if an image modification is done on such images, it will automatically be transformed into a `png` by default. To avoid it, this commit hides the options that rely on a canvas manipulation when clicking on a `svg` or `gif` image. The process image function has also been adapted to not try to transform an image if its mimetype is not compatible with a canvas transformation. Instead, those images are directly transformed into `b64` images without any transformation. Thanks to it, a shape can be applied on a `svg` or a `gif`. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: apply shape on replaced svg and gif images *: website Steps to reproduce the problem: - Add a "Text-Image" snippet on the page and add a shape on the image. - Replace the image by a svg or a gif. -> A shape is displayed on the image options but the shape is not applied on the image. task-5405262 --------------------------------------------------------------------------------------------------------------------------------------------- [FIX] html_builder, *: avoid copying options on new incompatible images *: html_editor, website Steps to reproduce: - Add an image on the website. - Add a shape on the image. - Replace the image by a CORS-protected one. -> The image still has the shape data attributes on its HTML element while it should not as it does not have the prerequisites to have a shape (it does not have an original source). The same problem exists with the hover effect. This commit moves the logic that transfers the shape and hover effect on replaced images from `html_editor` to the responsible plugins in `html_builder` and `website`. It also adds a check to verify that the replaced image is eligible to have a particular option before transferring its data information. task-5405262 Forward-Port-Of: odoo/odoo#259032 Forward-Port-Of: odoo/odoo#251703
This update corrects a reporting issue where employee leave balances didn't correctly reflect current department assignments. Previously, allocations were tied to the department at creation, leading to duplicate entries in reports. The fix ensures leave balances always align with the employee's current department, improving report accuracy.
Original PR description
Steps to reproduce: ------------------------- 1. Install the Time Off module. 2. Go to Time Off > Management > Allocations, create an allocation for an employee, and approve it. 3. Go to Reporting >…
Steps to reproduce: ------------------------- 1. Install the Time Off module. 2. Go to Time Off > Management > Allocations, create an allocation for an employee, and approve it. 3. Go to Reporting > Balance and apply the filter Department > Employee. 4. Change the employee’s department. 5. Create an allocation for the same employee and approve. 6. Apply the Department > Employee filter again. Observed behaviour: ---------------------------- After a department change: * Existing allocations keep the old department * New allocations use the new department As a result, duplicate employee entries appear in the report Cause: ---------- It is using allocation.department_id. Allocations store the department at creation time, which may differ from the employee’s current department, causing an incorrect report filtering. Solution: ------------ Fetch department_id from hr_version instead of hr_leave_allocation in the hr_leave_employee_type_report. This ensures: * Leave balances always follow the employee’s current department * Correct aggregation when grouping by Department → Employee opw-5220577 Before: <img width="1238" height="857" alt="image" src="https://github.com/user-attachments/assets/15e1293b-dc50-4067-a12f-079c046c2074" /> After: <img width="1247" height="824" alt="image" src="https://github.com/user-attachments/assets/feea32de-0d9c-4eef-9ae5-639f4658560c" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258562
This update fixes a bug where accrual calculations weren't automatically calculating allocation duration when using allocation modes other than 'By Employee'. The fix ensures that accrual plans correctly determine the number of days allocated for employees, regardless of the chosen allocation mode, improving the accuracy of holiday tracking.
Original PR description
### Steps to reproduce: - Create an accrual plan of one level to give 20 days at the start of the year - Create an allocation with different mode than 'By Employee' - Set the accrual plan for the…
### Steps to reproduce: - Create an accrual plan of one level to give 20 days at the start of the year - Create an allocation with different mode than 'By Employee' - Set the accrual plan for the allocation and date from 1st Jan - Notice the Allocation number of days doesn't get automatically calculated ### Cause: This is happening because when trying to process the accrual plan we won't have any records in the field employee_id https://github.com/odoo/odoo/blob/bcdd12d13d73915e565fd2c8478b936a16efb9f4/addons/hr_holidays/models/hr_leave_allocation.py#L892-L893 And since employee_id is computed field when computing it we don't handle the case of any other mode other than 'By Employee'. https://github.com/odoo/odoo/blob/bcdd12d13d73915e565fd2c8478b936a16efb9f4/addons/hr_holidays/models/hr_leave_allocation.py#L259-L270 ### Fix: If we have different mode in the allocation we fetch the employees in this mode (Department, Company, Employee Tag) and set them as the allocation employee_ids so when computing the employee_id we will have a record in the field and it won't be null P.S. In the forward port we will have to introduce another fix for the multi allocation wizard opw-5888023 Forward-Port-Of: odoo/odoo#258520 Forward-Port-Of: odoo/odoo#247091
This update removes a distracting blur from message highlights, making them easier to see. The change also corrects issues with scrolling behavior that occurred during highlights, ensuring a smoother user experience. Previously, the system incorrectly displayed a 'Welcome to conversation' message during highlights, causing scroll issues.
Original PR description
Before this commit, the message highlight was too distracting. This was improved [1] so that highlighted message doesn't have the vertical translation during the highlight duration. To make the…
Before this commit, the message highlight was too distracting. This was improved [1] so that highlighted message doesn't have the vertical translation during the highlight duration. To make the message more visible than the other messages, other messages have their opacity reduced. While reduced opacity is good, there was an extra blur, which is more distracting. This commit fixes it by removing it. Also at the end of message highlight, the scroll position of message list was changing when this shouldn't. This happens for 2 reasons: 1. The "Welcome to conversation" message was mistakenly displayed during the message highlighting, thus when message highlight ended its removal would substract some scrollTop and move scroll up. 2. The "Load More" was temporarily not shown during the message highlight. This is a problem because when message highlight ended, this was adding slightly more scollTop and move scroll down. The "Welcome to conversation" should not be shown when there's logically a "Load more", which this commit fixes. The hiding of "Load More" was intended to avoid their triggering when opening conversation [2], but the logic around these triggers had been improved [3] therefore this is no longer necessary. This commit relaxes the showing of "Load more" to display them even during a message highlighting. Task-6121035 [1]: https://github.com/odoo/odoo/pull/246989 [2]: https://github.com/odoo/odoo/pull/181392 [3]: https://github.com/odoo/odoo/pull/216776 Before / After _(before visual artifacts come from GIF recorder that doesn't like blur)_  
This update resolves an issue where the live chat composer would intermittently disable after a page reload. The fix ensures the system correctly identifies available agents by using 'sudo' to access the chatbot data, preventing the frontend from incorrectly determining that no operator was assigned.
Original PR description
When a livechat visitor reloads the page, `/mail/data` serializes the chatbot state again from the discuss channel / message store data. In that flow, the visitor cannot read `livechat_agent_partner_ids` directly, so `operatorFound` was computed as false even when an agent had already been assigned. This made the frontend think no operator was available which led to UI bugs like disabled composer. Use sudo when checking whether a livechat agent exists so the store data keeps returning the correct chatbot forwarding state for visitors. task-[6102389](https://www.odoo.com/odoo/project/1519/tasks/6102389)
This update streamlines the loading of data for the self-ordering point-of-sale system. By only retrieving the necessary information, we've reduced the system's load and improved its responsiveness. This results in a smoother and faster experience for users placing self-orders.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258744 Forward-Port-Of: odoo/odoo#257865
A previous error caused a blank page when users clicked the 'Check the sample button' in the sales module. This was due to a change in the link to the sample quotation PDF. This update provides a working link, resolving the issue and ensuring users can access the sample.
Original PR description
Currently, a 404 error is occurring when the user clicks on the Check the sample button. **Steps to produce:** - Install sales module without demo data. - Click on the check a sample. its clean! button. **Issue:** - A 404 error occurs with a blank page. **Cause:** - This issue is occurring because the link to open the sample quotation pdf was changed in the Odoo documentation. **Solution:** - Give a valid link to open the sample quotation pdf. - similar fix already did [here1] & [here2]. [here1]: https://github.com/odoo/odoo/commit/38431f3aef57c5b91644b4c5241f226beb917b12 [here2]: https://github.com/odoo/odoo/commit/610cea89c37454a4ddb68939333b4b363f2f81a2 opw-6099641 opw-6074953 Forward-Port-Of: odoo/odoo#259150 Forward-Port-Of: odoo/odoo#258003
This update fixes an issue where users couldn't easily switch back to the 'All Countries' filter after selecting a specific country in the website CRM. The change ensures a smoother user experience by allowing users to quickly view all partners regardless of their initial country selection. This improves usability and data accessibility.
Original PR description
Before this commit, since the GET param is not set on the url, once you have a country selected you cannot go back to 'All countries'.
This update corrects a technical issue where a log message incorrectly indicated a missing delivery address when one was actually present. The change ensures that the log message is only displayed when a valid partner ID is genuinely missing, improving the clarity of system notifications. This prevents unnecessary alerts and streamlines troubleshooting.
Original PR description
PR https://github.com/odoo/odoo/pull/248034 removed the `partner_id` existence check, causing the "No Delivery Address" error to be logged even when a delivery address was present. This commit restores the check so the message is only logged when `partner_id` is actually missing. task-5933473
This update fixes a bug that prevented Peppol invoices from importing correctly. Previously, changing the Peppol journal type to non-purchase would cause import failures. This change ensures that Peppol invoices are always processed as purchase documents, improving invoice import reliability.
Original PR description
Prevent changing a Peppol journal to a non-purchase type, to avoid import errors when receiving Peppol invoices. Step to reproduce: - Setup a company with Peppol - Change the Peppol reception journal type to non-purchase - Try to run Peppol cron to import invoice, it fails with "Cannot create a purchase document in a non purchase journal" opw-6071992 opw-6064502 Forward-Port-Of: odoo/odoo#258673 Forward-Port-Of: odoo/odoo#256823
This update fixes an issue where alternative purchase orders were calculating prices incorrectly. When using 'Purchase Alternatives,' the system was misinterpreting tax settings, resulting in an inflated total price. This change ensures accurate price calculations for alternative purchase orders, improving financial reporting.
Original PR description
[FIX] purchase: set the correct price in alternative PO Steps to reproduce the bug: - Enable "Purchase Alternatives" in settings - Go to Accounting > Configuration > Taxes: - Configure a 15% purchase…
[FIX] purchase: set the correct price in alternative PO
Steps to reproduce the bug:
- Enable "Purchase Alternatives" in settings
- Go to Accounting > Configuration > Taxes:
- Configure a 15% purchase tax:
- Advanced Options tab:
- Included in Price: enabled
- Create a storable product "P1":
- Tax: 15%
- In the Purchase tab, add vendors:
- "Azure Interior": price = $10, min qty = 1
- "Deco Addict": price = $15, min qty = 1
- Create a purchase order for "Azure Interior":
- Order 100 units → total price is automatically computed as $1000
- Create an alternative purchase order:
- Vendor: "Deco Addict"
- Copy products: enabled
Problem:
The price is $1360, instead of $1500
When the alternative purchase order is created and the product is set
on the purchase order line, the required onchange methods are not
triggered:
https://github.com/odoo/odoo/blob/ad253ef4c2cb06536b99bb919a3e01ed980d2e96/addons/purchase/models/purchase.py#L1169
As a result, both the unit price and the taxes are missing on the
purchase order line. When `_compute_price_unit_and_date_planned_and_name`
is triggered, it attempts to compute the `price_unit`.
https://github.com/odoo/odoo/blob/fb24ad03fc47a303fa8719c0795e1afa9a7eb821/addons/purchase/models/purchase_order_line.py#L345-L346
At this point, it checks whether the purchase order has a vendor.
Since "Deco Addict" is set, it calls `_fix_tax_included_price_company`
using:
- the supplier price ($15)
- the supplier tax (15%)
However, since no taxes are yet set on the purchase order line,
`_fix_tax_included_price_company` incorrectly assumes the price is
tax-included and converts it to a tax-excluded price
(~13.04 instead of 15).
https://github.com/odoo/odoo/blob/7076b4f4d0d933d93b24e8e4c7cf21ef0b0008e5/addons/account/models/account_tax.py#L571-L573
Then, a 15% tax is applied on top of this incorrect base price, leading
to the wrong total.
opw-6047004
Forward-Port-Of: odoo/odoo#258154This update fixes a display issue in the HTML editor's task history dialog. Previously, the date of the first task revision was incorrectly shown with a user-specific time offset. Now, all task revision dates are consistently displayed in UTC, ensuring accurate and reliable tracking of changes.
Original PR description
Description of the issue/feature this PR addresses: The record's `create_date` from `orm.read` is a naive datetime string in UTC, but `DateTime.fromFormat` without a zone option interprets it in the browser's local timezone. This causes the initial revision's date to be shifted by the user's UTC offset in the history dialog. Current behavior before PR: 1) Create a task 2) Change/Add description in it 3) Check the version history 4) the task is having wrong date/date & time in the 1st revision (in my case -5:30 hours) <img width="749" height="515" alt="image" src="https://github.com/user-attachments/assets/e9480570-7458-4e0a-9bba-6514d6b1aacf" /> Desired behavior after PR is merged: <img width="751" height="483" alt="image" src="https://github.com/user-attachments/assets/ff9d1c95-fc8e-40bb-8cf8-bab39c9cd59b" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256653
This update ensures that the price of a combo order is accurately applied to any additional items added as extras. Previously, when all sub-combos had zero free quantities, the extra items were incorrectly priced at the base price, leading to lost revenue. This fix mirrors the existing logic to correctly distribute the parent combo's list price to these extra lines.
Original PR description
When all sub-combos have qty_free=0, no child lines were classified as free, leaving remaining_total (= parent list price) undistributed. Extra lines were priced at base_price only, silently dropping the parent combo price. Fix by mirroring the JS computeComboItems logic: before processing extra lines, compute their proportional denominator and allocate remaining_total to each extra line as a share of parent_lst_price, with a per-unit rounding correction on the last line. opw-6045562 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255867 Forward-Port-Of: odoo/odoo#254665
This update streamlines the color picker interface for website design options like icons, snippets, and scroll buttons. Previously, irrelevant tabs were displayed, which has now been corrected to ensure a cleaner and more focused design experience. This improves usability and consistency for our website builders.
Original PR description
This commit ensures the correct tabs are displayed in the color picker for Icon, Snippet Tabs and Scroll Button options. The Theme tab was previously shown for these options, although it was not relevant in this context. The color picker now only displays the tabs that make sense for each option. 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#259220 Forward-Port-Of: odoo/odoo#249419
This update fixes an issue where kit costs were incorrectly calculated when components used within a kit had different unit of measure (UoM) settings than the base component. The fix ensures accurate cost calculations for kits sold through POS, preventing discrepancies in order totals. This improves the reliability of pricing and inventory management.
Original PR description
When selling a kit that use component with different UoM than the base component UoM, no conversion was done to compute the correct qty of component used in the kit, which lead to a wrong total cost on the pos order. Steps to reproduce: ------------------- * Create a component A with a cost of 12000€ * Set the UoM for the component A to "dozen" * Create a kit product K with a BoM the use 1 "unit" of A * At this point the cost of the kit K should be 1000€ * Now make a PoS order for 1 K and validate it > Observation: The total cost of the kit is not correctly computed, it should be 1000€ Why the fix: ------------ When computing the qty_per_kit, we were not doing the conversion between the product UoM and the BoM line UoM. opw-6039809 Forward-Port-Of: odoo/odoo#258774 Forward-Port-Of: odoo/odoo#257068
This update resolves an issue where the system wasn't properly assigning filenames to imported SDI E-invoices. By adding a field to store the filename alongside the XML file, the system now correctly exports invoice documents and avoids errors. This ensures seamless invoice processing and data accuracy.
Original PR description
PR #212726 removed a Many2One field and replaced it with an existing binary field (`l10n_it_edi_attachment_file`) and a new Char field (`l10n_it_edi_attachment_name`) to store E-invoice files as…
PR #212726 removed a Many2One field and replaced it with an existing binary field (`l10n_it_edi_attachment_file`) and a new Char field (`l10n_it_edi_attachment_name`) to store E-invoice files as XMLs. This change was made for security reasons. This pre-existing binary field was already used for importing SDI documents, which caused errors resolved in PR #252806. The new char field was not set during the SDI import process in PR #212726. This can cause errors when exporting invoice documents, as our code sees content in the binary field and expects the name to also be present. See [`_get_invoice_legal_documents()`](https://github.com/odoo/odoo/blob/f48f221c91b8d123bcaf1c4d8ed6c7dfba763ae6/addons/l10n_it_edi/models/account_move.py#L411). This commit ensures that the name of an imported SDI document is set in the move's `l10n_it_edi_attachment_name` field. opw-6023263 [link](https://www.odoo.com/odoo/my-tasks/6023263) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258882 Forward-Port-Of: odoo/odoo#257586
This update resolves an issue where accounting administrators without Point of Sale access were encountering an AccessError when viewing invoices linked to POS orders. The fix removes unnecessary access checks within the system's data retrieval process, allowing authorized users to access invoices correctly.
Original PR description
An accounting administrator without Point of Sale access would get an AccessError when opening a customer invoice linked to a POS order. The `edi_show_cancel_button` computed field calls `_get_move_applicability()`, which in turn calls `_move_has_settle_or_deposit_pos_order()`. That method was reading `invoice.pos_order_ids.lines` without `sudo()`, causing the ORM to enforce access rights on `pos.order` for the current user. Users who only have accounting rights (no "Point of Sale/User" or "Inventory/User" group) would therefore get an AccessError. opw-6044860 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254905
Features or functions removed from Odoo
This pull request removes outdated translation data specifically for Uz (Uzbekistan) reports from the project's web translation files. This cleanup streamlines the translation process and ensures that only relevant language resources are included. The change improves the efficiency of future localization efforts.
Original PR description
Related: https://github.com/odoo/odoo/pull/259342 Forward-Port-Of: odoo/enterprise#113933
Code cleanup and technical improvements
This update streamlines a key function within our account reporting system, specifically related to analytic coverage calculations. The change improves the efficiency of report generation, leading to faster processing times and a smoother user experience. This is an internal technical update focused on performance.
Original PR description
Simplification of the function 'compute_sql_analytic_coverage' in account_analytic_line in the report module. Forward-Port-Of: odoo/enterprise#113842