Friday, April 25, 2025
14 changes · 17.0
Resolved issues and error corrections
A shared number display component has been moved into the main HR module so payroll can use it without depending on time off features. This keeps payroll setup cleaner and avoids unnecessary module dependencies while preserving the same user experience.
Original PR description
Since the widget for non trailing zeros float is used in payroll and payroll does not depend on hr_holidays now, we move the widget to core hr
The dropshipping company setup check now looks for the dedicated dropshipping operation type instead of relying on older location-based rules. This prevents companies from being incorrectly identified as missing dropshipping configuration after the newer operation type was introduced.
Original PR description
In this version, the picking type code `dropship` has been introduced to differentiate incoming types from this one (ref: 1547d66585a4b57cd3b747f28b7514dbd9d7bef8), but the search for missing companies without this new type is still being done with the old criteria of the source and target location. Let's change this to use the new picking type code. @Tecnativa
This fix prevents an error in the manufacturing barcode workflow when a user scans a package type while a component line is selected. Instead of crashing, the system now shows a clear notification guiding the user to scan a product, improving reliability during shop floor operations.
Original PR description
**Current behavior:** Scanning a package type in an MO in barcode while having a raw move line (component line) selected will result in a traceback. **Expected behavior:** Put the comp line in a new pack of that package type. **Steps to reproduce:** 1. Make a packge type 2. Make a new MO -> open it in barcode 3. Scan some component, select the new line 4. Scan the barcode of the package type -> traceback **Cause of the issue:** We end up calling `action_put_in_pack` when `this.resModel` is `MrpProduction` (which does not define this method). **Fix:** Define the method for the barcode MRP model to display a notification to, rather, scan a product (scanning a package here doesn't make sense). opw-4564834
Miscellaneous changes
Steps to reproduce [17.1]: - Add a property field to a job application in the backend. - Go to the linked website job application form (in edit mode). - The property field is inaccessible. To be able to access the new property field in the application form, the `job_id` value of the related job record needs to be specified by default. Unfortunately, these values are removed before accessing "edit" mode: Starting from [1], a fix was added to clear default values coming from `data-f
Original PR description
Steps to reproduce [17.1]: - Add a property field to a job application in the backend. - Go to the linked website job application form (in edit mode). - The property field is inaccessible. To be able…
Steps to reproduce [17.1]: - Add a property field to a job application in the backend. - Go to the linked website job application form (in edit mode). - The property field is inaccessible. To be able to access the new property field in the application form, the `job_id` value of the related job record needs to be specified by default. Unfortunately, these values are removed before accessing "edit" mode: Starting from [1], a fix was added to clear default values coming from `data-for` attributes when the form is edited (at `cleanForSave()`) to prevent saving it with changed default values. Since the code from [1] can also remove default values set by the user, a new fix (see [2]) updated this implementation to ensure that only values from auto-fill and data-for fields will be removed (this time, when the form public widget is destroyed [3]). The behaviour from [3] will always unlink the `data-for` values in edit mode, and as a consequence, the related property fields won't be correctly retrieved. The goal of this commit is to fix this behaviour by excluding `data-for` values from the reset in [3]. An extra check will be added to be sure the form won't be saved with updated default values if it already has `data-for` ones [4]. Important: The diff from [5] made the `email_to` field as an exception for the data-for/prefill priority system and only used the `data-for` value if nothing has been configured by the user (it also used the `data-for` value if what was configured by the user is the dummy default email: `info@yourcompany.example.com`). That's why we need to exceptionally allow saving the default value added by the user in the check from [4] to preserve the same behavior. Following [6], The `email_to` value won't be kept in edit mode to prevent breaking its dynamic behavior. [1]: https://github.com/odoo/odoo/commit/b637a5e32f767b62736241042f88fa0cecf9f10b [2]: https://github.com/odoo/odoo/commit/043e1fdf923d2037dd8da128ab99388f0c92e544 [5]: https://github.com/odoo/odoo/commit/a08574a04ff2ce8ea2d6fd2b79f56cc57bba953b [6]: https://github.com/odoo/odoo/commit/6658d61e304c9dfd8e512648c4a001dcaac44bc1 task-3922573 Forward-Port-Of: odoo/odoo#166565
This started with noticing that the way the rejected invoices were handled in the response changed. Before, it was handled as a json in a string in a json, now it is directly in a json and most importantly, when the invoice is considered "rejected", ZATCA returns it as a 400 error. This made us check further and e.g. when we resend a rejected, the issue time is supposed to be the same, so the logic of the confirmation time was changed so it still behaves the same in pure l10n_sa, but if you
Original PR description
This started with noticing that the way the rejected invoices were handled in the response changed. Before, it was handled as a json in a string in a json, now it is directly in a json and most…
This started with noticing that the way the rejected invoices were handled in the response changed. Before, it was handled as a json in a string in a json, now it is directly in a json and most importantly, when the invoice is considered "rejected", ZATCA returns it as a 400 error. This made us check further and e.g. when we resend a rejected, the issue time is supposed to be the same, so the logic of the confirmation time was changed so it still behaves the same in pure l10n_sa, but if you have a rejected one, it won't be overwritten when you confirm the invoice again. We also added the rejected invoice as an attachment for auditibility and put a mechanism in place to avoid the user to delete it. When we have a 400 error, the chain index is reset (ICV field), because then, when we send a new one, it will have a new ICV. The goal for auditibility is that each chain index corresponds to one submission of an invoice. E.g. if we have a timeout, the chain index is kept and we are supposed to check that invoice first before proceeding with other invoices because we do not know whether the invoice was submitted or not, so we need to retry and that way it might override the existing ICV with ZATCA. We do the same for 401+ errors just to make sure that one ICV equals one invoice (although here, we could reset the sequence after we get the error if it causes too much trouble) The error/warning messages were a bit updated to clearly indicate the HTTP status code and the error code from ZATCA in bold and to avoid putting Python dicts, but nicely formatted messages. opw-4689622 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#205671
Otherwise, it will create massive domains, which may exhaust the memory available to PG: ``` Traceback (most recent call last): File "/home/odoo/src/odoo/18.0/odoo/tools/safe_eval.py", line 397, in safe_eval return unsafe_eval(c, globals_dict, locals_dict) File "ir.actions.server(364,)", line 5, in <module> File "/home/odoo/src/odoo/18.0/addons/stock/models/stock_orderpoint.py", line 257, in action_open_orderpoints return self._get_orderpoint_action() File "/home/o
Original PR description
Otherwise, it will create massive domains, which may exhaust the memory available to PG: ``` Traceback (most recent call last): File "/home/odoo/src/odoo/18.0/odoo/tools/safe_eval.py", line 397, in…
Otherwise, it will create massive domains, which may exhaust the memory available to PG:
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/18.0/odoo/tools/safe_eval.py", line 397, in safe_eval
return unsafe_eval(c, globals_dict, locals_dict)
File "ir.actions.server(364,)", line 5, in <module>
File "/home/odoo/src/odoo/18.0/addons/stock/models/stock_orderpoint.py", line 257, in action_open_orderpoints
return self._get_orderpoint_action()
File "/home/odoo/src/odoo/18.0/addons/stock/models/stock_orderpoint.py", line 500, in _get_orderpoint_action
qty_by_product_loc, dummy = self.env['product.product'].browse(product_ids)._get_quantity_in_progress(location_ids=location_ids)
File "/home/odoo/src/odoo/18.0/addons/purchase_stock/models/product.py", line 50, in _get_quantity_in_progress
groups = self.env['purchase.order.line'].sudo()._read_group(domain,
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 1989, in _read_group
row_values = self.env.execute_query(query.select(*groupby_terms.values(), *select_terms))
File "/home/odoo/src/odoo/18.0/odoo/api.py", line 978, in execute_query
self.cr.execute(query)
File "/home/odoo/src/odoo/18.0/odoo/sql_db.py", line 572, in execute
return self._cursor.execute(*args, **kwargs)
File "/home/odoo/src/odoo/18.0/odoo/sql_db.py", line 354, in execute
res = self._obj.execute(query, params)
psycopg2.errors.SyntaxError: memory exhausted at or near "("
LINE 1: ...((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...
^
```
upg-2461663
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#202065This commit disable both protection upon neutralizing a db by removing the tokens. Version 16.0 : only reCaptcha Version 17.0+: both opw-4734555 upg-2759374 Forward-Port-Of: odoo/odoo#207020
Original PR description
This commit disable both protection upon neutralizing a db by removing the tokens. Version 16.0 : only reCaptcha Version 17.0+: both opw-4734555 upg-2759374 Forward-Port-Of: odoo/odoo#207020
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs
Original PR description
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient…
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs on cash desk 2 during payment: could not obtain lock on row in relation “ir_sequence”. The odoo.service.model retries to create the order and since the ir_sequence of pos_config used in the pos_order name is not set to "no_gap", the pos_order names have a gap equal to the number of retries. Task-4708543 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#205935
**Current behavior before PR:** - When gradient image is applied on element other than font or span, applying a gradient color to its child text would trigger a traceback. **Desired behavior after PR is merged:** - Now, if the gradient image is applied on element other than font or span, applying gradient color on its child text will applied gradient color properly. task:4730500 Forward-Port-Of: odoo/odoo#206272
Original PR description
**Current behavior before PR:** - When gradient image is applied on element other than font or span, applying a gradient color to its child text would trigger a traceback. **Desired behavior after PR is merged:** - Now, if the gradient image is applied on element other than font or span, applying gradient color on its child text will applied gradient color properly. task:4730500 Forward-Port-Of: odoo/odoo#206272
[FIX] accounting: missing chart line "758 Indemnités et autres produits" was missing Steps to reproduce: ------------------- * French Fiscal Localization * Open the Chart of Accounts * Line 758 missing Why the fix: ------------ Based on French government documentation https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/Plans%20comptables/Plan-de-comptes-PCG-2025.pdf opw-4699235 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/
Original PR description
[FIX] accounting: missing chart line "758 Indemnités et autres produits" was missing Steps to reproduce: ------------------- * French Fiscal Localization * Open the Chart of Accounts * Line 758 missing Why the fix: ------------ Based on French government documentation https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/Plans%20comptables/Plan-de-comptes-PCG-2025.pdf opw-4699235 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205552
When a partner's receivable account is set with a secondary currency, and an invoice is duplicated and its currency is changed, Odoo currently allows the invoice to be validated even though the account's currency no longer matches the invoice currency. that was because the order of calling ```_check_constrains_account_id_journal_id ``` in move line write function. This creates inconsistencies, as the account currency should match the invoice currency when posted. task-4684038 Descrip
Original PR description
When a partner's receivable account is set with a secondary currency, and an invoice is duplicated and its currency is changed, Odoo currently allows the invoice to be validated even though the account's currency no longer matches the invoice currency. that was because the order of calling ```_check_constrains_account_id_journal_id ``` in move line write function. This creates inconsistencies, as the account currency should match the invoice currency when posted. task-4684038 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#204164
Scenario: - edit the website theme and change a font to external font Buda - save and go back to edition and theme tab Result: Infinite spinning when loading the theme tab, and we see an error of AssetsLoadingError as well as an error 400 in console when loading https://fonts.googleapis.com/css?family=Buda URL. Issue: Buda font only has a 300 size, but when loading for the FontFamilyPickerUserValueWidget, we don't specify sizes so google fonts returns an error because there os no 400 size vers
Original PR description
Scenario: - edit the website theme and change a font to external font Buda - save and go back to edition and theme tab Result: Infinite spinning when loading the theme tab, and we see an error of AssetsLoadingError as well as an error 400 in console when loading https://fonts.googleapis.com/css?family=Buda URL. Issue: Buda font only has a 300 size, but when loading for the FontFamilyPickerUserValueWidget, we don't specify sizes so google fonts returns an error because there os no 400 size version of the font. This is not an issue when adding the font because we use 300 up to 700: d0ba6c26e64e711e21b191bdba0ede14abc6afb9 This is also not an issue for self-hosted google font because we load it with the same parameters: 5145d84dc02d8068a5feaac769f5d83cefc65804 opw-4657897 opw-4497707 opw-4338034 opw-3236787 opw-3584322 opw-3306789 Forward-Port-Of: odoo/odoo#207229
The pos.order form view removed the refund button for the inherited view. This can cause issues if other modules depend on that button to add to the arch, so making it invisible would still make the element accessible by xpath. ci error https://runbot.odoo.com/runbot/build/78974416 Forward-Port-Of: odoo/enterprise#84030
Original PR description
The pos.order form view removed the refund button for the inherited view. This can cause issues if other modules depend on that button to add to the arch, so making it invisible would still make the element accessible by xpath. ci error https://runbot.odoo.com/runbot/build/78974416 Forward-Port-Of: odoo/enterprise#84030
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose currency is GBP. ### Steps to reproduce: - Install UK accounting and select UK's company: the currency will be GBP - Install and set up Fedex Integration - Configure the Fedex in the delivery method, FEDEX_YOU_PACKAGE and Fedex priority for package type and service type - Create a sale order,
Original PR description
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose…
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose currency is GBP. ### Steps to reproduce: - Install UK accounting and select UK's company: the currency will be GBP - Install and set up Fedex Integration - Configure the Fedex in the delivery method, FEDEX_YOU_PACKAGE and Fedex priority for package type and service type - Create a sale order, add shipping and get the shipping rate for your set up fedex UK. #### > Fedex request error: `CURRENCY.TYPE.INVALID` ### Cause of the issue: The currency used in the fedex request is the currency of the order: https://github.com/odoo/enterprise/blob/07845988daad911b10de3b7199b81cc4ed3cfba9/delivery_fedex_rest/models/delivery_fedex.py#L133-L141 that is GBP, however since 44e32359bb79eed08a41861e155c98f664c6d09a we do not automatically convert the GBP currency in UKL. Since Fedex API does not seem to support the GBP we raise the error. ### Fix: We should use the currency conversion available between GBP and UKL. opw-4712354 Forward-Port-Of: odoo/enterprise#83388