Daily updates from Odoo
Friday, March 28, 2025
41 changes · 18.0
New functionality added to Odoo
Adds a dedicated Libro Giornale report for Italian accounting, making it easier to produce a structured, chronologically ordered journal report with debit and credit totals. The report includes required dates and PDF generation details to support Italian compliance needs.
Original PR description
- Introduces a custom report handler for the Italian "Libro Giornale" variant of journal report. - Fetches and processes journal entry data, including date, journal name, labels, debit, credit, and account details. - Builds an SQL query to retrieve and structure accounting transactions in chronological order. - Groups journal entries, formats columns, and calculates total debit and credit values. - Ensures proper date formatting (`YYYY-MM-DD`) and structured report output for compliance with Italian accounting standards. - Adds the report generation date to the PDF upon extraction - I have added display_type in the query of journal report to use it in sorting task-4502158
Enhancements to existing features
The Documents app is now included in the standard web code style checks. This helps maintain consistent quality and makes future updates easier to review and maintain, with no direct change for end users.
Original PR description
Purpose ======= We want to enforce the web style in the Documents app, therefor we enable the eslint configuration for the application.
Resolved issues and error corrections
This fix prevents manufacturing orders from switching to the wrong final product variant when a bill of materials is updated. It protects production accuracy by keeping the selected product variant stable during BoM refreshes, especially in customized workflows.
Original PR description
### Issue: Tldr: If a field A depends on an other computed field B and if the value of A is used in the computation of the field B, the ORM will consider that the value of A is false (or empty record…
### Issue:
Tldr: If a field A depends on an other computed field B and if the value of A is used in the computation of the field B, the ORM will consider that the value of A is false (or empty record set) in the computation of B.
On the `mrp.production` model, the `product_tmpl_id` is a related non stored field:
https://github.com/odoo/odoo/blob/4cb362fcc3c2ba2489ef1de7c20c9a4fd8921ab8/addons/mrp/models/mrp_production.py#L82 depending on the `product_id` field. This means that if we need to access the value of that field, we will first need to access the value of the `product_id` field. However, the `product_id` field is a computed field: https://github.com/odoo/odoo/blob/4cb362fcc3c2ba2489ef1de7c20c9a4fd8921ab8/addons/mrp/models/mrp_production.py#L62-L66 So that if its value is marked as dirty in the cache at the moment we try to access the value of the `product_tmpl_id` of the we will launch a call of its compute method. This is problematic because the 'related' that launched the compute is used inside the compute method: https://github.com/odoo/odoo/blob/4cb362fcc3c2ba2489ef1de7c20c9a4fd8921ab8/addons/mrp/models/mrp_production.py#L397 This is probelmatic because it would technically lead to an infinite recursion loop. So, to avoid any of these situation, when the computation of the `mrp.production.product_tmpl_id` has been started the filed has been marked as protected and is used as "False" in each of the subsequent computations:
https://github.com/odoo/odoo/blob/4cb362fcc3c2ba2489ef1de7c20c9a4fd8921ab8/odoo/fields.py#L1295-L1299 In particular, we will compute the `product_id` of the mrp.production considering that the `product_tmpl_id` is false and we will therefore set a wrong value on the bom.
### Steps to reproduce:
Using studio, you can create a set of fields linked to the 'product.template' and `mrp.production` models and an automated rule that will force a situation where the above situation will be triggered with the following flow:
- Create a product with 2 variants.
- Create a bom for the template of these products and one bom line:
- 1 x COMP
- Create and confirm an MO for 1 unit of variant 2.
- Change the bom line to 2 x COMP.
#### > Return to the MO and click on update bom, the `product_id` of the MO has been altered to variant 1.
The details of the set up are the following:
1. Create a new field with the following configuration: Name: x_studio_1 Model: Product Field Type: many2one Stored: True Related Model: res.partner
2. Create a new field with the following configuration: Name: x_studio_2 Model: Manufacturing Order Field Type: char Stored: True Readonly: True Related Field Definition: product_tmpl_id.x_studio_1.name
3. Create an automation rule on the manufacturing order model that trigger on save and that trigger's the action of updating the record responsible to Joel willis.
### Fix:
We should not rely on the related field `mrp.production.product_tmpl_id` inside the compute method of the `mrp.production.product_id`. Particularly since we can access this value using the direct path to this value. This avoids any recursion issue.
opw-4658754
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prCreating a new Point of Sale payment method no longer fails when the company setup is missing a default outstanding payment account. This prevents an unexpected error during configuration and helps businesses complete POS setup more reliably.
Original PR description
Fix issue when trying to create new payment methods and no `account_journal_payment_debit_account_id` exist in the current chart template.
Calling `_get_outstanding_account('inbound')` on an empty `account.payment` was failing because `self.env.company` was not properly set. This issue only occurred when the outstanding account was not found in the chart template, leading to an exception.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix ensures accounting records update their sequence gap status correctly when multiple users or processes post entries at the same time. It prevents records from being incorrectly marked as having a numbering gap after posting, improving accuracy in financial records.
Original PR description
The computed fields were not correctly triggered when there was some concurrency issues. One of those fields is `made_sequence_gap`, which was then set to `True` after being posted because it was still holding the value of when it wasn't posted.
When a bill of materials is created from a manufacturing order linked to a project, it now keeps that project information automatically. This prevents missing project links and helps teams keep manufacturing and project tracking aligned.
Original PR description
Backport of this commit: https://github.com/odoo/odoo/commit/eaf2ea619644c29c9fbccd5410db77053b82d64d
Steps to reproduce the bug:
- Create a storable product “P1”
- Create a MO:
- Product to produce: P1
- Project: set any project
- Save
- Click on the “Generate BoM” button or try to create a BoM directly from the BoM field
- Open the BoM
Problem:
The project field is not inherited from the MO.
opw-4669529Time Off allocations can now be opened and created even when the current company has no employee linked to the logged-in user. The system uses a safe fallback for hours-per-day calculations, preventing confusing error screens for managers.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes the HTML editor’s automated tests more reliable by targeting the correct page elements and safely handling images that are still loading when an editor component closes. It helps prevent false test failures and tracebacks in Odoo’s validation system, improving release confidence without changing user-facing behavior.
Original PR description
**Problem**: Tests introduced in commit [`b7a63f7d60494c65889ba6ce3fa18847a0abbb62`] (https://github.com/odoo/odoo/commit/b7a63f7d60494c65889ba6ce3fa18847a0abbb62) are failing on **runbot** due to improper element selection and handling of image loading when the component is destroyed. **Solution**: - Ensure the test properly targets the correct elements. - Handle cases where the image is still loading while the component is destroyed, preventing potential tracebacks. **Steps to Reproduce**: 1. Run the test suite on runbot. 2. Observe test failures related to incorrect element selection or missing image references due to component destruction. **opw-4607020** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue in the HTML editor where pasting different list types together could convert them all to the same style. This helps users preserve formatting, such as standard lists and checklists, when copying content into Odoo.
Original PR description
**Problem**:
When pasting lists of different types (`UL` and `CL`), a new list is created with all `li` elements matching the type of the first list.
**Solution**:
If `nodeToInsert` is a list element, use its `mode` to create the list instead of using the `mode` of
the container.
**Steps to reproduce**:
1. Copy two lists: ```html <ul><li>1</li></ul> <ul class="o_checklist"><li>1</li><li>2</li><li>3</li></ul> ```
2. Paste into the editor.
Issue: The second list is pasted using the same
type as the first list.
opw-4670379
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prPurchase orders now show the total amount in the company currency when the order uses a different currency. This restores a previously available view so buyers can quickly compare purchase costs without manual currency conversion.
Original PR description
## Versions: 18.0 Reset feature from saas-17.4 ## Issue: In saas-17.4, the user could see the Purchase Order total amount in the selected company's currency if it differs from the PO's currency. This doesn't exist in 18 anymore. ## Steps to reproduce: Ensure there are at least 2 currencies available in the `Settings` app - Create a new purchase order; - Change the selected `Currency` for any other; - Look at the subtotal part that does not include the equivalent amount in the company's currency. ## Cause: The saas-17.4 feature has not been forwarded entirely and an important part of it is missing. The company currency total amount is not updated correctly ## Fix: Forward-port the complete feature of https://github.com/odoo/odoo/commit/202af7c12a768005df3bd97f595ead0a4c4c02b9 Include the fix from https://github.com/odoo/odoo/pull/186464/commits/7467d68309c039c50e39b6ec0b8645ef7ff42ad4 opw-4416711
This fix prevents the Point of Sale from crashing when calculating prices for combo items with a zero original total. It keeps the order summary usable in edge cases and avoids showing invalid price values.
Original PR description
there was a divide by zero in the price unit computation when the originalTotal is 0 which lead to infinity price unit and a crash in the POS order summary result. opw-4650315
Customers using in-store pickup will no longer see an incorrect product availability error after completing payment. This prevents a confusing checkout interruption when the item was available before the order was confirmed.
Original PR description
Steps: 1. Create a Storable product and update quantity to 1 2. Buy the product in shop and go to checkout page 3. Select pick up in store and pay Issue: - "Some products are not available in the selected store" error on payment validate page Cause: - `_get_shop_payment_error` check for product's availability on shop_payment and shop_payment_validate page where in former stock is available but in later since the order is confirmed stock is unavailable Fix: - `_get_shop_payment_error` will only check for stock related errors on confirmed orders opw-4647225 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures the quantity field remains visible when creating manufacturing orders, even at high browser zoom levels or different screen resolutions. Users can reliably enter production quantities without the unit of measure field pushing it out of view.
Original PR description
Steps to reproduce: - Install manfacturing app - Activate the Unit of measure setting in the mrp settings - Go to create new manafcturing order and start zooming in with different screen resolutions…
Steps to reproduce: - Install manfacturing app - Activate the Unit of measure setting in the mrp settings - Go to create new manafcturing order and start zooming in with different screen resolutions Problem: The product_qty field starts disappearing on zooming in and this makes the user can't enter a value in it. This happens because the width:auto applied to the field of the uom beside it that takes as much space as possible so the product_qty field disappears. opw-4560205 Description of the issue/feature this PR addresses: Current behavior before PR: the product_qty field in the creating manufacturing order disappears while zooming in with different screen resolutions. Desired behavior after PR is merged: The product_qty field is appearing on all zoom levels from 100 to 400 and tested on all screen resolutions in the settings of display in Ubuntu **Before**:  **After**:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue in Point of Sale loyalty where adding balance to a physical gift card failed if no expiry date was selected. Gift card balances now apply correctly, and any selected expiry date is saved properly.
Original PR description
Steps to reproduce: -------------------------- - Install the pos_loyalty module. - Open register & add physical giftcard to the cart. - On configuration popup don't set the expiry date & click on Add Balance. Issue: -------- - There is a tb instead of adding the balance to giftcard. - The selected expiration date is not set on the backend. Cause: --------- - Trying to serialize null expiration date value. - Not set from the correct variable. Fix: ----- - Expiration date should be serialized only if selected. - Correctly mapped the value of expiration date from right variable. Task: 4664094
This fixes a Point of Sale issue where enabling restricted categories without choosing any allowed categories caused products to be loaded but not shown. Products now remain visible in that setup, preventing unnecessary disruption for cashiers and store operations.
Original PR description
Before this commit, when restricted categories were enabled but no category was added to the allowed list, all products were loaded but none were displayed due to a recent code change. opw-4680158 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now blocks users from starting another module install, upgrade, or uninstall while one is already in progress. This reduces the risk of failed operations, registry loading errors, and database issues caused by concurrent changes.
Original PR description
Before this commit, a user could start a module installation, abandon the loading page due to impatience, and attempt to start another installation. This could lead to various errors, such as…
Before this commit, a user could start a module installation, abandon the loading page due to impatience, and attempt to start another installation. This could lead to various errors, such as `SERIALIZATION_FAILURE`, "Failed to load registry," or even a broken database. Module operations (install/upgrade/uninstall) are executed in multiple transactions: 1. Dependency Check & State Update: - A transaction checks module dependencies, determines which modules need updating, and marks them as 'to install', 'to upgrade', or 'to remove'. 2. Registry Reload & Module Update: - The registry is reloaded, and modules are updated one by one in their own transactions, changing their states to 'installed' or 'uninstalled'. This commit introduces two additional checks in step (1): a. If any module is already in an updating state, raise a `UserError` to prevent concurrent module operations in step (2). b. If the transaction fails to acquire a `SELECT ... FOR UPDATE` lock on all `ir_module_module` records, raise a `UserError`, as this indicates another concurrent operation of step (1) has either acquired the lock or already modified some module states and committed. related PR for backport https://github.com/odoo/odoo/pull/203667 abandoned PR https://github.com/odoo/odoo/pull/125586 These checks ensure proper concurrency control, preventing concurrent module operations Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves several user-facing issues, including incorrect sales order line amounts on mobile, saved Stripe cards failing on later purchases, and browser slowdowns when multiple tabs are open. It also improves wording, event registration reliability, follower display names, and translation coverage, making daily Odoo use more accurate and stable.
Original PR description
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
Returns for exchange on purchase receipts now create the replacement transfer right away instead of triggering a new purchase process. This reduces user confusion, avoids unnecessary vendor or route setup errors, and keeps the original receipt, return, and exchange linked to the purchase order when applicable.
Original PR description
Currently, a return for exchange made on an incoming transfer (receipt) creates a procurement, which usually ends up with a purchase of the exchanged products. After the "Return" popup is closed, the…
Currently, a return for exchange made on an incoming transfer (receipt) creates a procurement, which usually ends up with a purchase of the exchanged products. After the "Return" popup is closed, the exchange transfer is not created; instead, Odoo creates a PO that needs to be approved first in order to create the exchange transfer. That is a bit confusing for the users, who might expect the exchange to be created immediately. Also, the procurement process requires the product to have a "Buy" route enabled (in "Inventory" tab) and at least one vendor configured in the "Purchase" tab. Without this configuration, the return for exchange process shows an error message. After this commit, a return for exchange made on a receipt will ignore the procurement process, and instead it will create the exchange picking immediately. That way users will see the exchange transfer immediately after closing the "Return" popup. Also, all 3 transfers (original, return, exchange) will be linked to the initial PO (if a PO was created). Additionally, the exchange picking will be shown as a return of the return picking. Task: 4453571
Updating the allocation amount on a time-off allocation record without an assigned employee no longer triggers an error. This prevents interruptions for HR users when reviewing or editing incomplete allocation records.
Original PR description
An error occurs when updating the **Allocation** field in a time-off allocation record that does not have an assigned employee. **Steps to reproduce:** - Install the `hr_holidays` module. - Navigate to `Time Off > Management > Allocations` (form view). - Remove the employee and modify the **Allocation** field. - Observe the error. **Error:** KeyError - False The issue occurs because `_compute_number_of_hours_display` depends on `employee_id._get_hours_per_day(allocation.date_from)`, when `employee_id` is empty, attempting to access `self.id` at [1] results in a key error. [1] - https://github.com/odoo/odoo/blob/51097d978a698fa94d021ca72bcd69c24d9c768b/addons/hr_holidays/models/hr_employee.py#L349 This commit ensures that the computation of `number_of_hours_display` checks if `employee_id` exists before proceeding. If no employee is assigned, it will be skipped. Sentry - 6423050142
The barcode app now shows product expiration dates immediately when a package is scanned. This helps warehouse users see shelf-life information right away without needing to open or save the line first.
Original PR description
When scanning a package, its content is added on the view, but we don't display the expiration date. To reproduce the issue: 1. In Settings, enable: - Packages - Expiration dates 2. Create a product - Tracked by lot - Expiration date 3. Update its quantity - Lot L - Package P - Quantity > 0 4. Set an expiration date on L 5. Open a new delivery through the barcode app 6. Scan P "Error": a line is added for the product, with its lot L, but we don't display the expiration date. Once the line is saved (for instance, through the edit button), we will finally display it. This is because we don't provide any information about the expiration date when converting the package quant into relevant data. OPW-4516410
Fixed a subscription invoicing issue where eligible subscriptions could remain marked as being processed, preventing payments from being completed and blocking future invoices. The scheduled billing process now counts only subscriptions that can actually be invoiced, so recurring billing continues reliably.
Original PR description
Issue: ======== There is an issue during the generation of invoices from subscription that causes the is_invoice_cron field on the sale order to remain `True`. This prevents the processing of…
Issue: ======== There is an issue during the generation of invoices from subscription that causes the is_invoice_cron field on the sale order to remain `True`. This prevents the processing of transactions and, as a result, does not mark the invoices as paid. Furthermore, this issue blocks the generation of subsequent invoices. To reproduce: ============= 1. Create a subscription that does not require initial client payment, (can generate an invoice on the next invoice date). 2. Create 30 other subscriptions (equal to the batch size value) that cannot generate invoice until the client has made a payment. 3. Run the scheduled action “Sale Subscription: generate recurring invoices and payments.” 4. You will notice that the first Sale Order remains to “is_invoice_cron” as True Problem: ======== the condition to trigger the cron to invoice subscriptions is based on the number of subscriptions that can be invoiced in a batch. But we are taking all the subscriptions while it should be only the subscriptions that can be invoiced. Solution: ========= filter the subscriptions that can be invoiced before checking the condition to trigger the cron to invoice subscriptions. opw-4559250
Users can once again download folders from the Documents interface, including in spreadsheet-related document views. The update also improves test coverage and supporting data behavior so folder navigation and details panels work more reliably.
Original PR description
Somehow we lost the frontend interface to the backend-ready downloading of folder. Also fix testing helpers to make the details panel usable without crashing, and to make non-root folders appear as children of their parents in the search panel. While we're here, linting test code introduced in this version allows to be ready to limit diffs in future fixes & FW ports. Task-4677814
This fix prevents purchase orders from incorrectly creating rental sales orders during inter-company transactions. It avoids a crash when users open the generated sales order, helping cross-company purchase and sales workflows complete reliably.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have purchase & sale_stock_renting installed; 2. create a 2nd company; 3. enable inter-company transactions for Sale/Purchase Orders for both; 4. enable…
Versions -------- - 18.0+ Steps ----- 1. Have purchase & sale_stock_renting installed; 2. create a 2nd company; 3. enable inter-company transactions for Sale/Purchase Orders for both; 4. enable Warehouse storage locations; 5. enable multi-step routes; 5. enable dropshipping; 6. enable rental transfers; 7. create a dropshipping route assigned to the 1st company; 8. create a purchasable, rental product, tracked by quantity; 9. add dropship route to its operations; 10. add 2nd company as vendor; 11. create a rental order with the product; 12. confirm the rental order; 13. go to the generated purchase order via the smart button; 14. confirm the purchase order; 15. switch to the 2nd company; 16. try to open the generated sale order. Issue ----- > TypeError: '>' not supported between instances of 'datetime.datetime' and 'bool' Cause ----- On confirming the purchase order, the sale order it generates gets created as a rental order, due to the `in_rental_app` context value being set. When trying to open the rental order, it attempts to compute the quantity available for the tracked rental products during the rental period. The rental order was generated based on purchase order data, which lacks any kind of rental information, hence the rental order doesn't have a rental period set. The lack of rental dates is what causes the error when trying to partition the lines based on rental period. Solution -------- When creating a sale order via a purchase order, pass the `in_rental_app=False` context value to ensure it won't be created as a rental order. opw-4583210
The Helpdesk return button now only appears when there is an actual related delivery to return. This prevents users from hitting an error when a ticket is linked only to a sales order, improving reliability for support teams.
Original PR description
### Issue : The return button was visible even when the customer had only a sale order. Clicking it caused a traceback. ### Steps to Reproduce: 1. Install `helpdesk_stock`. 2. Create a Sale Order…
### Issue :
The return button was visible even when the customer had only a sale order. Clicking it caused a traceback.
### Steps to Reproduce:
1. Install `helpdesk_stock`.
2. Create a Sale Order (SOL) with a storable product.
3. Create a helpdesk ticket.
4. Save the ticket.
5. Click on the return button.
### Fix:
The return button now appears only when a related delivery (picking) exists.
### Technical Details:
We used `commercial_partner_id` to search for pickings, ensuring that pickings from child partners are also considered, so checking `partners_in_sale` is unnecessary.
The `partners_in_sale` condition is removed because it incorrectly returned when no picking existed.
### Test Scenarios:
1. Create a product.
2. Create a sale order:
- Customer: `Azure Interior`
- Delivery address: `Azure Interior, Brandon Freeman`
3. Confirm the sale order.
4. Create a helpdesk ticket with customer `Azure Interior`
and check the return button.
5. Validate the picking.
6. Create a ticket for `Azure Interior` and check the return button.
7. Create a ticket for `Azure Interior, Brandon Freeman` and check the return button.
In this commit: [commit](https://github.com/odoo/odoo/commit/57b8b2487def43a1b9c461c0fa4eb02200b5c1ef),
the condition `if wizard.picking_id` was removed, which led to the traceback.
task: 4522134Miscellaneous changes
LATAM task 1299 / Adhoc Task 47453 --- ### Description of the issue/feature this PR addresses: Update the Argentinean Legal Invoice Report regarding ARCA's new legal requirement: Tax breakdown on B2C. This only affects Factura B and related documents. Now, we will show an extra tax detail section with the title "Fiscal Transparency Regime for the Final Consumer (Law 27.743)" and show the details of the taxes grouped by type: VAT Taxes and Other National Internal Indirect Taxes. For m
Original PR description
LATAM task 1299 / Adhoc Task 47453 --- ### Description of the issue/feature this PR addresses: Update the Argentinean Legal Invoice Report regarding ARCA's new legal requirement: Tax breakdown on…
LATAM task 1299 / Adhoc Task 47453 --- ### Description of the issue/feature this PR addresses: Update the Argentinean Legal Invoice Report regarding ARCA's new legal requirement: Tax breakdown on B2C. This only affects Factura B and related documents. Now, we will show an extra tax detail section with the title "Fiscal Transparency Regime for the Final Consumer (Law 27.743)" and show the details of the taxes grouped by type: VAT Taxes and Other National Internal Indirect Taxes. For more info about the RG, go to https://servicioscf.afip.gob.ar/publico/sitio/contenido/novedad/ver.aspx?id=4448 ### Current behavior before PR: Old version of legal PDF report; we are not showing vat taxes, and summarying internal and national taxes on the tax totals  ### Desired behavior after PR is merged: We add a special table at the end of the report (ask required in the RG) with the detail of the taxes group by type: vat taxes, and other internal and national taxes  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203374 Forward-Port-Of: odoo/odoo#201257
Description of the issue this commit addresses: The Italian localization currently doesn't allow users to export the periodic tax report to xml format. This feature is missing. --- Desired behavior after the commit is merged: The Italian monthly tax report has a button that allows the user to export the report to an xml format. --- Enterprise PR: https://github.com/odoo/enterprise/pull/80009 task-4507942 --- I confirm I have signed the CLA and read the PR guidelines at w
Original PR description
Description of the issue this commit addresses: The Italian localization currently doesn't allow users to export the periodic tax report to xml format. This feature is missing. --- Desired behavior after the commit is merged: The Italian monthly tax report has a button that allows the user to export the report to an xml format. --- Enterprise PR: https://github.com/odoo/enterprise/pull/80009 task-4507942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195948
Required upgrade to sdk 5.65.0 or higher: https://docs.adyen.com/online-payments/release-notes/?Web+Components%2FDrop-in=&title%5B0%5D=Web+Components%2FDrop-in#releaseNote=2024-05-27-web-componentsdrop-in-5.65.0 Upgrade sdk to 6.9.0 and api to 71 task-4649327 Forward-Port-Of: odoo/odoo#202498
Original PR description
Required upgrade to sdk 5.65.0 or higher: https://docs.adyen.com/online-payments/release-notes/?Web+Components%2FDrop-in=&title%5B0%5D=Web+Components%2FDrop-in#releaseNote=2024-05-27-web-componentsdrop-in-5.65.0 Upgrade sdk to 6.9.0 and api to 71 task-4649327 Forward-Port-Of: odoo/odoo#202498
Before this commit, customers were facing problems during the first synchronization related to the abundance of invitations sent through Outlook from previously created events in Odoo side. This should not happen because most of the time it is not useful synchronizing events that were already created before starting the synchronization with Outlook (from feedbacks discussed with customers and internally). After this commit, we no longer synchronize events that were created before the first sy
Original PR description
Before this commit, customers were facing problems during the first synchronization related to the abundance of invitations sent through Outlook from previously created events in Odoo side. This should not happen because most of the time it is not useful synchronizing events that were already created before starting the synchronization with Outlook (from feedbacks discussed with customers and internally). After this commit, we no longer synchronize events that were created before the first synchronization of any user in a database if we don't find any token created in it (i.e. if no user synchronized its Odoo Calendar with Outlook before this improvement). In case of any user already have synchronized its calendar with Outlook, we won't change the synchronization behavior (since the biggest part of the invitations were already sent). task-4294884 Forward-Port-Of: odoo/odoo#200957 Forward-Port-Of: odoo/odoo#185911
…ring orders **Issue:** When using a language other than English and setting the Manufacturing Order name field to read-only via Studio, the name is not automatically converted into a unique value. As a result, after saving the first order (which defaults to "New"), any subsequent order creation fails with an error, stating that the name must be unique. **Steps to Reproduce:** 1. Install the Manufacturing app. 2. Install the Studio app. 3. Change the language to one other than English.
Original PR description
…ring orders **Issue:** When using a language other than English and setting the Manufacturing Order name field to read-only via Studio, the name is not automatically converted into a unique value.…
…ring orders
**Issue:**
When using a language other than English and setting the Manufacturing Order name field to read-only via Studio, the name is not automatically converted into a unique value. As a result, after saving the first order (which defaults to "New"), any subsequent order creation fails with an error, stating that the name must be unique.
**Steps to Reproduce:**
1. Install the Manufacturing app.
2. Install the Studio app.
3. Change the language to one other than English.
4. Navigate to Manufacturing > Operations > Manufacturing Orders.
5. Create a new Manufacturing Order.
6. Open Studio and set the name field to read-only.
7. Save the first Manufacturing Order with the default name ("New").
8. Attempt to create another Manufacturing Order.
9. Error: The system prevents saving due to a duplicate name.
Expected Behavior: The Manufacturing Order name should be automatically updated to a unique value upon saving, regardless of the selected language.
Actual Behavior: The name remains "New", but it is not translated when using a different language. Since the name field is set to read-only, the system does not trigger the automatic conversion to a unique name. As a result, when attempting to create another order, the system detects a duplicate and prevents saving due to a name conflict.
**Root Cause**
The system always sets the default name to "New" in English. However, the automatic name conversion process expects a translated name before updating it to a unique value. Because "New" remains untranslated, the system does not recognize it as a placeholder and fails to convert it.
**Fix**
Modify the default value of the name field to use a localized translation like it’s done for the sale order https://github.com/odoo/odoo/blob/7bc38562f1988ba15525c04168e30c06a8f1d33c/addons/sale/models/sale_order.py#L55. This ensures that the default name is translated according to the user's language, allowing the system to properly detect and replace it with a unique value when saving.
Opw-4553109
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#200138Steps to reproduce: - Create a non-storable product (e.g. a service) - Create a new RFQ - Add that product to a PO line Issue: The forecast icon is visible, even though the product is non-storable and the forecast doesn't make any sense. 73170f0 was a bit too optimistic on the invisible condition, as it needs a field directly on the model to be able to check these clauses. So we add a related as it's done for other. opw-4672513 --- I confirm I have signed the CLA and read the PR
Original PR description
Steps to reproduce: - Create a non-storable product (e.g. a service) - Create a new RFQ - Add that product to a PO line Issue: The forecast icon is visible, even though the product is non-storable and the forecast doesn't make any sense. 73170f0 was a bit too optimistic on the invisible condition, as it needs a field directly on the model to be able to check these clauses. So we add a related as it's done for other. opw-4672513 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203545
An incorrect date being represented (14/11/2007 is displayed as 20/07/1114) on the payment field. The date was parsed two times with the format of the user's language, while the first parse should be based on the current format of the database. To reproduce: - Change user language to Spanish or French. - Register a payment for an invoice with a payment date between October 1st and December 31st, from 2001 to 2012. - "Paid on 20/07/1114" appears. Ticket [link](https://www.odoo.com/odoo/
Original PR description
An incorrect date being represented (14/11/2007 is displayed as 20/07/1114) on the payment field. The date was parsed two times with the format of the user's language, while the first parse should be based on the current format of the database. To reproduce: - Change user language to Spanish or French. - Register a payment for an invoice with a payment date between October 1st and December 31st, from 2001 to 2012. - "Paid on 20/07/1114" appears. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4486653) opw-4486653 Forward-Port-Of: odoo/odoo#203535 Forward-Port-Of: odoo/odoo#202258
### Issue: The community runs of the test: `test_portal_subcontractor_record_production_with_dropship` fail since the field `backorder_ids` of the mrp.production model is part of the `stock_barcode_mrp` module (part of the entreprise repo). runbot-build-error-159951 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203654
Original PR description
### Issue: The community runs of the test: `test_portal_subcontractor_record_production_with_dropship` fail since the field `backorder_ids` of the mrp.production model is part of the `stock_barcode_mrp` module (part of the entreprise repo). runbot-build-error-159951 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203654
The CSS of global filters in dashboard was broken if there was too many filters or if a filter was too tall (e.g. relation filter with many options). This commit fixes those issues. Now the filters are wrapped in multiple lines if there are too many filters. That mean that we have to define a fixed width for the filters, otherwise the filters won't be aligned over multiple lines and will be ugly. The commit also adds max-height and overflow on the filters to avoid the filters being too tall.
Original PR description
The CSS of global filters in dashboard was broken if there was too many filters or if a filter was too tall (e.g. relation filter with many options). This commit fixes those issues. Now the filters…
The CSS of global filters in dashboard was broken if there was too many filters or if a filter was too tall (e.g. relation filter with many options). This commit fixes those issues. Now the filters are wrapped in multiple lines if there are too many filters. That mean that we have to define a fixed width for the filters, otherwise the filters won't be aligned over multiple lines and will be ugly. The commit also adds max-height and overflow on the filters to avoid the filters being too tall. It also changes the style of the `Select period...` option to be more placeholder-like. Note: the same fix cannot easily be done in 16.0, because there the date picker isn't a popover there, this adding `overflow` to the CSS breaks it. Task: [4624108](https://www.odoo.com/web#id=4624108&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) 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#201391
The E-invoicing is mandatory in Jordan, and most of the users need it. So, it's simpler if they have it already installed when they install the base module. task-4669464 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203266
Original PR description
The E-invoicing is mandatory in Jordan, and most of the users need it. So, it's simpler if they have it already installed when they install the base module. task-4669464 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203266
Amazon SP-API is dropping support for the `POST_INVENTORY_AVAILABILITY_DATA` feed type. This was previously used in Odoo to synchronize the stock level with Amazon. This commit upgrades the feed api to use the new `JSON_LISTINGS_FEED` as a replacement. This new feed needs new informations that were not stored previously. Since this is a fix targeting stable versions of Odoo, it was decided to store this new inforamtion as a json dictionary in the `amazon.offer.amazon_feed_ref` field.
Original PR description
Amazon SP-API is dropping support for the `POST_INVENTORY_AVAILABILITY_DATA` feed type. This was previously used in Odoo to synchronize the stock level with Amazon. This commit upgrades the feed api to use the new `JSON_LISTINGS_FEED` as a replacement. This new feed needs new informations that were not stored previously. Since this is a fix targeting stable versions of Odoo, it was decided to store this new inforamtion as a json dictionary in the `amazon.offer.amazon_feed_ref` field. task-3820591 Forward-Port-Of: odoo/enterprise#82317 Forward-Port-Of: odoo/enterprise#78897
Issue ===== Scanning a product while beeing in the stock move line Barcode form view or in the quand Barcode form view can cause a traceback and the impossibility to exit a Barcode operation. How to reproduce ================ 1. Create two products with a barcode; 2. Open the Barcode app and create an operation; 3. Scan a product then click on the edit button to open the form view; 4. Update the product quantity field; 5. While still in the form view, scan another barcode -> You can s
Original PR description
Issue ===== Scanning a product while beeing in the stock move line Barcode form view or in the quand Barcode form view can cause a traceback and the impossibility to exit a Barcode operation. How to…
Issue ===== Scanning a product while beeing in the stock move line Barcode form view or in the quand Barcode form view can cause a traceback and the impossibility to exit a Barcode operation. How to reproduce ================ 1. Create two products with a barcode; 2. Open the Barcode app and create an operation; 3. Scan a product then click on the edit button to open the form view; 4. Update the product quantity field; 5. While still in the form view, scan another barcode -> You can see the quantity was reset; 6. Update again the quantity and save; 7. Try to exit the operation -> Bim badaboum, traceback 💥! Cause of the issue ================== When a barcode is scanned, the app doesn't check where is the current state and process the barcode anyway which lead to strange behavior and inconsistencies between the current lines and the lines to save. Solution ======== Disable the scan while somewhere else that in the barcode line view. Miscellaneous ============= Remove an old forgotten `console.warn` 😬 [OPW-4567723](https://www.odoo.com/odoo/project/49/tasks/4567723) Forward-Port-Of: odoo/enterprise#82029 Forward-Port-Of: odoo/enterprise#81512
Installing stock_barcode without base_import installed results in errors in the assets when loading `ImportBlockUI`. This occurs because `stock_barcode` requires a component from `base_import` but does not explicitly declare it as a dependency. opw-4613302 Forward-Port-Of: odoo/enterprise#81368
Original PR description
Installing stock_barcode without base_import installed results in errors in the assets when loading `ImportBlockUI`. This occurs because `stock_barcode` requires a component from `base_import` but does not explicitly declare it as a dependency. opw-4613302 Forward-Port-Of: odoo/enterprise#81368
The list of approvers is computed based on the selected category for the approval request. Before the fix, the list would keep previous approvers when changing the category. This could lead to issues where users could add themselves as approvers on unauthorized categories. Steps to reproduce: - Create an approval request category (c1) with yourself as approver. - Create another approval request category (c2) with someone else as approver. - Create a request with category c1 and change to c
Original PR description
The list of approvers is computed based on the selected category for the approval request. Before the fix, the list would keep previous approvers when changing the category. This could lead to issues where users could add themselves as approvers on unauthorized categories. Steps to reproduce: - Create an approval request category (c1) with yourself as approver. - Create another approval request category (c2) with someone else as approver. - Create a request with category c1 and change to category c2. - You are now an approver of the approval request. This commit fixes the issue by reseting the list of approvers to only take the ones configured on the category. task-4637083 Forward-Port-Of: odoo/enterprise#82133 Forward-Port-Of: odoo/enterprise#81129
It is possible for a user to sync an existing whatsapp account and only after install some whatsapp bridge module. In that case the user will get an error as the template is created on the existing account with an existing name. We now prevent using the default value if a template with the same name already exists on it. task-4369979 Forward-Port-Of: odoo/enterprise#82260 Forward-Port-Of: odoo/enterprise#79786
Original PR description
It is possible for a user to sync an existing whatsapp account and only after install some whatsapp bridge module. In that case the user will get an error as the template is created on the existing account with an existing name. We now prevent using the default value if a template with the same name already exists on it. task-4369979 Forward-Port-Of: odoo/enterprise#82260 Forward-Port-Of: odoo/enterprise#79786
This commit ensures that sheet names in exported excel files are unique. The names may not be unique in case a composite report contains multiple section reports all having the same very long prefix. An example to that could be found in l10n_fr_reports: 1) IMB - Intermediate management balances 2) IMB - Intermediate management balances (2024) task-4678129 Forward-Port-Of: odoo/enterprise#82333
Original PR description
This commit ensures that sheet names in exported excel files are unique. The names may not be unique in case a composite report contains multiple section reports all having the same very long prefix. An example to that could be found in l10n_fr_reports: 1) IMB - Intermediate management balances 2) IMB - Intermediate management balances (2024) task-4678129 Forward-Port-Of: odoo/enterprise#82333
Versions -------- - 17.0+ Steps ----- 1. Have a salesman user without accounting rights; 2. assign user to a subscription; 3. create an invoice for the subscription; 4. assign a different salesman to the subscription; 5. as the initial salesman, try to close the subscription. Issue ----- Depending on the state of the cache, one of two things happen: 1. You get a validation error, saying the subscription has no invoices. 2. You get an access error if the invoice lines exist in t
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have a salesman user without accounting rights; 2. assign user to a subscription; 3. create an invoice for the subscription; 4. assign a different salesman to the subscription; 5. as the initial salesman, try to close the subscription. Issue ----- Depending on the state of the cache, one of two things happen: 1. You get a validation error, saying the subscription has no invoices. 2. You get an access error if the invoice lines exist in the cache. Cause ----- The salesman only has read access to their own invoices. The first error happens because they cannot search for others' invoices. The second error happens because they cannot read the cached records. Solution -------- Use `sudo` to check for existing invoices. opw-4554639 Forward-Port-Of: odoo/enterprise#82243