Friday, May 9, 2025
37 changes · saas-18.1
Enhancements to existing features
The subscription test suite was updated to allow for one additional database lookup triggered by tax handling. This keeps automated checks aligned with expected system behavior without changing customer-facing features.
Original PR description
…queryCount Extra query made by the tax engine to retrieve the country from the company.
Miscellaneous changes
**Steps to reproduce:** - Install Accounting - Create a product: * Product Name: XYZ * Internal Reference: 1234 - Create a second product with the same name: * Product Name: XYZ * Internal Reference: 5678 - Go to "Accounting / Vendors / Bills" - Upload a Peppol BIS Billing 3.0 XML containing 2 invoice lines with the created products: `<cbc:Name>XYZ</cbc:Name>` `<cac:SellersItemIdentification><cbc:ID>1234</cbc:ID></cac:SellersItemIdentification>` and `<cbc:Name>XYZ</cbc:Name>`
Original PR description
**Steps to reproduce:** - Install Accounting - Create a product: * Product Name: XYZ * Internal Reference: 1234 - Create a second product with the same name: * Product Name: XYZ * Internal Reference:…
**Steps to reproduce:** - Install Accounting - Create a product: * Product Name: XYZ * Internal Reference: 1234 - Create a second product with the same name: * Product Name: XYZ * Internal Reference: 5678 - Go to "Accounting / Vendors / Bills" - Upload a Peppol BIS Billing 3.0 XML containing 2 invoice lines with the created products: `<cbc:Name>XYZ</cbc:Name>` `<cac:SellersItemIdentification><cbc:ID>1234</cbc:ID></cac:SellersItemIdentification>` and `<cbc:Name>XYZ</cbc:Name>` `<cac:SellersItemIdentification><cbc:ID>5678</cbc:ID></cac:SellersItemIdentification>` **Issue:** The 2 invoice lines of the generated bill have the same exact product, even when 2 different codes are provided for the products. **Cause:** In "_retrieve_product" method, a search is made on the name, the code and the barcode, but an "OR" operator is applied. Not an "AND". Several products may satisfy the domain but only the first one is returned. **Solution:** If several products matches the conditions, instead of directly returning the first one, try to select one based on the following priority: barcode, code, name. opw-4466322 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209048 Forward-Port-Of: odoo/odoo#205739
**Steps to reproduce:** - Create a new product storable product - Open Inventory/Operations/Physical Inventory - Add a new line - Choose your product - Click on History **Current behavior:** An Odoo Client Error window appears **Cause of the issue:** Inside the counted quantity widget's useEffect, When adding the event listener "this.onInput.bind(this)" creates a new function reference https://github.com/odoo/odoo/blob/4775c0ff640c4a092c7430a03f6324659b9bbca4/addons/stock/static/s
Original PR description
**Steps to reproduce:** - Create a new product storable product - Open Inventory/Operations/Physical Inventory - Add a new line - Choose your product - Click on History **Current behavior:** An Odoo…
**Steps to reproduce:** - Create a new product storable product - Open Inventory/Operations/Physical Inventory - Add a new line - Choose your product - Click on History **Current behavior:** An Odoo Client Error window appears **Cause of the issue:** Inside the counted quantity widget's useEffect, When adding the event listener "this.onInput.bind(this)" creates a new function reference https://github.com/odoo/odoo/blob/4775c0ff640c4a092c7430a03f6324659b9bbca4/addons/stock/static/src/widgets/counted_quantity_widget.js#L18 when removing the event listener "this.onInput.bind(this)" creates another function reference https://github.com/odoo/odoo/blob/4775c0ff640c4a092c7430a03f6324659b9bbca4/addons/stock/static/src/widgets/counted_quantity_widget.js#L22 As a consequence the event listener is not properly removed **Fix:** If the new function reference is created before in a variable the same function reference will be passed the two times and it will be properly removed opw-4711101 Forward-Port-Of: odoo/odoo#206478
Description of the issue/feature this PR addresses: allow portal attendees to be synced by google calendar Current behavior before PR: There was an `AccessError` happening when: - One portal user was invited to more than one event. - At least one of them was going to be notified in the future. - Google cancelled the first of those. <details> ``` 2024-12-11 10:19:02,144 31 INFO odoo odoo.addons.base.models.ir_cron: Manually starting job `Google Calendar: sincronización`. 2024-12-1
Original PR description
Description of the issue/feature this PR addresses: allow portal attendees to be synced by google calendar Current behavior before PR: There was an `AccessError` happening when: - One portal user was…
Description of the issue/feature this PR addresses:
allow portal attendees to be synced by google calendar
Current behavior before PR:
There was an `AccessError` happening when:
- One portal user was invited to more than one event.
- At least one of them was going to be notified in the future.
- Google cancelled the first of those.
<details>
```
2024-12-11 10:19:02,144 31 INFO odoo odoo.addons.base.models.ir_cron: Manually starting job `Google Calendar: sincronización`.
2024-12-11 10:19:02,151 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(29,)
2024-12-11 10:19:02,539 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(15,)
2024-12-11 10:19:03,029 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(50,)
2024-12-11 10:19:03,414 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(40,)
2024-12-11 10:19:03,823 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(52,)
2024-12-11 10:19:04,219 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(10,)
2024-12-11 10:19:04,580 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(28,)
2024-12-11 10:19:04,936 31 INFO odoo odoo.addons.google_calendar.models.res_users: Calendar Synchro - Starting synchronization for res.users(2,)
2024-12-11 10:19:05,501 31 INFO odoo odoo.models.unlink: User #2 deleted mail.message records with IDs: [1055490, 1055487, 1055480, 1055478, 1055403]
2024-12-11 10:19:05,518 31 INFO odoo odoo.models.unlink: User #2 deleted calendar.event records with IDs: [2920874, 2920875, 2920880]
2024-12-11 10:19:05,520 31 INFO odoo odoo.models.unlink: User #2 deleted mail.followers records with IDs: [6232226, 6232227, 6232228, 6232229, 6232230, 6232231, 6232232, 6232233, 6232234, 6232235, 6232236, 6232237, 6232238, 6232239, 6232240, 6232241, 6232242, 6232243, 6232270, 6232271, 6232272, 6232283]
2024-12-11 10:19:05,544 31 INFO odoo odoo.addons.base.models.ir_model: Access Denied by ACLs for operation: read, uid: 65, model: calendar.alarm
2024-12-11 10:19:05,545 31 INFO odoo odoo.addons.base.models.ir_model: Access Denied by ACLs for operation: read, uid: 65, model: calendar.alarm
2024-12-11 10:19:05,545 31 ERROR odoo odoo.addons.google_calendar.models.res_users: [res.users(2,)] Calendar Synchro - Exception : No puede ingresar a los registros 'Event Alarm' (calendar.alarm)
Se permite esta operación para los grupos siguientes:
- User types/Internal User
Póngase en contacto con su administrador para solicitar acceso si es necesario. !
Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 997, in get
cache_value = field_cache[record._ids[0]]
KeyError: 8
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1161, in __get__
value = env.cache.get(record, self)
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 1004, in get
raise CacheMiss(record, field)
odoo.exceptions.CacheMiss: 'calendar.alarm(8,).alarm_type'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1187, in __get__
recs._fetch_field(self)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3210, in _fetch_field
self._read(fnames)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3220, in _read
self.check_access_rights('read')
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3480, in check_access_rights
return self.env['ir.model.access'].check(self._name, operation, raise_exception)
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_model.py", line 1924, in check
raise AccessError(msg)
odoo.exceptions.AccessError: No puede ingresar a los registros 'Event Alarm' (calendar.alarm)
Se permite esta operación para los grupos siguientes:
- User types/Internal User
Póngase en contacto con su administrador para solicitar acceso si es necesario.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/google_calendar/models/res_users.py", line 100, in _sync_all_google_calendar
user.with_user(user).sudo()._sync_google_calendar(google)
File "/opt/odoo/auto/addons/google_calendar/models/res_users.py", line 79, in _sync_google_calendar
synced_events = self.env['calendar.event'].with_context(write_dates=events_write_dates)._sync_google2odoo(events - recurrences, default_reminders=default_reminders)
File "/opt/odoo/auto/addons/google_calendar/models/google_sync.py", line 185, in _sync_google2odoo
cancelled_odoo._cancel()
File "/opt/odoo/auto/addons/google_calendar/models/calendar.py", line 326, in _cancel
super(Meeting, my_cancelled_records)._cancel()
File "/opt/odoo/auto/addons/google_calendar/models/google_sync.py", line 152, in _cancel
self.unlink()
File "/opt/odoo/auto/addons/calendar/models/calendar_event.py", line 721, in unlink
self.env['calendar.alarm_manager']._notify_next_alarm(partner_ids)
File "/opt/odoo/auto/addons/calendar/models/calendar_alarm_manager.py", line 242, in _notify_next_alarm
notif = self.with_user(user).with_context(allowed_company_ids=user.company_ids.ids).get_next_notif()
File "/opt/odoo/auto/addons/calendar/models/calendar_alarm_manager.py", line 210, in get_next_notif
last_found = self.do_check_alarm_for_one_date(in_date_format, meeting, max_delta, time_limit, 'notification', after=partner.calendar_last_notif_ack)
File "/opt/odoo/auto/addons/calendar/models/calendar_alarm_manager.py", line 130, in do_check_alarm_for_one_date
if alarm.alarm_type != alarm_type:
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1189, in __get__
record._fetch_field(self)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3210, in _fetch_field
self._read(fnames)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3220, in _read
self.check_access_rights('read')
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3480, in check_access_rights
return self.env['ir.model.access'].check(self._name, operation, raise_exception)
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_model.py", line 1924, in check
raise AccessError(msg)
odoo.exceptions.AccessError: No puede ingresar a los registros 'Event Alarm' (calendar.alarm)
Se permite esta operación para los grupos siguientes:
- User types/Internal User
Póngase en contacto con su administrador para solicitar acceso si es necesario.
2024-12-11 10:19:05,547 31 INFO odoo odoo.addons.base.models.ir_cron: Job `Google Calendar: sincronización` done.
```
</details>
Desired behavior after PR is merged:
Google Sync works.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
@moduon MT-8345
cc @arj-odoo
Forward-Port-Of: odoo/odoo#195365
Forward-Port-Of: odoo/odoo#190356## Version: 18.0+ ## Issue: Total section on Purchase Order document is misaligned. ## Steps to reproduce: - Go to Purchase: - Open a purchase order record; - Click on Print > Purchase Order. ## Cause: Fix in Sale app changing report styles without considering Purchase app: https://github.com/odoo/odoo/commit/344007299c91d990c851ad9ed6f7fb5f8aa7a273 ## Fix: Full style reverting opw-4771854 Forward-Port-Of: odoo/odoo#209084
Original PR description
## Version: 18.0+ ## Issue: Total section on Purchase Order document is misaligned. ## Steps to reproduce: - Go to Purchase: - Open a purchase order record; - Click on Print > Purchase Order. ## Cause: Fix in Sale app changing report styles without considering Purchase app: https://github.com/odoo/odoo/commit/344007299c91d990c851ad9ed6f7fb5f8aa7a273 ## Fix: Full style reverting opw-4771854 Forward-Port-Of: odoo/odoo#209084
Issue: On a database with large stock pickings (> 100 stock moves per picking), displaying the tree view of stock pickings can be slow, because of the computation of the availability fields, as these fields are computed from the availability of the moves: 80 pickings per page means ~8000 moves to consider. If we are lucky the number of products to consider is lower than that, but on the customer database for which this PR is being done, we still have 3000 products. Displaying the 80 pickings
Original PR description
Issue: On a database with large stock pickings (> 100 stock moves per picking), displaying the tree view of stock pickings can be slow, because of the computation of the availability fields, as these…
Issue:
On a database with large stock pickings (> 100 stock moves per picking), displaying the tree view of stock pickings can be slow, because of the computation of the availability fields, as these fields are computed from the availability of the moves: 80 pickings per page means ~8000 moves to consider. If we are lucky the number of products to consider is lower than that, but on the customer database for which this PR is being done, we still have 3000 products. Displaying the 80 pickings on the first page takes 8 to 10s.
One of the issues found when analyzing the issue is that the 3 SQL queries performed on stock_move in the beginning of _get_report_lines are slow:
```
past_outs = self.env['stock.move'].search(AND([out_domain, past_domain]), order='priority desc, date, id')
future_outs = self.env['stock.move'].search(AND([out_domain, future_domain]), order='reservation_date, priority desc, date, id')
outs = past_outs | future_outs
ins = self.env['stock.move'].search(in_domain, order='priority desc, date, id')
```
Further analysis and testing show that using a domain with a negative condition ('not in') on the `state` column of stock_move prevents PostgreSQL from using the existing index on that column. By changing the condition in the domain to use a positive condition on that column, the execution time of each of the three queries goes from 1000-1500ms to about 100ms, saving about 3s on the total loading time of the page, which is still slow but a bit less.
Without patch:
```
POST /web/dataset/call_kw/stock.picking/web_search_read HTTP/1.1" 200 - 151 3.907 4.824
POST /web/dataset/call_kw/stock.picking/web_search_read HTTP/1.1" 200 - 155 3.998 5.284
POST /web/dataset/call_kw/stock.picking/web_search_read HTTP/1.1" 200 - 167 4.246 5.725
```
With patch:
```
POST /web/dataset/call_kw/stock.picking/web_search_read HTTP/1.1" 200 - 151 0.619 4.639
POST /web/dataset/call_kw/stock.picking/web_search_read HTTP/1.1" 200 - 155 0.643 5.143
POST /web/dataset/call_kw/stock.picking/web_search_read HTTP/1.1" 200 - 167 0.862 5.618
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#207022This commit fixes the position and update the color being used in the both SVG and PNG versions of the icon. The main #714B67 color is now used and everything is centered. The shadow has been removed. Forward-Port-Of: odoo/odoo#209004
Original PR description
This commit fixes the position and update the color being used in the both SVG and PNG versions of the icon. The main #714B67 color is now used and everything is centered. The shadow has been removed. Forward-Port-Of: odoo/odoo#209004
Compute the delta for base amounts in '_round_base_lines_tax_details' from the total instead of from the base amounts only. See test in this commit. task-4457168 Forward-Port-Of: odoo/odoo#196383
Original PR description
Compute the delta for base amounts in '_round_base_lines_tax_details' from the total instead of from the base amounts only. See test in this commit. task-4457168 Forward-Port-Of: odoo/odoo#196383
This PR refactors `_create_backorder `for better extensibility. Related: https://github.com/OCA/manufacture/pull/1467 @qrtl QT5016 Forward-Port-Of: odoo/odoo#207355 Forward-Port-Of: odoo/odoo#195958
Original PR description
This PR refactors `_create_backorder `for better extensibility. Related: https://github.com/OCA/manufacture/pull/1467 @qrtl QT5016 Forward-Port-Of: odoo/odoo#207355 Forward-Port-Of: odoo/odoo#195958
This commit modifies the condition for the Peppol information footnote to be added to the mail to be only when the country of both the company and the partner is one of the following: BE/LU/NL/SE/NO. task-id: 4750146 Forward-Port-Of: odoo/odoo#208836 Forward-Port-Of: odoo/odoo#207270
Original PR description
This commit modifies the condition for the Peppol information footnote to be added to the mail to be only when the country of both the company and the partner is one of the following: BE/LU/NL/SE/NO. task-id: 4750146 Forward-Port-Of: odoo/odoo#208836 Forward-Port-Of: odoo/odoo#207270
When creating a record for any model that overrides `utm.source.mixin` and additionally passing default_name in the context, the `utm.source.mixin` model creates a UTM source record and handles duplicates by appending (2), (3). However, the name is removed from the values after source creation in the create method, the `default_get` function retrieves the `default_name` from the context. Since the field is related, it overwrites the source name with the name field of the mixin model, causing
Original PR description
When creating a record for any model that overrides `utm.source.mixin` and additionally passing default_name in the context, the `utm.source.mixin` model creates a UTM source record and handles duplicates by appending (2), (3). However, the name is removed from the values after source creation in the create method, the `default_get` function retrieves the `default_name` from the context. Since the field is related, it overwrites the source name with the name field of the mixin model, causing a unique constraint violation if the same name already exists. This PR removes `default_name` from the context. Task-3901336 Forward-Port-Of: odoo/odoo#208362
Description ----------- Deleting an expense is slow when the `account_move_line` table is large, as the `Many2one`/`fkey` `expense_id` needs to be set to `NULL` where necessary. If there is no index on the `fkey`, it's `Seq. Scan` on the table `account_move_line`. Benchmark: ---------- On odoo.com, unlinking an expense took: | Before | After | |--------|-------| | 10s | 58ms | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Po
Original PR description
Description ----------- Deleting an expense is slow when the `account_move_line` table is large, as the `Many2one`/`fkey` `expense_id` needs to be set to `NULL` where necessary. If there is no index on the `fkey`, it's `Seq. Scan` on the table `account_move_line`. Benchmark: ---------- On odoo.com, unlinking an expense took: | Before | After | |--------|-------| | 10s | 58ms | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208875
'_generate_valuation_lines_data' in mrp_subcontracting_account was not made to handle OUT stock move, this would cause problems when the user unarchive the subcontracting picking type, access the subcontracting MO and scrap parts of the produced quantity. # How to Reproduce - Create Subcontract BoM, with 1 cmp at $10 - Create & Produce a subcontracting MO with a purchase and additional cost of $10 => Finished product cost is $20 ($10 + $10) - Scrap 1 unit of finished product => Journal ent
Original PR description
'_generate_valuation_lines_data' in mrp_subcontracting_account was not made to handle OUT stock move, this would cause problems when the user unarchive the subcontracting picking type, access the…
'_generate_valuation_lines_data' in mrp_subcontracting_account was not made to handle OUT stock move, this would cause problems when the user unarchive the subcontracting picking type, access the subcontracting MO and scrap parts of the produced quantity.
# How to Reproduce
- Create Subcontract BoM, with 1 cmp at $10
- Create & Produce a subcontracting MO with a purchase and additional cost of $10 => Finished product cost is $20 ($10 + $10)
- Scrap 1 unit of finished product => Journal entry for scrapped layer contains 3 AML instead of 2 => The additional cost is incorrectly added to the Stock Valuation account, making the line balance at -$30, while the layer is still at -$20
OPW-4640650
---
Test result without fix:
```
2025-04-24 09:26:06,083 18424 ERROR oes_test_17 odoo.addons.mrp_subcontracting_account.tests.test_subcontracting_account: FAIL: TestAccountSubcontractingFlows.test_subcontracting_account_flow_1
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/mrp_subcontracting_account/tests/test_subcontracting_account.py", line 174, in test_subcontracting_account_flow_1
self.assertRecordValues(amls, [
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/odoo/tests/common.py", line 667, in assertRecordValues
self.fail('\n'.join(errors))
AssertionError: The records and expected_values do not match.
Wrong number of records to compare: 3 records versus 2 expected values.
==== Differences at index 0 ====
---
+++
@@ -1,3 +1,3 @@
-account_id:300
-debit:60.0
-credit:0.0
+account_id:301
+debit:0.0
+credit:60.0
==== Differences at index 1 ====
---
+++
@@ -1,2 +1,2 @@
-account_id:299
-debit:30.0
+account_id:300
+debit:60.0
==== Additional record ====
{'account_id': 301, 'credit': 90.0, 'debit': 0.0, 'product_id': 107}
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#207204When an independent (not linked to an invoice) credit note is submitted to JoFotara, the portal would throw an error because the original invoice number, UUID, and amount are required. This commit restricts the users from sending independent credit notes to JoFotara. It also gives the users the flexibility (in debug mode) to link an invoice to an independent credit note. task-4756603 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward
Original PR description
When an independent (not linked to an invoice) credit note is submitted to JoFotara, the portal would throw an error because the original invoice number, UUID, and amount are required. This commit restricts the users from sending independent credit notes to JoFotara. It also gives the users the flexibility (in debug mode) to link an invoice to an independent credit note. task-4756603 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208276
### Steps to reproduce: - install "l10n_de" and switch to a German company - Go to a contact, in the page Accounting > Electronic Invoicing change the format to "Factur-X (CII)" - Create an invoice for this contact - Add a start and end date on the line of this invoice - Confirm and send to Factur-X - In the generated XML there is no trace of the start or end dates ### Solution: Set the variables to add the `BillingSpecifiedPeriod` in the XML. Put `invoice_date` as start date and `invo
Original PR description
### Steps to reproduce: - install "l10n_de" and switch to a German company - Go to a contact, in the page Accounting > Electronic Invoicing change the format to "Factur-X (CII)" - Create an invoice for this contact - Add a start and end date on the line of this invoice - Confirm and send to Factur-X - In the generated XML there is no trace of the start or end dates ### Solution: Set the variables to add the `BillingSpecifiedPeriod` in the XML. Put `invoice_date` as start date and `invoice_date_due` as end date. opw-4680890 Forward-Port-Of: odoo/odoo#208930 Forward-Port-Of: odoo/odoo#208088
Forward-Port-Of: odoo/odoo#207024
Original PR description
Forward-Port-Of: odoo/odoo#207024
Similar fix as what has already be done in this following commit: https://github.com/odoo/odoo/commit/483024d122565523a8f1788201ecce47c6d1dfd0 In multi-company setups, `product.template` records can be shared, but access to `res.company` may be restricted. To avoid access errors when computing `product.template.cost_currency_id`, use `sudo()` when reading `company_id.currency_id`. opw: 4744418 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forw
Original PR description
Similar fix as what has already be done in this following commit: https://github.com/odoo/odoo/commit/483024d122565523a8f1788201ecce47c6d1dfd0 In multi-company setups, `product.template` records can be shared, but access to `res.company` may be restricted. To avoid access errors when computing `product.template.cost_currency_id`, use `sudo()` when reading `company_id.currency_id`. opw: 4744418 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208752
Description of the issue this commit addresses: When creating the OSS fiscal positions, if the system creates a tax with a name already used by another tax, the entire mapping process stops due to a unique name constraint resulting in only the countries that have already been done to have the OSS fiscal positions. A solution would be to delete the tax but in the eventuality that it has already been used, it is impossible to delete it hence refreshing the oss fiscal positions becoming totally
Original PR description
Description of the issue this commit addresses: When creating the OSS fiscal positions, if the system creates a tax with a name already used by another tax, the entire mapping process stops due to a…
Description of the issue this commit addresses: When creating the OSS fiscal positions, if the system creates a tax with a name already used by another tax, the entire mapping process stops due to a unique name constraint resulting in only the countries that have already been done to have the OSS fiscal positions. A solution would be to delete the tax but in the eventuality that it has already been used, it is impossible to delete it hence refreshing the oss fiscal positions becoming totally impossible. --- Steps to reproduce: 1. Install l10n_eu_oss and any oss member loca (be for example) 2. Use the company of the loca installed 3. Go to Accouting, Settings, click Refresh tax mapping. 4. Go to the fiscal positions and delete any oss fiscal position. 5. Go back to Accoutning, Settings, click Refresh tax mapping. 6. "Tax names must be unique!" error shows up. --- Desired behavior after this commit is merged: When creating the oss fiscal positions, a search is performed to gather the tax and its copies that use the desired name. The name of the new tax will be the name of the one with the most " (Copy)" in its name with one more " (Copy)". --- no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208985 Forward-Port-Of: odoo/odoo#208532
This measure prevents any accidental or unauthorized modifications to these critical fields after the transition has been done or authorized, thereby ensuring data accuracy and consistency. task - 4680092 you can check this for reference  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208301
Original PR description
This measure prevents any accidental or unauthorized modifications to these critical fields after the transition has been done or authorized, thereby ensuring data accuracy and consistency. task - 4680092 you can check this for reference  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208301
This commit fixes the URL being used in the path argument given to the 'scoped_app' route. Since '/odoo' is already used by the main PWA, we must not use 'odoo' in the actual path of the PWA. Forward-Port-Of: odoo/odoo#208969
Original PR description
This commit fixes the URL being used in the path argument given to the 'scoped_app' route. Since '/odoo' is already used by the main PWA, we must not use 'odoo' in the actual path of the PWA. Forward-Port-Of: odoo/odoo#208969
This commit, fixes the scroll of the control panel when we opened the search bar. The bug happened because when we scroll we save the last scroll position into `oldScrollTop` variable. But when we "open" the search bar a "new line" (search input) is rendered so the height of the scrolling element is increase (by the height of the search input line). Also, a scroll is triggered so the view remains at the same position. But the `oldScrollTop` is not adapted to reflect the new height of the scroll
Original PR description
This commit, fixes the scroll of the control panel when we opened the search bar. The bug happened because when we scroll we save the last scroll position into `oldScrollTop` variable. But when we…
This commit, fixes the scroll of the control panel when we opened the search bar. The bug happened because when we scroll we save the last scroll position into `oldScrollTop` variable. But when we "open" the search bar a "new line" (search input) is rendered so the height of the scrolling element is increase (by the height of the search input line). Also, a scroll is triggered so the view remains at the same position. But the `oldScrollTop` is not adapted to reflect the new height of the scrolling element. When the new delta was calculated (in the scroll handler) to set the top position of the control panel, a wrong value was set as there was an additional offset of the height of the "search input line". This commit adds an ResizeObserver to observe the scrolling element and so adapt the `oldScrollTop` variable to adapt the delta of its height. task-4466063 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208955 Forward-Port-Of: odoo/odoo#208787
Add the Invoice Sending Method field to the partner's list view to enable mass edit. task-no (feedback from WTA) Forward-Port-Of: odoo/odoo#209007
Original PR description
Add the Invoice Sending Method field to the partner's list view to enable mass edit. task-no (feedback from WTA) Forward-Port-Of: odoo/odoo#209007
Since [1], the website visitor update in the login process uses the request's environment, which might not yet have the user in the cursor for auto-provisioning modules like LDAP, where the user is created in a different cursor. Steps to reproduce: 1. Install auth_ldap & website 2. Configure the website to have the correct domain 3. Configure the LDAP connection to create users 4. Logout and navigate to a website page (to create a visitor) 5. Login with an LDAP user -> traceback 6. Logi
Original PR description
Since [1], the website visitor update in the login process uses the request's environment, which might not yet have the user in the cursor for auto-provisioning modules like LDAP, where the user is created in a different cursor. Steps to reproduce: 1. Install auth_ldap & website 2. Configure the website to have the correct domain 3. Configure the LDAP connection to create users 4. Logout and navigate to a website page (to create a visitor) 5. Login with an LDAP user -> traceback 6. Login again -> works After this commit: As the website visitor is not business-critical, the visitor is not updated to ensure no deadlock is reintroduced. opw-4378487 cc @thle-odoo [1]: https://github.com/odoo/odoo/commit/b241cf7de9329af1410b9dd45b161aa41926effb Forward-Port-Of: odoo/odoo#209016 Forward-Port-Of: odoo/odoo#203913
- saas-17.4 issue 2: ### Steps to Reproduce: - Install the hr_timesheet module. - Create a portal user. - Create a project, task, and sub-task (with timesheet entries). - Share the project with the portal user. - Log in as the portal user. - Open the shared project and navigate to the task. - Open timesheet. ### Issue: When a portal user tries to open the timesheet of a shared project task from a mobile device, an error occurs. ### Cause: The po
Original PR description
- saas-17.4 issue 2: ### Steps to Reproduce: - Install the hr_timesheet module. - Create a portal user. - Create a project, task, and sub-task (with timesheet entries). - Share the project with the portal user. - Log in as the portal user. - Open the shared project and navigate to the task. - Open timesheet. ### Issue: When a portal user tries to open the timesheet of a shared project task from a mobile device, an error occurs. ### Cause: The portal user does not have access to the analytic account, which triggers this error. The form view for analytic.line in the analytic module includes analyti_account_id. ### Solution: In this commit, we have used the `timesheet_view_form_portal_user` form view. This view does not include analytic_account_id, which prevents the access error from occurring. task-4369891 Forward-Port-Of: odoo/odoo#208889 Forward-Port-Of: odoo/odoo#168847
## Issue: A standard IBAN always breaks into two lines on the DIN 5008 report. ## Steps to reproduce: - Install l10n_de; - Change to DE Company; - Navigate to Settings; - Under the Companies section, click `Configure Document Layout`; - Select `DIN 5008` layout; - Check footer display. ## Cause: The commit 3a139b15a5270fb466b608b340013c93214557bb reset the font-size without thinking about the IBAN display. opw-4680515 --- I confirm I have signed the CLA and read the PR guide
Original PR description
## Issue: A standard IBAN always breaks into two lines on the DIN 5008 report. ## Steps to reproduce: - Install l10n_de; - Change to DE Company; - Navigate to Settings; - Under the Companies section, click `Configure Document Layout`; - Select `DIN 5008` layout; - Check footer display. ## Cause: The commit 3a139b15a5270fb466b608b340013c93214557bb reset the font-size without thinking about the IBAN display. opw-4680515 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204296
A previous commit 9b133b2cd03a726d330c87a1227903fc925b0ed5 restricted the view and actions we had on the accounting dashboard for a bank journal from a branch company, if the journal belongs to the parent company. In Odoo 17 the fix made sense, but in Odoo 18, the dashboard data added conflicts with another one, resulting in no data being displayed at all when the journal is connected to an online account. This PR adapts the initial fix to use the existing data (deprecate `show_bank_connec
Original PR description
A previous commit 9b133b2cd03a726d330c87a1227903fc925b0ed5 restricted the view and actions we had on the accounting dashboard for a bank journal from a branch company, if the journal belongs to the parent company. In Odoo 17 the fix made sense, but in Odoo 18, the dashboard data added conflicts with another one, resulting in no data being displayed at all when the journal is connected to an online account. This PR adapts the initial fix to use the existing data (deprecate `show_bank_connect` in favor of `display_connect_bank_in_dashboard`) and adds the 'credit' type journal in the condition for `show_sync_action` to be used by the dashboard data. Forward-Port-Of: odoo/enterprise#84976
Steps to reproduce: - Raise Product Price Accuracy to 6 - Set Global Rounding - Fetch latest currency rate for USD from Bank of Mexico - Create a [TEST] Product with: - UNSPSC Category: 12141502 Magnesium Mg - UMT Aduana: kg - Make an Invoice as follows: - Customer: Deco Addict - Currency USD - Product: [TEST] - Price: 3,114.515000 - Qty UMT: 11 - Incoterm: EX WORKS - External Trade: Definitive - Confirm Invoice - Send CFDI Issue: Validation will fail with er
Original PR description
Steps to reproduce: - Raise Product Price Accuracy to 6 - Set Global Rounding - Fetch latest currency rate for USD from Bank of Mexico - Create a [TEST] Product with: - UNSPSC Category: 12141502…
Steps to reproduce: - Raise Product Price Accuracy to 6 - Set Global Rounding - Fetch latest currency rate for USD from Bank of Mexico - Create a [TEST] Product with: - UNSPSC Category: 12141502 Magnesium Mg - UMT Aduana: kg - Make an Invoice as follows: - Customer: Deco Addict - Currency USD - Product: [TEST] - Price: 3,114.515000 - Qty UMT: 11 - Incoterm: EX WORKS - External Trade: Definitive - Confirm Invoice - Send CFDI Issue: Validation will fail with error """ Code : CCE122 Message : El atributo cce20:ComercioExterior:TotalUSD no coincide con la suma de ValorDolares de las mercancías. """ In the xml, the ValorDolares for the sold item will be 3114.5150 but the attribute TotalUSD will be 3114.52 This occurs because ValorDolares are emitted as unrounded amount, but TotalUSD is rounded to 2 decimals. When working with 3+ digits the amounts might not add up correctly. Note: Before version 18, ValorDolares (`product_values['total']`) amount was already rounded according to the currency decimals (2) and there was no issue opw-4662692 opw-4686226 Forward-Port-Of: odoo/enterprise#84027
Issue: Syntax error is raised when applying period comparison on partner ledger report. Purpose of this PR: Group queries with the parentheses. Steps to Reproduce in Runbot: - install accounting - add period comparison to Partner Ledger Report - try to apply period comparison opw-4730435 Forward-Port-Of: odoo/enterprise#85074 Forward-Port-Of: odoo/enterprise#83652
Original PR description
Issue: Syntax error is raised when applying period comparison on partner ledger report. Purpose of this PR: Group queries with the parentheses. Steps to Reproduce in Runbot: - install accounting - add period comparison to Partner Ledger Report - try to apply period comparison opw-4730435 Forward-Port-Of: odoo/enterprise#85074 Forward-Port-Of: odoo/enterprise#83652
### Description: By default, it is impossible to change the default limit of card displayed on shop floor. This PR aim to change that by adding a "limit" in the `context` field of the action. ### Reference: opw-4707551 Forward-Port-Of: odoo/enterprise#83296
Original PR description
### Description: By default, it is impossible to change the default limit of card displayed on shop floor. This PR aim to change that by adding a "limit" in the `context` field of the action. ### Reference: opw-4707551 Forward-Port-Of: odoo/enterprise#83296
Steps to reproduce: - Activate foreign currency EUR (main company in USD) - Have a Bank journal in EUR - Create one Vendor "Send" payment of 100 EUR - Create a new Vendor batch payment and add the payment. - Open EUR Bank and register an outgoing transaction of 100 EUR - Match the transaction with the Batch payment Issue: Looking at the debit/credit columns it can be seen that the transaction amount is properly converted in company currency, but the batch amount is not converted (rate
Original PR description
Steps to reproduce: - Activate foreign currency EUR (main company in USD) - Have a Bank journal in EUR - Create one Vendor "Send" payment of 100 EUR - Create a new Vendor batch payment and add the payment. - Open EUR Bank and register an outgoing transaction of 100 EUR - Match the transaction with the Batch payment Issue: Looking at the debit/credit columns it can be seen that the transaction amount is properly converted in company currency, but the batch amount is not converted (rate 1.00) This occurs because when the payments in a batch don't have an associated move, the amount residual is converted from payment currency (EUR) to batch currency (still EUR) and not company currency (USD) opw-4656807 Forward-Port-Of: odoo/enterprise#83632
It's possible to have a 0 purchase order line with a negative invoiced qty if there is only a credit note linked to the PO. When the budget report process this order line, it will trigger a traceback. This commit aims to handle this case so the report can be open without issue. opw-4749480 Forward-Port-Of: odoo/enterprise#84812
Original PR description
It's possible to have a 0 purchase order line with a negative invoiced qty if there is only a credit note linked to the PO. When the budget report process this order line, it will trigger a traceback. This commit aims to handle this case so the report can be open without issue. opw-4749480 Forward-Port-Of: odoo/enterprise#84812
Currently the "resend" mechanism relies on `_send`; marking messages to resend as "outgoing". However when used in batch mode `_send` only sends template messages. We enable `_send_cron` to send discuss messages too and to process these in priority. As these have a fixed time limit to be sent. We also do some filtering on resend to avoid marking messages that we know will fail as outgoing. Including "unrecoverable" errors and messages on outdated channel. Methods that use crons are a
Original PR description
Currently the "resend" mechanism relies on `_send`; marking messages to resend as "outgoing". However when used in batch mode `_send` only sends template messages. We enable `_send_cron` to send discuss messages too and to process these in priority. As these have a fixed time limit to be sent. We also do some filtering on resend to avoid marking messages that we know will fail as outgoing. Including "unrecoverable" errors and messages on outdated channel. Methods that use crons are also updated to use direct method trigger and prevent commits during tests to avoid having to patch them every time. task-3547088 Forward-Port-Of: odoo/enterprise#84887 Forward-Port-Of: odoo/enterprise#79050
Before, the feature was not usable because HMRC would only accept whole pounds for the total payments made and the materials cost. The fix was to round the values on the report to whoule pounds for those two columns. This way, it would become valid for HMRC as the return is based on those report values. opw-4686819 Forward-Port-Of: odoo/enterprise#83829
Original PR description
Before, the feature was not usable because HMRC would only accept whole pounds for the total payments made and the materials cost. The fix was to round the values on the report to whoule pounds for those two columns. This way, it would become valid for HMRC as the return is based on those report values. opw-4686819 Forward-Port-Of: odoo/enterprise#83829
**Steps to reproduce:** - Install Accounting - Install a module that adds a button to tax report (e.g. l10n_ar) - Switch to an Argentinian company (e.g. (AR) Responsable Inscripto) - Go to "Accounting / Reporting / Statements Reports / Tax Return" (i.e. Tax Report) - Select "Argentinean VAT Book (AR)" as report - A cog button should appear after the report name with "VAT Book (ZIP)" option - With browser debug feature, switch to a responsive display and reduce the width or - Repeate
Original PR description
**Steps to reproduce:** - Install Accounting - Install a module that adds a button to tax report (e.g. l10n_ar) - Switch to an Argentinian company (e.g. (AR) Responsable Inscripto) - Go to…
**Steps to reproduce:** - Install Accounting - Install a module that adds a button to tax report (e.g. l10n_ar) - Switch to an Argentinian company (e.g. (AR) Responsable Inscripto) - Go to "Accounting / Reporting / Statements Reports / Tax Return" (i.e. Tax Report) - Select "Argentinean VAT Book (AR)" as report - A cog button should appear after the report name with "VAT Book (ZIP)" option - With browser debug feature, switch to a responsive display and reduce the width or - Repeatedly increase the zoom to increase the size of the button **Issue:** For a certain range of width the cog button is not visible. **Cause:** ".o_control_panel_breadcrumbs" element that contains the buttons has a min-width of 200px, hiding all elements that are after these 200px when reducing the width. **Solution:** Increase the min-width to 350px. The value is arbitrary but it covers well this use case. With a lower value, the cog button could still be hidden in the case of the Argentinian Tax Report in Spanish language. opw-4747697 Forward-Port-Of: odoo/enterprise#84432
Sometimes, when opening the documents folder, test folder is hidden on a second page, even if we open a parent folder first. With this fix, we search for the folder directly through search bar, eliminating undeterminism from the test. Forward-Port-Of: odoo/enterprise#83486
Original PR description
Sometimes, when opening the documents folder, test folder is hidden on a second page, even if we open a parent folder first. With this fix, we search for the folder directly through search bar, eliminating undeterminism from the test. Forward-Port-Of: odoo/enterprise#83486
In the community PR, we have used the timesheet_view_form_portal_user form view for the portal user. To ensure that the status bar is not visible to the portal user, we added a group restriction. An alternative approach would be to hide the status bar based on context, but I did not find it suitable. Therefore, we opted to use the group restriction. task-3969988 Forward-Port-Of: odoo/enterprise#84917 Forward-Port-Of: odoo/enterprise#74760
Original PR description
In the community PR, we have used the timesheet_view_form_portal_user form view for the portal user. To ensure that the status bar is not visible to the portal user, we added a group restriction. An alternative approach would be to hide the status bar based on context, but I did not find it suitable. Therefore, we opted to use the group restriction. task-3969988 Forward-Port-Of: odoo/enterprise#84917 Forward-Port-Of: odoo/enterprise#74760
This is a useful option that is hard to know about unless you read the code or are told it exists. It should be visible in the report options. In the context of: task-4734528 Forward-Port-Of: odoo/enterprise#83556
Original PR description
This is a useful option that is hard to know about unless you read the code or are told it exists. It should be visible in the report options. In the context of: task-4734528 Forward-Port-Of: odoo/enterprise#83556