Daily updates from Odoo
Thursday, May 7, 2026
71 changes · saas-19.1
New functionality added to Odoo
This update aligns Odoo's data with international standards by incorporating the states of Georgia, as defined by ISO 3166-2. The change also improves address formatting to display state names instead of codes, enhancing data accuracy and usability.
Original PR description
Added the states in Georgia to align with official ISO 3166-2 standards. task-6119824 Forward-Port-Of: odoo/odoo#261689
This update adds the ability to export General Ledger reports as CSV files. This allows users to easily download and analyze their financial data for reporting and record-keeping purposes. This enhancement improves data accessibility and streamlines financial reporting workflows.
Original PR description
task-5734354 Forward-Port-Of: odoo/enterprise#115493 Forward-Port-Of: odoo/enterprise#107638
This update backports a key feature for Poland (l10n_pl_bank_verification) that automatically verifies bank accounts against government APIs. This ensures compliance with Polish regulations and streamlines the process for users adding bank details in the Odoo system. It builds upon previous work tracked in odoo/odoo#250400.
Original PR description
[ADD] l10n_pl_bank_verification: Backport bank account verification Backport of the feature that implements PL Bank Account Verification against the government API See odoo/odoo#250400 task-4637086 Forward-Port-Of: odoo/odoo#262518
Enhancements to existing features
This update enhances the appearance of online order notifications on smaller devices. By using a full-width layout and improved alignment, the notifications now display more clearly and professionally, creating a better user experience. This change was made to improve the visual consistency and usability of the online ordering system.
Original PR description
In this commit: ------------------- - Use a full-width layout on small screens by removing container padding and improving alignment with `justify-content-between`. task: 6054267 Forward-Port-Of: odoo/enterprise#111614
Resolved issues and error corrections
This update resolves an issue where the website publish toggle on job positions initially displayed incorrect status. The change ensures the form autosave accurately reflects the published state immediately after the toggle is clicked, improving the user experience.
Original PR description
Steps to reproduce: 1. Install `website_hr_recruitment` 2. Create a job position from form view 3. Click on Published toggle button Issue: - Publishing a job position from the `hr.job` form is…
Steps to reproduce: 1. Install `website_hr_recruitment` 2. Create a job position from form view 3. Click on Published toggle button Issue: - Publishing a job position from the `hr.job` form is showing an incorrect first-click result: the website page is actually published, but the form autosave response still return `website_published = false`, so the toggle flips back to unpublished until the next refresh. Cause: - In v19.0, `website.published.mixin.write()` was effectively a thin wrapper around `super().write()`. The backend autosave path used by boolean toggles (`web_save`) performs a `write()` and then an immediate `web_read()` in the same request, and that simple flow returned the fresh publish state. - In saas-19.1, the publish flow became more complex: - `website.published.mixin.write()` now triggers `_finalize_publication()` - `_finalize_publication()` performs an additional internal `write()` - The record is published correctly, but the immediate `web_save()` readback can still use cached values for `website_published` from the same ORM environment. This makes the first form response inconsistent with the actual state. Solution: - Invalidating `website_published` field after the`write()` in `_finalize_publication()` so the immediate `web_read()` performed by `web_save()` returns the real post-write state on the first click. opw-6012359
This update resolves an issue where the table number on the kitchen display was being cut off when the order title exceeded a certain length. This prevented kitchen staff from quickly identifying the correct table for an order, leading to potential delays. The fix ensures the table number is always visible, improving kitchen efficiency.
Original PR description
**Steps to reproduce:** - Download the German language - Set the restaurant to QR + Ordering - Set the Service at Table, pay after each order - Set the language to German - Go to the Self and order…
**Steps to reproduce:** - Download the German language - Set the restaurant to QR + Ordering - Set the Service at Table, pay after each order - Set the language to German - Go to the Self and order something while the language is German - Chose table 12 - Go to the kitchen display - The title is truncated, meaning we can't see the table number **Why the fix:** If the title is more than 150px it will be truncated and "..." will replace the table number. This has been introduced in ed5b010dc7b5c11bbbc8513c1edb0ec4f58778c1 but not being able to see the table number might be bad as some people would need to spend time trying to figure out which table the order is for, instead of just having to look at the kitchen display. We now revert this change to break to a new line in the case where the card title is too long, so we can always see the table number. Before: <img width="317" height="156" alt="image" src="https://github.com/user-attachments/assets/25e76026-bdad-4639-9dfc-0d75ffa8d8c8" /> Afer: <img width="329" height="174" alt="image" src="https://github.com/user-attachments/assets/f387dd5f-96d3-4148-bc76-215393c76e67" /> opw-6096111
This update fixes an error in the manufacturing report that incorrectly converted quantities between different units of measure (e.g., Kg and Ton). Previously, the report displayed inaccurate production figures. The fix ensures consistent and correct calculations for quantity and unit cost across all manufacturing orders.
Original PR description
Steps to reproduce:
- Create a product W1 with UoM = Kg with the following BoM:
- Component C1: 1 unit, cost = $1
- Create and confirm MO1:
- Produce 1 Kg of W1 → total cost = $1
- Create and confirm MO2:
- Produce 1 Ton of W1 → total cost = $1000
- Open the Manufacturing Report and group results
Problem:
- qty_produced ≈ 1.001 instead of 1001
- unit_cost average ≈ 1000 instead of 1
Expected behavior:
- qty_produced = 1001
- unit_cost average = 1 (consistent across MOs)
The manufacturing report (`mrp.report`) incorrectly converts quantities from move UoM to product UoM, leading to wrong `qty_produced` and `qty_demanded` values when different units of measure are used
The current implementation uses:
sm.quantity / uom.factor * uom_prod.factor
This inverts the conversion ratio. As a result:
- 1 Ton is converted to 0.001 Kg instead of 1000 Kg
opw-6097098
Forward-Port-Of: odoo/enterprise#114233
Forward-Port-Of: odoo/enterprise#113979This update corrects a bug in how HR version searches were performed. Previously, searches were incorrectly relying on contract dates instead of the actual start and end dates, leading to inaccurate results. This fix ensures searches for HR versions using date ranges now work correctly, providing more reliable version selection.
Original PR description
Previously, the searches defaulted to delegating the search to the contract_date_start/end fields instead of mapping to the actual computes of date_start and date_end, which caused incorrect results when searching for versions with a specified date_start or date_end. This PR fixes this by implementing the search method on date_start and date_end to correctly map the search to the expected values for date_start and date_end. Task-6067139 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#256581
This update corrects an issue where payslips were displaying outdated contract information. The fix ensures payslips now correctly reflect the version of the contract they are based on, resolving potential discrepancies in payroll reporting. This improvement is a result of addressing a related search issue within the Odoo system.
Original PR description
Prior to this commit, the version domain on payslips only looked at the contract dates rather than the version's dates. The domain was fixed in this commit to limit the domain based on the version's dates instead, and this was allowed after the searches on the version date_start and date_end fields were fixed in the odoo/odoo#256581. task-6067139 Forward-Port-Of: odoo/enterprise#113818
This update resolves an issue where invoices sent via Peppol would fail for customers in Iceland and Albania due to missing country code prefixes on VAT numbers. Now, VAT numbers for these countries correctly include the prefix, ensuring successful invoice delivery and compliance with Peppol standards.
Original PR description
Current behavior before PR: To send an invoice via Peppol, the customer's VAT must have the country code as a prefix. But while creating customers from countries like Iceland and Albania, It removes the country code prefix. Which later raises an error while sending the invoice that "The VAT of the customer should be prefixed with its country code." Desired behavior after PR is merged: VAT numbers for customers in Iceland and Albania now keep their country code prefix, letting users to send invoices via Peppol. task-6050791 Forward-Port-Of: odoo/odoo#259105
This update fixes an error where the cost of kit products on sales orders was incorrectly calculated. Previously, when ordering a kit with multiple components, the system was multiplying the cost by the batch size, leading to inflated prices. This fix ensures accurate cost calculations for kit products, resolving a discrepancy between expected and actual costs.
Original PR description
### Issue: When a kit BoM has `product_qty` > 1 (e.g. 12 Kit X = 12 Comp A + 12 Comp B), the SO line cost after confirmation is multiplied by the batch size. Selling 1 Kit X shows a cost of 360…
### Issue: When a kit BoM has `product_qty` > 1 (e.g. 12 Kit X = 12 Comp A + 12 Comp B), the SO line cost after confirmation is multiplied by the batch size. Selling 1 Kit X shows a cost of 360 instead of 30. ### Cause: The method `_compute_average_price` uses `bom.explode(self, 1)`, which returns raw BoM line quantities for one full batch. It accumulates the total batch cost but returns it without dividing by `bom.product_qty`. ### Steps to Reproduce: - Costing Method = AVCO, Inventory Valuation = Automated - Comp A (cost 10), Comp B (cost 20), Kit X (cost 0) - Kit BoM: 12 Kit X = 12 x Comp A + 12 x Comp B - Create and confirm a SO for 1 x Kit X - Expected SO line cost: 30 - Actual SO line cost: 360 Solution: This fix mirrors the normalization already done in `_compute_bom_price`, which correctly divides by `bom.product_qty` and converts UoMs. opw-5969310 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259005 Forward-Port-Of: odoo/odoo#253406
This update fixes a bug where users could accidentally add text inside image-only gallery items (like banners and image walls). The change prevents users from directly editing the content within these galleries, ensuring they display only images as intended. This improves the visual consistency and stability of website designs.
Original PR description
Some image items are supposed to not contain any extra content. Grid image items and `s_image_gallery`'s images are such images. Grid image-only items are actually `contenteditable`. This makes it possible to replace the image with text. A similar issue exists for images inside `s_image_gallery` blocks. This commit makes such items non-editable, while keeping the media inside it replaceable. Steps to reproduce: - Drop a Banner block - Select an image - Type something => Image was replaced with text - Drop an Image Wall - Select an Image - Type something => Image was replaced with text task-5436148 Forward-Port-Of: odoo/odoo#258018
This update resolves an issue where multiple users were incorrectly added to Whatsapp channels after a message was sent. The fix ensures that only the user who initiated the conversation is added to the channel, preventing unnecessary notifications and channel clutter. This improves the user experience and channel management efficiency.
Original PR description
…ser sends a template message when creating discussion channels after the partner sends a message back. Issue: Currently, When there are multiple users listed under whatsapp.account.notify_user_ids no matter what, when creating a new discuss channel it will add all users in that list. Even when a single user inside that list initiated the conversation with a template. To replicate in runbot add multiple users to whatsapp.account.notify_user_ids, make a partner with a number, send a template, then have the partner send a message back. All users will be notified and added to the channel. There was an unformatted number being passed to a function that required the formatted number. This caused _find_active_channel to find 0 active channels. Fix: Format the number received from the message values inside WhatsAppAccount._process_messages opw-5349138 Forward-Port-Of: odoo/enterprise#114912 Forward-Port-Of: odoo/enterprise#102452
This update fixes an issue where down payment invoices on tax-included company accounts were incorrectly calculating totals. The fix ensures that the down payment section's total accurately reflects the sum of all invoice amounts, resolving a discrepancy in how invoices are reported. This improves the accuracy of financial reporting for businesses using the tax-included pricing model.
Original PR description
Issue: --- In `tax included` companies, the down payment section is not correctly calculated. Steps to reproduce: - Configure selected company's field account_price_include to be "tax_included" -…
Issue: --- In `tax included` companies, the down payment section is not correctly calculated. Steps to reproduce: - Configure selected company's field account_price_include to be "tax_included" - Create a sales order - Create 1 or more down payment invoices for the SO and confirm - Create a final invoice that pays for the rest of it - On this final invoice where the down payment(s) are also listed, click on the preview button Current behavior: - The down payment section's total is the sum of the subtotal Expected behavior: - The down payment section's total should be the sum of the totals Justification: --- The amounts included in the invoice report are dependent on the `company_price_include` field in `res.partner`. If tax_excluded, subtotals are listed. If `tax_included`, totals are listed. There was a mismatch between the entries and the section total; the section entries could have the total as the amount while the section's sum would be in terms of subtotals. Fix: --- On stable we can still rely on `section_subtotal` but set its amount to total instead of subtotal in case of `tax_included`. However, this fix is not stable as there is a xpath on `t-set` expression in `l10n_ar`. To avoid breaking the views, we can re-set the `section_subtotal` in the next lines. This would still cause issues as it will replace the overridden logic in the `l10n_ar` implementation. To prevent that issue, we can re-set the `section_subtotal` only if the value is the same as `get_section_subtotal`, which means we are in the main implementation and it's safe to re-set the value. opw-6127615 Forward-Port-Of: odoo/odoo#261372
This update fixes a minor usability issue in the Helpdesk module. Previously, users attempting to delete a stage in a ticket kanban view were prompted with a warning and lacked keyboard shortcuts for key actions. This change ensures keyboard shortcuts are now available, streamlining the stage deletion process and improving user efficiency.
Original PR description
Before this commit, when the user tries to delete a kanban column in ticket kanban view when the group by is stage_id. A pop-up appears when there is at least one ticket in that stage to notify the user it would be better to archive the stage or remove all tickets from that stage before deleting it. The Confirm and Discard buttons of that wizard does not have keyboard shortcut as the other discard button in the other views/wizards. This commit makes sure the keyboard shortcut is correctly assigned to those buttons. task-4885677 Forward-Port-Of: odoo/enterprise#89141
This update resolves an issue where a key in the purchase order suggestion process was incorrectly formatted. The fix ensures the correct key (`section_id`) is used, preventing potential errors and improving the reliability of purchase order suggestions. This ensures the purchase order suggestion functionality operates as intended.
Original PR description
Issue: - `_editSuggestContext` sends `sectionId` in the context, but `action_purchase_order_suggest` expects the key to be `section_id`. Fix: - Update the `_editSuggestContext` to send the correct context key, `section_id`. Forward-Port-Of: odoo/odoo#261930
This update fixes an issue where helpdesk notification emails incorrectly linked to the company's default website instead of the customer's original website. The change ensures that 'View Ticket' buttons now always direct users to the website where their support request was initially created, improving the customer experience. This was achieved by updating how the system determines the ticket's base URL.
Original PR description
On a multi-website / single-company setup, helpdesk notification emails posted after the initial confirmation contained a "View Ticket" button pointing to the wrong website, always the company's…
On a multi-website / single-company setup, helpdesk notification emails posted after the initial confirmation contained a "View Ticket" button pointing to the wrong website, always the company's default website instead of the website the ticket was created from. Steps to reproduce: =================== 1. Create two websites W1 (seq 1) and W2 (seq 2) under the same company, with distinct domains. 2. Create two helpdesk teams with "Submit a Ticket" enabled, each bound to one website (Helpdesk1 -> W1, Helpdesk2 -> W2). 3. From W2, submit a ticket on /helpdesk/helpdesk2. 4. In the ticket, send email from the chatter. 5. Inspect the outgoing notification email. => "View Ticket" button points to W1's domain. Root cause: ============ `helpdesk.ticket` has no `website_id`, so `Base.get_base_url` falls through to `company_id.website_id.domain`, i.e. the first website of the company by sequence. The first confirmation message looked right only because it was posted inside a website request, where `website.get_current_website()` provided the correct context; subsequent agent replies are posted from the ticket with no such context, so the fallback kicked in. Override `get_base_url` on `helpdesk.ticket` to prefer `team_id.website_id.domain` when set, so every notification on the ticket links back to the website the customer submitted it from. => "View Ticket" button points to W2's domain (the site the customer is browsing). opw-6071999 Forward-Port-Of: odoo/enterprise#114693
This update resolves an issue where custom declarations weren't automatically populated for international World Express Pro shipments within the BPost module. Now, the necessary custom declaration information is automatically filled out, ensuring compliance and smoother international shipping processes. This change improves the accuracy and reliability of shipments.
Original PR description
Before this commit, the bpost module was not filling the custom declaration in case of international shipping (World Express Pro) After this commit, the section is filled opw-4932970 Forward-Port-Of: odoo/enterprise#114218 Forward-Port-Of: odoo/enterprise#101476
This update resolves an issue where flexible work schedules (like 20h/week, 4h/day) were incorrectly displaying overtime. The fix ensures accurate overtime calculations by correctly handling time zone conversions and date ranges, preventing inaccurate negative overtime indications.
Original PR description
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative…
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative overtime even when the employee has logged exactly 20h for the week. **steps to reproduce:** 1. Create a new working schedule with flexible hours enabled for example (20h/week, 4h/day average) 2. Assign this schedule to an employee 3. Go to Timesheets, search for the employee 4. Navigate to a past week 5. Enter 4h on each working day 6. Observe the overtime indication shows incorrect value (-01:00) **cause:** In `resource/models/resource_calendar.py`, the flexible hours algorithm that determines the date range by converts UTC boundaries to the employee's timezone. When the employee's timezone has a positive UTC offset (UTC+1, like in brussels time zone), `Sun 23:59:59 UTC` becomes `Mon 00:59:59 CET`, pushing `end_date` to the next Monday. This creates an 8 day range instead of 7. The algorithm then starts a new weekly budget for the spillover day and allocates 1 extra hour, making `allocated_hours` 20.9999998 instead of 20. **fix:** - Use the UTC date before conversion to the employee's timezone when determining the flexible date range. - prefer `self` when it is the flexible calendar being queried, so hr_contract's `_get_calendar_at()` override cannot substitute the contract's calendar parameters (full_time_required_hours, hours_per_day) for the flexible ones. **note** Updating the test (`test_no_carried_over_leaves_for_flexible_resource`) in `hr_holidays/tests/test_expiring_leaves.py` expected duration logic, is to match the corrected inclusive day range and prevent asserting the previous spillover behavior. link to the enterprise PR: https://github.com/odoo/enterprise/pull/112879 link to the community PR: https://github.com/odoo/odoo/pull/257269 opw-5970511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#115693 Forward-Port-Of: odoo/enterprise#112879
This update fixes an issue where interactive tours were incorrectly triggered when the POS was loaded, causing errors. We've added a 'hold' flag to the tour to ensure steps are only loaded when needed, improving the POS experience and preventing technical problems.
Original PR description
When loading the POS, interactive tours were triggered but their steps were not included in the POS bundle. This caused a traceback each time the POS was opened or refreshed. To prevent this, we added a flag `onHold` onto the tour if no steps were found from the database and the registry wasn't loaded. --- Task: https://www.odoo.com/odoo/project/1737/tasks/605029 Forward-Port-Of: odoo/odoo#255094
This update ensures Odoo's Dutch reporting modules (SBR) correctly submit data to the new Digipoort infrastructure, which is migrating to digipoort.logius.nl by May 1, 2026. This change is critical to avoid submission failures and maintain compliance with Dutch regulations.
Original PR description
*: l10n_nl_reports_sbr{,_icp,_status_info}
---
Description of the issue this commit addresses:
The Dutch Digipoort endpoint infrastructure is being migrated from procesinfrastructuur.nl to digipoort.logius.nl effective May 1, 2026. Odoo's SBR modules need to use the new endpoints or submissions will fail.
---
Desired behavior after this commit is merged:
This commit updates all Digipoort endpoint URLs (delivery and status services) from the old domain to the new logius.nl domain, and clarifies that valid PKIoverheid certificates are required for both environments. Reports now submit to the new Digipoort infrastructure correctly.
---
task-6171403
Forward-Port-Of: odoo/enterprise#115668This update removes a misleading warning in the Odoo system that appeared when sequences didn't begin with the number 1. Starting sequences at 1 is a standard and accepted practice, and this change ensures users aren't unnecessarily alerted to a valid configuration. This improves the user experience and simplifies sequence setup.
Original PR description
We don't want to warn users about their sequence not starting at 1 as it is a perfectly valid case. This removes the warning both in the list view and in the dashboard. task-5253768 Forward-Port-Of: odoo/odoo#235117
This update fixes a technical error that prevented upgrades to version 19.1 when creating subscriptions with service products and end dates. The issue stemmed from a type mismatch in how the system compared dates, now the upgrade process will function correctly.
Original PR description
**Steps-to-Reproduce** - In v19, install subscriptions. - create new subscription + service product with allow one time sale enabled. - make a SO with that product,any reccuring plan and any end…
**Steps-to-Reproduce**
- In v19, install subscriptions.
- create new subscription + service product with allow one time sale enabled.
- make a SO with that product,any reccuring plan and any end date.
```
id | name | subscription_state | next_invoice_date | end_date
----+--------+--------------------+-------------------+------------
1 | S00001 | 1_draft | | 2026-05-02
```
- confirm the SO
```
id | name | subscription_state | next_invoice_date | end_date
----+--------+--------------------+-------------------+------------
1 | S00001 | 3_progress | 2026-05-01 | 2026-05-02
```
- remove its recurring plan (some product sold for months for testing then converted to one time sale )
```
id | name | subscription_state | next_invoice_date | end_date
----+--------+--------------------+-------------------+------------
1 | S00001 | 3_progress | | 2026-05-02
```
- upgrade to v19.1 will fail or opening sales > To Invoice > Orders To Invoice gives this error or add amount_to_invoice in list view using studio to produce in v19 :
```
File "/home/odoo/odoo18/enterprise/sale_subscription/models/sale_order_line.py",
line 175, in _compute_amount_to_invoice
and (not order.end_date or order.next_invoice_date < order.end_date)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: '<' not supported between instances of 'bool' and 'datetime.date'
```
- upgrade failing for v19.1 because amount_to_invoice added to list view [here](https://github.com/odoo/odoo/commit/427232efd121410380b62acf4fd2e9ee369e6542#diff-48cb4309a6006f91b2b40e4c1049860218d419fce1782c7dcc278329803129caR193-R213).
upg - [4220658](https://upgrade.odoo.com/odoo/upgrade.request/4220658)
opw - [6128033](https://www.odoo.com/odoo/project/70/tasks/6128033)
Forward-Port-Of: odoo/enterprise#115976This update resolves an error that occurred when calculating benefit costs with property fields in employee contracts. The fix prevents property fields from being used as cost fields, ensuring accurate benefit calculations. This change improves the stability of the payroll processing functionality.
Original PR description
**Steps to Reproduce:** 1. Install `hr_contract_salary_payroll` with demo data. 2. Open Employee (e.g; Abigail Peterson) > Payroll tab > Gear Icon > Edit Properties. 3. Add a new property for Payroll…
**Steps to Reproduce:** 1. Install `hr_contract_salary_payroll` with demo data. 2. Open Employee (e.g; Abigail Peterson) > Payroll tab > Gear Icon > Edit Properties. 3. Add a new property for Payroll and fill in the value also. 4. Go to Payroll > Configuration > Benefits. 5. Create a new benefit with: Salary Structure Type: Worker Cost Field: Payroll Properties (Employee Contract) 6. Save the record. Video: https://drive.google.com/file/d/1gHRkDW5G0bURlo9_IRgCnvqpE-8Fk1xa/view?usp=drive_link **Error:** `TypeError - unsupported operand type(s) for +: 'int' and 'Property'` **Cause:** The method `_get_benefits_costs()` directly sums values using: ``` self[benefit.cost_field] ``` When the selected cost field is a property field, it returns a **fields_properties.Property** object instead of a numeric value, and this object is not directly compatible with the arithmetic sum operation. Before 19.0, property fields were not allowed to be selected as a cost field - [1]. **Fix:** This commit prevents selecting property fields as cost fields from the list of supported field types. [1] : https://github.com/odoo/enterprise/blob/04224abcc7eec1c81df7ad57a9213fd091774888/hr_contract_salary/models/hr_version.py#L183 sentry-7388663038 Forward-Port-Of: odoo/enterprise#113238
This update corrects a problem with the Intrastat CSV export functionality, which was broken following a technical update in 18.0. The fix ensures accurate data is exported by addressing formatting errors and database synchronization, preventing potential reporting discrepancies.
Original PR description
Since the technical refactoring of intrastat in 18.0, the csv export in `l10n_nl_intrastat` seems broken. Here is the fixes done in this commit: 1. `Commodity flow` is supposed to be a single diggit (6 or 7) but an empty blank space was hidden. 2. Switching the condition on `country_origin_code` as it was the opposite 3. Add a `flush_all` before calling the report during the export, to be sure the database is up to date. opw-5799126 Forward-Port-Of: odoo/enterprise#116230 Forward-Port-Of: odoo/enterprise#115791
This update resolves an issue where the AI systray button in the Odoo interface had excessive padding. The change removed unnecessary styling classes, streamlining the button's appearance and improving the user experience. This was a minor visual adjustment.
Original PR description
Remove the `btn` class because it adds additional padding, and eliminate the other unnecessary classes since the rules have already been applied in the `navbar.scss` file. task-5079952 Forward-Port-Of: odoo/enterprise#116423
This update fixes an issue where bank statement imports were failing due to incorrect partner name matching. The change ensures that when a CAMT file contains both 'Dbtr' and 'UltmtDbtr' values, the 'UltmtDbtr' name is used for reconciliation, resolving the matching failure. This improves the accuracy of bank statement processing.
Original PR description
Steps to reproduce: 1- Create a Swiss company and switch to it 2- Go to [Accounting -> Configuration -> Journals] and create a Bank journal 3- Go to the Accounting dashboard, click on the three dots on the Bank journal and click import records 4- Upload a CAMT file with a record that has both a value for "Dbtr" and "UltmtDbtr" (file can be found in the ticket chatter) Issue: The added record uses the "Dbtr" `name` value for the partner name. As a result, reconcilation matching fails Expected behavior: If exists, should use the "UltmtDbtr" `name` value opw-6024860 Forward-Port-Of: odoo/enterprise#113560
This update significantly improves the speed of importing large XML bills, particularly those received via Peppol or manual upload. By optimizing the system's database queries and update processes, the upload time for bills with 30,000+ lines has been reduced from failing to completing in just 11 minutes. This enhances efficiency and reduces processing delays.
Original PR description
### Description: The upload and import process for large XML bills via Peppol or manual upload was inefficient due to two primary bottlenecks. First, the system performed individual queries per line to match products, taxes, and accounts, leading to an N+1 query issue. Second, multiple write operations were executed on each line to update various fields. This commit introduces batching and improve caching for these operations to reduce database call. ### Benchmark: | N° of lines | Before | After | |-------------|---------|-------| | 30264 | Timeout | 11min | ### Reference: opw-5416612 Forward-Port-Of: odoo/odoo#262882 Forward-Port-Of: odoo/odoo#248680
A technical issue preventing the build of the l10n_ae_faf module in Odoo Enterprise has been resolved. The fix adjusts a reference within the tax view to avoid a dependency on a related module, ensuring smoother operation for UAE accounting features.
Original PR description
the inherited tax view form was raising an error since ubl_cii_tax_category_code is in the view under the module account_edi_ubl_cii and this module is not in the resolved dependencies of l10n_ae_faf but is usually autoinstalled. to fix this we are changing the xpath to be something that doesn't need the dependency of the account_edi_ubl_cii but only account. runbot-239123 Forward-Port-Of: odoo/enterprise#116163
This update resolves a bug that prevented the balance from being displayed correctly when reconciling foreign currency invoices. Specifically, a problem with how the system handled multiple currency lines led to incorrect balance calculations and hidden balances. The fix ensures accurate balance display during reconciliation, regardless of currency selections.
Original PR description
### Issue: When reconciling an invoice in a foreign currency with multiple bank statement lines in the same foreign currency, the balance becomes hidden after selecting the second transaction…
### Issue: When reconciling an invoice in a foreign currency with multiple bank statement lines in the same foreign currency, the balance becomes hidden after selecting the second transaction Additionally, after selecting and unselecting a line with another currency, the balance can remain hidden even when no lines are selected ### Cause: In `changeInSelectedMoveLine(selectedLines),` when the currency differs from the company currency, `selectedLineCurrencies` is built as a simple mapped array This array may contain duplicate currencies, which should not prevent computing the balance but incorrectly impacts the logic that determines whether to display it There is no reason to block the sum of lines with the same currency When there is no selectedLines, the function returns early and doesn't unhide the balance ### Steps to reproduce: - Install `account_accountant` with demo data - Enable a foreign currency like EUR - Create and confirm 2 invoices (Customer: Acme Corporation, Currency: EUR, Add a line for 100€) - Go to the Dashboard, and select Bank - Create a new transaction (Label: Multi-currencies, Partner: Acme Corporation, Price: 500$) - Switch to the List View, and display the 2 columns `Foreign Currency` and `Amount in Currency` - Modify the line Multi-currencies (Foreign Currency: EUR, Amount in Currency: 300$) - Switch to the Kanban View and Reconcile the line Multi-currencies - Select your 2 invoices one by one Before the fix, after selecting the second invoice, the balance is displayed as `/` For the additional case: - Unselect all lines - Select a line in another currency (e.g., USD), then unselect it The balance remains hidden opw-6063366 Forward-Port-Of: odoo/enterprise#115101
This update resolves a bug where the color picker would unexpectedly close when users tried to change the color of icons within the HTML editor. The fix ensures that icons wrapped in styling elements are correctly handled, preventing the toolbar from closing prematurely and improving the user experience.
Original PR description
Problem: Trying to change the color of an icon causes the color picker to close when hovering over colors. Cause: When the icon (`span`) is wrapped inside a `font` element, the `toolbar_namespace_providers` for the icon return `false` because the `font` wrapper was not handled. As a result, the `namespace` becomes `undefined`, which causes the toolbar to close during selection changes. Solution: Handle cases where an icon is wrapped by styling elements (such as `font`) so the correct toolbar namespace is preserved. Steps to reproduce: - Insert a Font Awesome icon using `/media`. - Click on the icon to open the toolbar. - Try to apply a color or background color. - Notice the color picker closes instantly when hovering over colors. task-6109153 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258729
This update fixes an issue where the HTML editor's undo function sometimes restored the selection to the wrong position. The fix ensures the selection is 'staged' before deletion, allowing for accurate restoration during undo operations. This improves the user experience and prevents data inconsistencies.
Original PR description
Problem: In some cases, undo restores the selection to an incorrect position. Cause: The selection state was not staged before the deletion started, leading to an inconsistent selection being restored during undo. Solution: Stage the selection before performing the deletion to ensure it can be restored to the correct position. Steps to reproduce: - Go to To-Do → Create New. - Type something on the first line and press Enter. - Type something on the second line and apply styling to it. - Use the Up arrow key to move to the first line. - Remove a character. - Press Undo (Ctrl + Z). - Observe that the selection and toolbar appear on the second line. task-6142055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262896 Forward-Port-Of: odoo/odoo#260630
This update resolves an issue where the power button test in the HTML editor was unreliable due to timing differences. The fix ensures the test consistently triggers, preventing potential delays and ensuring proper functionality. This improves the stability of the HTML editor feature.
Original PR description
The previous fix [1] removed one animation frame too many because the first one after arow down is needed in order to trigger the hiding of the power buttons in the first place, otherwise the timer can have elapsed without an animation frame when the runbot is slow. Then, for the other ones, the animation frame must not be awaited, otherwise we risk having an animation frame when the runbot waited more than the debouce delay, as explained in [1]. runbot-242466 [1]: https://github.com/odoo/odoo/pull/259654 Forward-Port-Of: odoo/odoo#262929 Forward-Port-Of: odoo/odoo#262679
This update fixes an issue where long translated labels in product category configuration forms (like 'Reserve Packagings') would overlap with other fields, creating a cluttered and difficult-to-use layout. The fix allows radio labels to wrap correctly, ensuring a cleaner and more organized user experience, especially on smaller screens.
Original PR description
Steps to reproduce: - Go to Accounting > Configuration > Product Categories - Open the "Goods" category in a narrow enough form layout - Check the "Reserve Packagings" radio field in Ukrainian #### Issue: In configuration forms, `.o_form_label` is forced to `white-space: nowrap`. Since radio option labels also use `.o_form_label`, long translated labels cannot wrap and can overlap the neighboring valuation field area. #### Fix: Exclude `.form-check-label` from that rule so radio labels can wrap without changing the behavior of regular form labels. opw-6086700 <img width="1872" height="966" alt="image" src="https://github.com/user-attachments/assets/db5e5803-b5e7-4904-a036-8bdfbb5504fc" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261284
This update resolves an issue where the product carousel on the website would fail when displaying a large number of product variants. The change reverts a previous update that introduced this problem, ensuring a smoother and more reliable experience for users browsing our products. This improves the overall user experience and prevents potential errors.
Original PR description
This reverts commit 3bf17962a12581c0b96ece61428cb749c7780569. Steps to reproduce ================== - Install website_sale - Go to Website > eCommerce > Product Tags - Create a new record - Go to site > Homepage - Edit - Click on catalog - Click on the last block (with the dynamic content) - Click on it - Select the created tag in the sidebar - Disable the "Show variants" option => A traceback occurs: KeyError 'all_product_tag_ids' opw-6197201 Forward-Port-Of: odoo/odoo#263235
This update corrects a bug in the Mod 349 tax report that prevented it from showing vendor bills with amounts less than 1 Euro. The fix adjusts how the report filters data, ensuring accurate reporting of all transactions, regardless of their value. This ensures compliance and accurate financial reporting.
Original PR description
Steps to reproduce: - Install l10n_es_reports. - Create a company from France. - Create and post a vendor bill for that company with an amount of 0.12 EUR. - Open the Tax Return report and switch to the Mod 349 report for the current year. - Click the 0.12 EUR amount line. Observed: - The journal items view opens with no records. Cause: - `_get_modelo349_audit_aml_domain()` calls `_custom_modelo349_common()`, which filters lines using: `float_compare(result_dict['value'], 0, precision_rounding=2)` - Using `precision_rounding=2` treats values below 1 as equal to 0, so those lines are excluded from the audit domain. Fix: - Replace `precision_rounding` with `precision_digits=2` so values are only treated as zero when they are effectively below 0.01. opw-6134339 Forward-Port-Of: odoo/enterprise#116102 Forward-Port-Of: odoo/enterprise#114776
This update fixes an issue where Purchase Orders generated from Point of Sale orders weren't including the custom attribute information. The code has been updated to automatically compute the description for POS orders, ensuring that Purchase Orders accurately reflect the product's attributes. This improves the accuracy of procurement processes.
Original PR description
Step to reproduce: - install "purchase_stock" and "point_of_sale" - Create a product attribute -> Display Type: Radio Button -> Variant Creation Mode: Never create variants -> Add two attribute…
Step to reproduce: - install "purchase_stock" and "point_of_sale" - Create a product attribute -> Display Type: Radio Button -> Variant Creation Mode: Never create variants -> Add two attribute values, ensuring that one includes a 'is_custom' field. - Create a product and assign this attribute to it. - Enable the MTO (Make To Order) route. - Add a vendor to the product. - Create and confirm a POS order for this product. (add text for custom attr) - Observe that a Purchase Order is generated automatically. Observation: - the PO does not have that text in description Cause: - After commit [1], `description_picking` became a computed field. - Previously, its value (`product_description_variants`) was set in `_prepare_procurement_values`. - That key is no longer used for this purpose, so the information is not propagated and the data is lost. https://github.com/odoo/odoo/blob/71b1267e54fd53fb283c41b579756c72e393cbfa/addons/stock/models/stock_rule.py#L341-L343 above code is removed following that commit Fix: - The description is computed for pos orders [1] https://github.com/odoo/odoo/commit/6b2d3af64a076654e04494972acc4c42d7c54bd8 opw-5969378 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262503 Forward-Port-Of: odoo/odoo#253231
This update resolves an issue where the system wasn't correctly tracking monetary values with currency information. The fix ensures that all monetary properties now accurately record the currency associated with them, preventing errors and improving the reliability of financial tracking within Odoo. This ensures accurate reporting and data integrity for financial transactions.
Original PR description
`_create_tracking_values_property` was missing `currency_field` in `col_info` when processing monetary-type properties, causing a traceback. Fixed by injecting it from the property definition dict. task-6175845 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#262353
This update fixes a bug where changes to time off types within an allocation didn't always trigger validation errors, potentially leading to incorrect overtime calculations. The update now includes a check during both creation and modification of allocations to ensure sufficient overtime hours are available when changing the time off type, preventing inaccurate adjustments.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install `hr_holidays_attendance` module 2. Time off > configurations > Time off types 3. Create new time off type as follows: * Set…
Steps to reproduce: ------------------------------------- 1. Install `hr_holidays_attendance` module 2. Time off > configurations > Time off types 3. Create new time off type as follows: * Set Approval to Approved by time off officer * Change Take time off In to Hours 4. Save the record and enable Deduct Extra Hours 5. Go to Management > Allocations 6. Create new allocation with created time off type and select 'Audrey Peterson' in Employee 7. Try to save record > Validation Error > Discard changes 8. Change time off type to Paid Time Off > add 'Audrey Peterson' > save record 9. Now change Time Off type to Created Time Off type > Save Observation: ------------------------------------- No Validation Error raised, as the employee and time off type are still the same as they were during creating allocation. Issue: ------------------------------------- In `write` method, there was no any check for the employee if it has enough overtime hours when we change Time off type (`holiday_status_id`) to overtime-deductible leave type. Check was only present in the `create` method: https://github.com/odoo/odoo/blob/a95c639db68f98351c7162de58a041a1c0ee13c5/addons/hr_holidays_attendance/models/hr_leave_allocation.py#L39-L49 Solution: ------------------------------------- 1. Create new function for validate overtime and to create adjustment 2. Added that function to `create` as well as in `write` method 3. Prevents creating a duplicate overtime adjustment for an allocation that already has one opw-5937185 Forward-Port-Of: odoo/odoo#262716 Forward-Port-Of: odoo/odoo#249793
This update resolves an error that occurred when users attempted to merge mailing lists within the Email Marketing module. The issue stemmed from an incorrect record ID being used during the merging process. This fix ensures that the merge function operates reliably and prevents the warning message from appearing.
Original PR description
Currently, error occurs when user tries to merge a mailing list. Steps to replicate: - Install `mass_mailing`. - Open Email Marketing > Mailing Lists > Mailing Lists and switch to list view. - Select…
Currently, error occurs when user tries to merge a mailing list.
Steps to replicate:
- Install `mass_mailing`.
- Open Email Marketing > Mailing Lists > Mailing Lists and switch to list view.
- Select a single record, and from cog menu Click merge.
Warning:
```
odoo.http: Record does not exist or has been deleted.
(Record: mailing.list(6,), User: 2)
```
Cause:
- When the user clicks Merge, the `mailing.list.merge` form opens and `default_get()` is executed to populate defaults.
- At this point, `src_list_ids` is added to res in a structured format like `[(6, 0, ids)]` [1].
- Later, `res.get('src_list_ids')` is reused and assigned to `src_list_ids` [2].
- Taking `src_list_ids[0]` [3] returns `(6, 0, ids)`, and its first element `6` is incorrectly treated as a record ID and assigned to `dest_list_id`.
- This leads to an attempt to access a record with ID 6, which does not exist, causing the error.
Solution:
- Instead of reading `src_list_ids` back from `res` after it has been set, we initialize and reuse local variables (src_list_ids, active_ids) at the beginning of the method.
- This avoids relying on transformed values in `res` and ensures that `dest_list_id` is computed using a consistent and valid list record IDs.
[1]: https://github.com/odoo/odoo/blob/21877c09863222a237fe99334787ac46935dcca4/addons/mass_mailing/wizard/mailing_list_merge.py#L20-L22
[2]: https://github.com/odoo/odoo/blob/21877c09863222a237fe99334787ac46935dcca4/addons/mass_mailing/wizard/mailing_list_merge.py#L24
[3]: https://github.com/odoo/odoo/blob/21877c09863222a237fe99334787ac46935dcca4/addons/mass_mailing/wizard/mailing_list_merge.py#L26
sentry-7447326420
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#262466This update fixes a technical issue that caused a traceback error when users replaced images within the HTML editor. The fix ensures the system correctly identifies the relevant block element during image deletion, preventing errors and improving stability. This enhances the overall user experience when working with images in Odoo.
Original PR description
Steps to Reproduce: - Go to the website - Add an image and set it to center alignment - Copy the image - Paste it into a To-Do note - Replace the image - Click the Delete button Description of the issue: - A traceback error occurs when deleting the image after replacement. Cause: - When an image has display: block, the closestBlock function returns the image element itself as the closest block. However, this causes an issue, After the image is deleted, fillEmpty is called on this closestBlock, which refers to an image that has already been removed from the dom resulting in a traceback. Solution: - Instead of finding the image's closestBlock directly, find the closestBlock of its parent element. - This ensures the correct block is found even when the image has display:block. task-6171827 Forward-Port-Of: odoo/odoo#262217
This update fixes an issue where invoices for recurring subscriptions weren't accurately reflecting the subscription's billing period. The fix ensures invoices align correctly with the subscription's defined period (e.g., 3 months), preventing incomplete monthly or yearly invoices. This improves billing accuracy and customer satisfaction.
Original PR description
## Issue When creating an invoice for a sale order with a recurring plan using a `billing_period_value` >= 1 and aligning, that value is not taken into account, and the invoice only covers one unit…
## Issue
When creating an invoice for a sale order with a recurring plan using a `billing_period_value` >= 1 and aligning, that value is not taken into account, and the invoice only covers one unit of time (week/month/year).
## Steps to reproduce
1. Install *Subscriptions* (`sale_subscription`)
2. Create a Recurring Plan RP:
- *Billing Period*: 6 Months
- *Align to Period Start*: Checked
3. Create a Subscription Product P
4. Create a Subscription SO:
- Any Customer
- Recurring Plan RP
- Product P (any quantity/price)
5. Confirm the SO and create the invoice
6. **In the line of the SO, only one month is covered by the invoice. If we generate the next invoice, only one month will be covered as well.**
## Cause
Since https://github.com/odoo/enterprise/commit/45f28f6c288f5213a4e29c816ec68d2c3966b55f, the `next_date_1st` is evaluated by taking the last day of the month/year and incrementing it by one day, to reach the first day of the next month/year.
https://github.com/odoo/enterprise/blob/2d2056766441157dc45ebc37b677841c44e5c513/sale_subscription/models/sale_order_line.py#L377-L382
This is inaccurate when working with recurring plan which are not monthly/yearly, as it will always set the `next_date_1st` to the next month/year, without taking in account the `billing_period_value`.
## Fix
There are two ways to align dates to the period start. Given a subscription starting on January 15, with a billing period of 3 months, we could:
1. Invoice from January 15 to January 31, then from February 1 to April 30. This aligns the invoice to the closest month, then apply the 3 months period for the next invoices.
2. Invoice from January 15 to March 31, then from April 1 to June 30. This applies most of the billing period for the first invoice, while still aligning it to the start of the month, then apply the 3 months period normally for the next invoices.
**Here, we chose the second option** to avoid making the code more complex and keep the diff minimal.
opw-6151530
Forward-Port-Of: odoo/enterprise#115830This update fixes an issue where manually adjusting lot quantities during manufacturing order production resulted in incorrect consumption. The fix ensures that the specified lot quantity is accurately used, preventing discrepancies in inventory tracking. This improves the reliability of production planning and reduces potential errors.
Original PR description
**Issue** Lots manually indicated on stock move lines can be overridden when producing a Manufacturing Order. **Steps to reproduce** - Create a storable product P tracked by lot - Create two lots for…
**Issue** Lots manually indicated on stock move lines can be overridden when producing a Manufacturing Order. **Steps to reproduce** - Create a storable product P tracked by lot - Create two lots for product P with 2 units each - Create a MO for a product consuming two units P and confirm it - On the raw move, manually set 1 unit for each lot - Click on "Produce All" - Check the move line associated to the product P -> 2 units associated to the first lot consumed instead of 1 unit each **Cause** While producing: https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/mrp/models/mrp_production.py#L2109-L2110 It sets the quantities: https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/mrp/models/mrp_production.py#L2246 This calls `_set_quantity_done_prepare_vals` with a qty of 2: https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/stock/models/stock_move.py#L2264 which will, for each move line: - Take the quantity indicated by move line: https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/stock/models/stock_move.py#L2274 https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/stock/models/stock_move.py#L2296-L2297 - Then take all the available quantity left for the lot associated to the move line: https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/stock/models/stock_move.py#L2302-L2309 https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/stock/models/stock_move.py#L2326-L2327 Instead of first taking all the quantity indicated by the move line, before checking available quantity **Solution** Assume that raw move lines being created in mrp without changing the producing quantity are manually created opw-5946439 Forward-Port-Of: odoo/odoo#260518 Forward-Port-Of: odoo/odoo#257258
This update fixes an issue where payment reminders weren't being sent to newly duplicated subscriptions. The root cause was a shared 'last_reminder_date' field, preventing reminders from being triggered for the copy. The fix sets this field to 'false' for duplicate subscriptions, ensuring reminders are sent as expected.
Original PR description
Payment reminders are not sent to the duplicate of a subscription when a reminder has already been sent for the original subscription Steps to reproduce: 1. Install Subscriptions 2. Create a new…
Payment reminders are not sent to the duplicate of a subscription when a reminder has already been sent for the original subscription Steps to reproduce: 1. Install Subscriptions 2. Create a new subscription for customer Acme Corporation with product Office Cleaning Service (SUB), a Monthly recurring plan and in the Other Info tab, set the subscription Start Date to one week ago 3. Confirm the subscription 4. Go to Scheduled Actions and run the action "Sale Subscription: send reminder for subscriptions with no token" 5. Go back to the previously created subscription (see that a reminder email has been added in the chatter) 6. Duplicate the subscription and confirm the duplicate 7. Run the action "Sale Subscription: send reminder for subscriptions with no token" again 8. There are no reminder for the duplicate subscription Issue: The copy of a subscription uses the same `last_reminder_date`, preventing payment reminders to be sent here https://github.com/odoo/enterprise/blob/5a2ab62254cd5f684a3b1a0d7c0001b888c70d08/sale_subscription/models/sale_order.py#L2114-L2120 Solution: Set `copy=False` on the field `last_reminder_date` opw-6167356 Forward-Port-Of: odoo/enterprise#116335 Forward-Port-Of: odoo/enterprise#115509
This update corrects an issue in stock valuation reports where fully consumed lots were incorrectly showing zero value. The fix ensures the report accurately reflects inventory levels at a specific date, regardless of current stock quantities. This improves the reliability of financial reporting within Odoo.
Original PR description
When using the stock valuation report with 'inventory at date', lot valuated AVCO products whose lots had been fully consumed were showing zero unit cost and total value, despite having correct quantities at given dates.
The root cause was a ('product_qty', '!=', 0) domain filter in product.product._compute_value that evaluates product_qty at the current date, not at to_date. Lots fully consumed after were excluded from the recordset as they have no quantities left.
After this fix: adding the 'not at_date' will make sure that when fetching the inventory at date, we do so regardless of their current stock level.
OPW: 6115200
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#262008This update corrects a display issue with the Folder report layout when using right-to-left (RTL) languages like Arabic. The change ensures that the report title's SVG image is mirrored, resolving a broken appearance that occurred when the system was configured for RTL. This improves the user experience for international users.
Original PR description
Steps: - Enable rtlcss - Install an RTL language (e.g Arabic or change english direction to rtl) - Enable RTL language - Go to settings - Configure report layout document - Select Folder type - Try to print an invoice - The header title style is broken the svg image used in the title should be mirrored to be displayed correctly on RTL opw-6140277 Forward-Port-Of: odoo/odoo#262830
This update fixes a discrepancy in how the dashboard displays On-Time Delivery (OTD) rates. Previously, the dashboard incorrectly showed 0% OTD due to a strict date comparison. Now, the dashboard aligns with the partner's OTD calculation, which uses a date-only comparison, ensuring accurate reporting.
Original PR description
# Setup For easiness of testing : have no purchase order in your dashboard # How to reproduce - Create a Purchase Order for Vendor X and with Product Y - Click on Confirm Order -> Receive -> Validate…
# Setup For easiness of testing : have no purchase order in your dashboard # How to reproduce - Create a Purchase Order for Vendor X and with Product Y - Click on Confirm Order -> Receive -> Validate - Go back to the dashboard # The problem The displayed OTD is 0%, but when you go to the Vendor X form view and check his On-time Rate, it is 100% # Cause The computation for the On-time rate in the dashboard uses the whole datetime value, so if there is even a second of difference between `effective_date` and `date_planned`, the PO is not counted as on-time : https://github.com/odoo/odoo/blob/942cbbbf243ff28f84fdaa40ed73b6572e0032a6/addons/purchase_stock/models/purchase_order.py#L253 That is not the case for the partner On-time rate computation, where we round the datetime value to the date value : https://github.com/odoo/odoo/blob/942cbbbf243ff28f84fdaa40ed73b6572e0032a6/addons/purchase_stock/models/res_partner.py#L57 opw-6128510 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260384
This update prevents errors that occurred when loading paid orders with loyalty cards whose programs had been archived. Previously, the system would fail to open the partner list, disrupting the loyalty program functionality. This fix ensures smooth processing of paid orders with loyalty cards, improving the customer experience.
Original PR description
Before this commit, when loading a paid order with a loyalty card that its program had been archived, an error was raised when opening the partner list due to the missing program. opw-6166079 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261501
This update fixes a minor calculation error related to the reversal of Quebec Sales Tax (QST) in the Swiss payroll module. The change ensures accurate tax reporting, aligning with Swiss tax regulations and improving the reliability of payroll data. This update was prompted by a previous issue and is a routine maintenance fix.
Original PR description
opw 6133391 Fix for the source tax correction following PR #114463 Forward-Port-Of: odoo/enterprise#115585
This update resolves an issue where child contacts linked to Spanish companies were incorrectly flagged as companies themselves. The change ensures that only companies with their own commercial entities are recognized as such, improving data accuracy for Spanish tax reporting. This prevents misclassification and ensures compliance.
Original PR description
Problem: When l10n_es is installed, child contacts of a Spanish company are incorrectly considered as companies as well. Steps to reproduce: 1. Install l10n_es 2. Create a company with a Spanish VAT number (e.g. ESA12345678) 3. Create a child contact under that company 4. The child contact will be incorrectly considered as a company Cause: If l10n_es is installed, any partner with a Spanish VAT number is considered as a company. Since child contacts share the same VAT as their company, they would be considered as companies as well, which is not correct. However, a partner should only be considered as a company if they are their own commercial entity. https://github.com/odoo/odoo/blob/e6bd6b106c376336594edd868c09505032008ac1/odoo/addons/base/models/res_partner.py#L819 Similar to https://github.com/odoo/enterprise/commit/3536cdd opw-6132064
This pull request updates the core spreadsheet component, addressing several minor bugs and improving chart rendering. Specifically, it fixes issues with chart visibility, error messages in charts, and improves the overall stability and performance of the spreadsheet functionality. This ensures a smoother and more reliable experience for users creating and viewing charts.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fcdbaa36ed [FIX] chart: ensure chart values remain visible (remove clipping) [Task:…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fcdbaa36ed [FIX] chart: ensure chart values remain visible (remove clipping) [Task: 5993132](https://www.odoo.com/odoo/2328/tasks/5993132) https://github.com/odoo/o-spreadsheet/commit/b4e8b1ffcb [FIX] Gauge chart: error message in the side panel [Task: 6179300](https://www.odoo.com/odoo/2328/tasks/6179300) https://github.com/odoo/o-spreadsheet/commit/dfe8311831 [FIX] grid overlay: unhide buttons visibility [Task: 6127335](https://www.odoo.com/odoo/2328/tasks/6127335) https://github.com/odoo/o-spreadsheet/commit/47fa9a64c9 [REF] lint: enforce braces for all control statements [Task: 6140827](https://www.odoo.com/odoo/2328/tasks/6140827) https://github.com/odoo/o-spreadsheet/commit/ac35849ad1 [FIX] package: add missing types dependency [Task: 6140820](https://www.odoo.com/odoo/2328/tasks/6140820) https://github.com/odoo/o-spreadsheet/commit/3784e2be25 [FIX] pivot: `getPivotCellFromPosition` will throw on invalid formula [Task: 6109696](https://www.odoo.com/odoo/2328/tasks/6109696) https://github.com/odoo/o-spreadsheet/commit/faf0440efd [FIX] format: don't humanize scientific format [Task: 6068353](https://www.odoo.com/odoo/2328/tasks/6068353) https://github.com/odoo/o-spreadsheet/commit/ff534e926a [FIX] zoom: scorecard chart rendering with zoom [Task: 6072348](https://www.odoo.com/odoo/2328/tasks/6072348) https://github.com/odoo/o-spreadsheet/commit/b307b467b9 [FIX] Data filter : clear/select all button [Task: 6075166](https://www.odoo.com/odoo/2328/tasks/6075166) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update fixes an issue where purchase orders merged with related sale orders didn't correctly link all associated sale orders. The change ensures that all sale orders linked to a merged purchase order are properly connected, streamlining the process and preventing data discrepancies. This improves the accuracy of purchase order tracking and reporting.
Original PR description
### Steps to reproduce: - In the settings Enable: "Multi-Steps Routes" - Unarchive the MTO route - Create a storable product with MTO enabled and a set vendor - Create and confirm two sale orders for 1 unit of that product - Go to the purchase order view, select both PO > Actions > Merge RFQs #### > The un-cancelled Purchase order is only linked to one of the 2 SOs ### Cause of the issue: The sale orders linked to a PO in this flow are linked through the stock references: https://github.com/odoo/odoo/blob/fb79136e259e2b56746afda64b2536bddf6755c0/addons/sale_purchase/models/purchase_order.py#L60-L61 https://github.com/odoo/odoo/blob/fb79136e259e2b56746afda64b2536bddf6755c0/addons/sale_purchase_stock/models/purchase_order.py#L14-L15 However, the references of the PO merged to the present one are not merged as well. opw-6150636 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261578
This update automatically refreshes the payment screen when the PIS payment status changes. Previously, users had to manually refresh the page to see the updated status, leading to delays. This improvement streamlines the payment process and ensures accurate payment information is always displayed.
Original PR description
There were some buttons like sign payment that were visible even when the PIS status was signed which needed a manual page refresh for the update to reflect, now it's reflected automatically on the PIS status change. task-5417365 Forward-Port-Of: odoo/enterprise#114299
This update resolves a crash that occurred when preparing future online food delivery orders. The issue stemmed from an incorrect date format, which has now been corrected to ensure the preparation display functions reliably for all delivery orders.
Original PR description
### In this commit: Fixes a crash in the preparation display when handling future online food delivery orders. The issue was caused by an invalid delivery time format. This is resolved by properly passing the delivery time as a Number in the utils. Task-[5960176](https://www.odoo.com/odoo/project/1737/tasks/5960176) Forward-Port-Of: odoo/enterprise#108298
This update fixes a visual inconsistency in the shop page's filmstrip. Previously, the filmstrip height varied depending on whether an image was present. Now, the filmstrip maintains a consistent height regardless, and a placeholder image is displayed when no image is available. This ensures a more polished and professional appearance for customers.
Original PR description
This commit fixes two issues regarding the filmstrip in the /shop page : - Adding a minimum height to the elements of the `default` and `bordered` designs, so that their heights remain consistent…
This commit fixes two issues regarding the filmstrip in the /shop page : - Adding a minimum height to the elements of the `default` and `bordered` designs, so that their heights remain consistent whether they contain an image or not. - Display a placeholder image for the `images` filmstrip if empty. task-5491550 | Before | After | |--------|--------| | <img width="613" height="103" alt="image" src="https://github.com/user-attachments/assets/852ef2ce-6265-4622-9e30-4e8112bbf264" /> | <img width="618" height="114" alt="image" src="https://github.com/user-attachments/assets/0933c0c2-a669-4236-9148-a25226214ce6" /> | | <img width="718" height="164" alt="image" src="https://github.com/user-attachments/assets/ac1b8d91-44fa-4ce0-8ddb-beba271a2423" /> | <img width="718" height="164" alt="image" src="https://github.com/user-attachments/assets/8676e9f9-074b-40e9-a75b-76561437c081" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255543
This update corrects a technical issue where a duplicate email snippet template was introduced. The fix removes this redundant template, ensuring consistent and accurate email formatting within the mass mailing functionality. This improves the reliability of email campaigns.
Original PR description
A duplicated snippet template was introduced in a prior [commit], and is removed through this commit. [commit]: https://github.com/odoo/odoo/commit/81e43a8dd70ffa2746740f7bd5904007e76d2260 task-5959046 Forward-Port-Of: odoo/odoo#262980
This update corrects a bug that prevented proper expense payroll calculations when using non-standard debit accounts. The fix ensures the system correctly identifies the company associated with the payslip, resolving a warning and enabling accurate expense reporting. This improves payroll processing reliability.
Original PR description
### Steps to reproduce: - Create a salary rule for expenses - Set a debit account for this rule with a type other than 'Payable' - Create an expense for an employee and report it for the next payslip…
### Steps to reproduce: - Create a salary rule for expenses - Set a debit account for this rule with a type other than 'Payable' - Create an expense for an employee and report it for the next payslip - Create a payslip for this employee - Notice an error is shown that 'No debit account for Expenses rules' - Go to the expense rules and change the debit account type to 'Payable' - Go back to the payslip and notice the error didn't disappear and a new warning showed up ### Cause: When changing the type of an account_debit that is linked to an expense rule we will try to recompute the errors and issues but the env company will be set to be equal to the default company of the env user. So if this company is different than the payslips' company it won't be able to fetch the correct account_debit in the rule ### Fix: Access account_debit and journal_id using with_company() to make sure we get the correct company-related value. opw-6013423 Forward-Port-Of: odoo/enterprise#114878
This update fixes an issue where multiple documents with the same subject wouldn't all be included in the downloaded zip file. The change ensures that all signed documents with identical subjects are correctly bundled together, preventing data loss during downloads. This improves the reliability of the Sign app for users.
Original PR description
## Issue In the *Sign* app, when attempting to download multiple documents with similar subjects, only one document appears in the resulting zip file. ## Steps to reproduce 1. Install *Sign* (`sign`)…
## Issue
In the *Sign* app, when attempting to download multiple documents with similar subjects, only one document appears in the resulting zip file.
## Steps to reproduce
1. Install *Sign* (`sign`)
2. Sign a same template twice, using the same subject S1. This gives us Documents D1 an D2.
3. (Optionally), sign the same template a third time, using a different subject S2, creating document D3.
4. In Sign > Documents, select the 2 (3) signed documents and click *Download*.
5. **In the resulting zip file, there's one folder S1 containing a single pdf document (D1) (and one folder S2 containing D3). Document D2 is missing from the zip file.**
## Cause
When generating the zip file, the path used for each document is `{subject}/{doc_name}`.
https://github.com/odoo/enterprise/blob/863abc99469c12acdebcab05788d566c370bb46f/sign/controllers/main.py#L276-L286
Neither of this attribute are unique, which means that two signed documents with the same name and subject can be downloaded simultaneously, but will then overwrite each other.
## Fix
Before version 18.3, the zip file would contain folders named with the (unique) request id, which would consistently make them distinct from one another. This behavior was changed by https://github.com/odoo/enterprise/commit/4254542e8fb4ce3b2b9b46c624d86f7fcac8df7b to use the `sign_request.subject` instead. This commit adds the `request.id` after the subject to keep the clarity of the subject, and add the uniqueness of the id.
opw-6143128
Forward-Port-Of: odoo/enterprise#116179
Forward-Port-Of: odoo/enterprise#116013This update ensures that website appointments, when linked to an Outlook calendar, are consistently synchronized with the Outlook calendar through the regular cron job. Previously, a timing issue prevented these appointments from being created, leading to missed calendar events. This change resolves the synchronization problem, improving the reliability of appointment scheduling.
Original PR description
Before this change, the "Outlook: synchronization" cron would not create calendar events on Outlook's side in _sync_odoo2microsoft due to a filter for calendar.events written to within 5 minutes of…
Before this change, the "Outlook: synchronization" cron would not create calendar events on Outlook's side in _sync_odoo2microsoft due to a filter for calendar.events written to within 5 minutes of microsoft_last_sync_date, when _sync_data is not called when a calendar.event is created, such as through website.appointment. microsoft_last_sync_date was set to datetime.now() at the beginning of _sync_microsoft_calendar, which would skip a large period of time between the last sync and now, if the only syncs were triggered through cron, and not _sync_data (by opening the calendar app). To reproduce, Default "Outlook: synchronization" is ran every 12 hours. 1) Calendar event is synced through "Outlook: synchronization" cron at 00:00, setting microsoft_last_sync_date to 00:00 2) A website.appointment is created for a resource with Outlook calendar sync enabled any time between 00:01 - 11:54. 3) "Outlook: synchronization" runs again at 12:00, which sets microsoft_last_sync_date to 12:00, and filters out calendar.events based on their write_dates in _extend_microsoft_domain that need syncing outside of 11:55 to 12:00. This change removes setting of microsoft_last_sync_date at the beginning of _sync_microsoft_calendar, where we need to use the old value before setting it at the end of _sync_microsoft_calendar. opw-5212908 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262136 Forward-Port-Of: odoo/odoo#245964
This update resolves an issue preventing correct submission of Dutch VAT returns (SBR) when using multiple companies within a single VAT unit. The fix ensures that only the relevant closing entry is used, avoiding a system error and improving the reliability of the SBR process. This impacts users managing multi-branch businesses with consolidated VAT reporting.
Original PR description
In a multi-company/multi-branch setup where multiple entities form a single VAT unit, Odoo generates a closing entry for each branch/company during the tax closing process. When attempting to submit the Dutch VAT return via Digipoort (SBR), the wizard gathers these entries via `closing_move_ids`. However, the code subsequently tries to set the resulting recordset as `closing_entry_id` on `l10n_nl_reports.sbr.status.service`, which results in a traceback: `ValueError: Expected singleton: account.move(id1, id2, ...)` This occurs because `closing_entry_id` is a `Many2one` which requires a single record (singleton), but the system provides all closing moves from the tax group. This commit fixes the issue by filtering the closing moves to only target the one associated with the return company, ensuring a singleton is passed to the message posting logic. Issue introduced by: 647699eeb4b8a1cc37ca074fa57844871c5086c1 opw-6106081 Forward-Port-Of: odoo/enterprise#116237
This update corrects an issue where free FSM services with prepaid invoicing were not appearing on invoices. The change ensures that these services, linked to FSM tasks, are now correctly included when generating invoices, resolving a previous error that prevented proper invoicing.
Original PR description
Changed _compute_qty_to_invoice in industry_fsm_sale, SaleOrderLine to no longer set qty_to_invoice to 0 for free services with prepaid invoicing. Previous changes seem intended for goods. Steps to reproduce: - Create service product with 0 price, prepaid invoice policy, creates FSM task - Create/Confirm sales order with created product - Attempt to create invoice, get 0 quantity to invoice error Current Behavior: Free services linked to FSM tasks do not appear on invoices due to compute 0 qty_to_invoice Expected Behavior: Prepaid Invoice Services linked to FSM tasks appear on invoices. Other invoice policies can be invoiced through the generated sales order lines (timesheets, delivered quantity, etc.) opw-6047992 Forward-Port-Of: odoo/enterprise#116413 Forward-Port-Of: odoo/enterprise#113718
This update fixes a discrepancy in how invoiced quantities are calculated on Sales Orders, specifically when dealing with packaged products. Previously, rounding differences led to an inaccurate Invoiced Quantity. The change ensures consistent rounding, aligning Delivered and Invoiced Quantities for accurate invoicing.
Original PR description
Steps to reproduce: --- - Install the `Sales and Inventory` modules. - Enable `Units of Measure & Packagings` from Settings. - Go to `Sales > Configuration > Products > Units & Packagings.` - Create…
Steps to reproduce: --- - Install the `Sales and Inventory` modules. - Enable `Units of Measure & Packagings` from Settings. - Go to `Sales > Configuration > Products > Units & Packagings.` - Create a new unit > Pack of 12 with quantity 12 and unit Units. - Create a new product > enable Track Inventory, set Quantity On Hand to 100, and in the `sales` tab, under `Upsell & Cross-Sell`, set `packaging` as` Pack of 12`. - Create a Sales Order > add the product and set the quantity to 3, with a unit Pack of 12. - Confirm the order and validate the delivery. - Create and confirm the invoice. - Return `1 unit` from the delivery and validate it. - From the invoice, create a `credit note` with quantity 1 unit and confirm it. - Go back to the Sales Order. Issue: --- - On the Sales Order: `Delivered Quantity` shows` 2.92` while `Invoiced Quantity` shows `2.91`. Root cause: --- - At [1] & [2], in `_compute_qty_invoiced`, the `_compute_quantity` method is called without specifying a `rounding_method`, so it defaults to `UP` (1/12 rounded to 0.09), while `_compute_qty_delivered` explicitly uses `HALF-UP` (1/12 rounded to 0.08), leading to inconsistent rounding. Solution: --- - In this PR, the same rounding method (HALF-UP) is applied when computing the invoiced quantity to ensure consistency with the delivered quantity. [1]https://github.com/odoo/odoo/blob/64c1f1a7d3b24ca613d0b29a2412f1094fea08d9/addons/sale/models/sale_order_line.py#L896-L912 [2]https://github.com/odoo/odoo/blob/64c1f1a7d3b24ca613d0b29a2412f1094fea08d9/addons/sale_stock/models/sale_order_line.py#L193-L209 opw-6073690 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263011 Forward-Port-Of: odoo/odoo#258024
This update resolves an issue where users without full project access were unable to view project details. The fix adds a temporary `sudo()` call to grant access, ensuring timesheet users can correctly see the project information they're assigned to. This improves usability for all users.
Original PR description
### Steps to reproduce: - Download 'Sales', 'Project', 'Employees', and 'Timesheets' apps - Create an employee and link them to a user that doesn't have any access rights except to 'Timesheets =…
### Steps to reproduce:
- Download 'Sales', 'Project', 'Employees', and 'Timesheets' apps
- Create an employee and link them to a user that doesn't have any access rights except to 'Timesheets = User:own timesheets'
- In Sales, create a service with the following specifications:
- 'Create on Order' is 'Project'
- 'Invoicing Policy' is 'Based on Timesheets'
- Create a new quotation that requests this service and click 'Confirm'
- In 'Project' > 'Configuration' > 'Projects', choose the newly created project and add a line that has the new employee in the 'Invoicing' tab
- Log in as that employee and go to 'Timesheets'
- Create a new entry for the newly created project
- Click the project's name
> Access Error: You are not allowed to access 'Collaborators in project shared'
(project.collaborator) records.
### Cause of Issue:
This happens because the user doesn't have access rights to the 'Project' app, hence they don't have access to `collaborator_ids` which are retrieved here. https://github.com/odoo/odoo/blob/3dfb2849acd899ccbf4048f2a15dff3c74aed96d/addons/project/models/project_project.py#L1113-L1120
### Fix:
Since an access to the 'Projects' app isn't necessary to view a project assigned to you, `sudo()` is necessary for hr_timesheet users without project access rights.
opw-6074833
Forward-Port-Of: odoo/odoo#262884
Forward-Port-Of: odoo/odoo#258370This update fixes a misleading notification that appeared when users discarded replies in the message history. Previously, closing the composer triggered a 'Message posted' notification even without sending a message. Now, notifications are only displayed when a message is actually sent, improving clarity and accuracy for users.
Original PR description
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When replying to messages from the History (Inbox) view, opening the full composer and…
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When replying to messages from the History (Inbox) view, opening the full composer and discarding it could incorrectly trigger a toast notification indicating that a message was posted. This behavior is misleading, as no message is actually sent when the composer is discarded. **Current behavior before PR:** ---------------------------------------------- - Replying to a message from History opens the full composer - Discarding the full composer closes the dialog normally - A “Message posted” toast is shown even though no message was sent - Notification logic depends on dialog close behavior, leading to incorrect triggers **Desired behavior after PR is merged:** ---------------------------------------------- - Discarding the full composer does not show any notification - Notifications are only shown when a message is actually sent Task-5431682 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262004 Forward-Port-Of: odoo/odoo#241705
This update fixes an issue where child contact zipcodes were incorrectly overriding manually entered zipcodes, even when a parent contact had a defined city and zipcode. The change ensures child contact zipcodes now accurately reflect the parent's city zipcode, improving address consistency and data accuracy.
Original PR description
Currently, when a res.parter is given a parent, base_address_extended runs _onchange_city_id. This sees the city change and alters the zipcode to match the city's zipcode. However, this field can be…
Currently, when a res.parter is given a parent, base_address_extended runs _onchange_city_id. This sees the city change and alters the zipcode to match the city's zipcode. However, this field can be manually altered to differ from the city's zipcode. Thus, when a parent has a city, the zipcode will override the manually entered zipcode for a child contact. This commit solves this by checking for the parent's zipcode before blindly setting it to the city's zipcode. Steps to reproduce: 1. Install `base_address_extended` 2. Enable "Enforce Cities" on a country `(res.country)` 3. Add a city to that country with a zipcode of 123 4. Create a new contact (parent) and select the configured country 5. Select the city (the zipcode will fill in from the city's zipcode) 6. Overwrite the zipcode with 456 7. Save the contact (parent) 8. Create a new contact (child) 9. Set the company to the parent contact and save 10. The zipcode of the child will be the city's zip (123), not the parents' zip (456), thus the addresses will be different, and the child contact type will be 'other' opw-6131280 closes #262651
This update fixes an issue where sales tax reports for 7% and 5% Maltese taxes were incorrectly displayed with negative values and grouped under the 18% line. The fix ensures that all tax reports accurately reflect the correct tax amounts for each invoice, improving the accuracy of financial reporting.
Original PR description
### Issue before this commit: Sales taxes at 7% and 5% were incorrectly mapped to the same tax report tags as the 18% sales taxes, causing them to be reported under the 'Taxable Goods/Services at…
### Issue before this commit: Sales taxes at 7% and 5% were incorrectly mapped to the same tax report tags as the 18% sales taxes, causing them to be reported under the 'Taxable Goods/Services at 18%' line. In addition, the 7% and 5% report lines displayed negative amounts instead of positive ones. ### Steps to reproduce the issue: 1. Install l10n_mt 2. Create invoices using 18%, 7%, 5% taxes 3. Go to Accounting > Reporting > Tax Report 4. See the amounts for Taxable Goods/Services at 18% is negative and all the invoices are reported into the Taxable Goods/Services at 18% even if the tax applied to the invoice is 5% or 7% ### Cause of the issue: An automatic script (https://github.com/odoo/odoo/pull/225252) missed to invert sign of formulas for the 7% and 5% lines, so their values were displayed with the wrong sign. Moreover it is assigned to the 7% and 5% Malta sales taxes the III.1_base and III.1_tax tags, which belong to the 18% tax report line. ### Reason to introduce the fix: The tag mapping must match the tax report structure so that 18%, 7%, and 5% sales taxes are reported in their respective lines. The report formulas for the 7% and 5% lines must also use the proper sign convention to display positive amounts consistently. opw-6015509 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254894
This update ensures that if a Stripe terminal payment capture fails, the payment status in Odoo POS is correctly marked as 'retry' instead of 'done'. Previously, a successful authorization could lead to a misleading 'done' status, hiding payment issues. This prevents inaccurate reporting and ensures payments are properly tracked.
Original PR description
Before this commit, a Stripe terminal payment could still be marked as `done` even if the capture step failed. This happens when the card authorization succeeds, `processPayment` returns a payment…
Before this commit, a Stripe terminal payment could still be marked as `done` even if the capture step failed.
This happens when the card authorization succeeds, `processPayment` returns a payment intent, but the subsequent `stripe_capture_payment` RPC fails and `capturePaymentStripe()` returns `false`. The capture flow did not guard that return value and still fell through to `line.set_payment_status("done")`.
In practice, this can happen for example if the Odoo server cannot resolve `api.stripe.com` while capturing the payment intent. Stripe then keeps the payment in `requires_capture`, while the POS line is still synced as paid.
Guard the failed capture path and stop the flow before marking the line as done. In that case, the payment line is put back to `retry` so the failure is visible in the POS instead of silently creating a paid, uncaptured payment.
opw-6075384
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#261521This update removes a redundant process in our account management system that was previously used to handle electronic invoices from Belgium (BE). Previously, the system was uncertain about which invoice format to use, leading to unnecessary calculations. Now that we consistently use the 0208 format for BE invoices, this fix streamlines the process and improves efficiency.
Original PR description
When adding peppol, we didn't know if we needed to use the 9925:BE or 0208. Therefore, we switched between them if the endpoint was not found. This has no more use today as we use 0208. opw-5976574 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261307 Forward-Port-Of: odoo/odoo#258297
This update adds a new upgrade script that automatically adds the latest UNSPSC codes to the Odoo database. Previously, these codes could only be added during initial module installation, creating a delay in updating existing data. This change ensures that Odoo always reflects the most current UNSPSC classifications.
Original PR description
**Problem:** Periodically, the UNSPSC codes may be updated and they must be added to existing databases. Normally this is done by module update, however, since there are thousands of UNSPSC codes, a CSV imported via SQL is used instead of XML files. This import is only implemented on module install and not module update, so there is no way to update the UNSPSC codes in existing databases. **Solution:** An upgrade script based on the post-init hook has been added, which will add the new codes to the database, if any. Note that: - The version of this upgrade script should be bumped any time the codes list is updated. - Existing records will not be updated opw-5943366 Forward-Port-Of: odoo/enterprise#116063 Forward-Port-Of: odoo/enterprise#112652
This update fixes an error in how Odoo calculates product costs when using FIFO stock accounting and lot-based valuation, particularly in complex branch setups. The fix prevents incorrect cost calculations (potentially leading to inflated values) by ensuring the correct lot price is used, improving inventory accuracy.
Original PR description
Databases that are configured to have products be evaluated by lot and FIFO can experience weird behavior when the product's cost or `standard_price` is updated. The current code doesn't account for the fact that we allow users to dip into negative quantities and there aren't enough safeguards against this. This leads to the following bug that I found: The FIFO algorithm can't be calculated when there is no quantity. Odoo uses a fallback cost whenever quantity is less than zero, but this is incorrect when the product is evaluated by lots. Current behavior would calculate the fallback based on the product's standard price instead of the lot's standard price, leading to self-propagating calculation errors (e.g. cost going up to the trillions) Videos of the bug: Bug: ( Lot value defaults back to the product's standard price ) https://drive.google.com/file/d/1gUtjzdLpjeJts8HcxbTZ9MG4bSjRYmeT/view?usp=drive_link Related tickets: opw-6011189 Forward-Port-Of: odoo/odoo#256113
This update enhances the Point of Sale system's ability to track and record errors. By mirroring critical IndexedDB errors to local storage, even if the primary error logging system is temporarily unavailable, important troubleshooting information is preserved. This will help our support team quickly diagnose and resolve issues impacting the POS experience.
Original PR description
Add a `persistToStorage` flag to `logPosMessage` that mirrors critical IndexedDB errors to `localStorage["pos_idb_errors"]` in addition to the posLogger. This ensures error traces are preserved even when the IndexedDB daemon itself is unavailable. opw-6150816 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263093