Saturday, April 19, 2025
8 changes · saas-17.4
Miscellaneous changes
From the first of July 2025, the standard rate of VAT in Estonia is 24% instead of the current 22%. This commit adds the new tax. Also, one of the EU Intra-Community mappings was missing, specifically the 22% G (Purchases) -> 0% EU G 22% (Purchases). This was also added. task-4595806 Forward-Port-Of: odoo/odoo#205436 Forward-Port-Of: odoo/odoo#199789
Original PR description
From the first of July 2025, the standard rate of VAT in Estonia is 24% instead of the current 22%. This commit adds the new tax. Also, one of the EU Intra-Community mappings was missing, specifically the 22% G (Purchases) -> 0% EU G 22% (Purchases). This was also added. task-4595806 Forward-Port-Of: odoo/odoo#205436 Forward-Port-Of: odoo/odoo#199789
This commit is a hack to work around the module loading order without creating a new bridge module, to fix the issue in stable versions. ### Steps to reproduce: 1. Install both `stock`, `delivery` and `mrp` 2. Create a product with a kit BOM and weight - Set the kit UoM to Unit and the components to Kg - Add a weight to the components too 3. Create SO with the kit product 4. Add shipping (UPS) 5. Delivery product 6. `The unit of measure Unit defined on the order line doesn't bel
Original PR description
This commit is a hack to work around the module loading order without creating a new bridge module, to fix the issue in stable versions. ### Steps to reproduce: 1. Install both `stock`, `delivery`…
This commit is a hack to work around the module loading order without creating a new bridge module, to fix the issue in stable versions. ### Steps to reproduce: 1. Install both `stock`, `delivery` and `mrp` 2. Create a product with a kit BOM and weight - Set the kit UoM to Unit and the components to Kg - Add a weight to the components too 3. Create SO with the kit product 4. Add shipping (UPS) 5. Delivery product 6. `The unit of measure Unit defined on the order line doesn't belong to the same category as the unit of measure Kg` The sale price computed in `stock_delivery` does not take kits into account, which leads to conversion of UoM from different products (and therefore different UoM categories). However, `sale_mrp` already computes the right value for kits. It worked in earlier versions, thanks to the module loading order, but `_compute_sale_price` moved from the module `delivery` to `stock_delivery`. Here is the (simplified) module dependency graph: ``` Odoo 16.0: sale `-> sale_management `-> delivery `-> sale_stock `-> sale_mrp Odoo 17.0: sale `-> delivery `-> stock_delivery `-> sale_stock `-> sale_mrp ``` Odoo sorts modules by depth in the graph, and ordered alphabetically for modules with the same depth. So in Odoo 16.0, `delivery` was loaded before `sale_mrp`, but starting Odoo 17.0, `stock_delivery` is loaded after `sale_mrp` since they both have the same depth. opw-4385052 Forward-Port-Of: odoo/odoo#190750
Accounts of the following account types should generally speaking not be reconcilable: - `asset_cash` - `liability_credit_card` - `off_balance` That is why the "Allow Reconciliation" (`reconcile`) field is already invisible on the 'account.account' form and list views. After this commit - All such accounts in the standard chart of accounts are not reconcilable (there were non for `off_balance`) - The compute function on 'account.account' sets those accounts to not be reconcila
Original PR description
Accounts of the following account types should generally speaking not be reconcilable: - `asset_cash` - `liability_credit_card` - `off_balance` That is why the "Allow Reconciliation" (`reconcile`) field is already invisible on the 'account.account' form and list views. After this commit - All such accounts in the standard chart of accounts are not reconcilable (there were non for `off_balance`) - The compute function on 'account.account' sets those accounts to not be reconcilable (already done for `asset_cash`) when changing the account type. task: None Forward-Port-Of: odoo/odoo#206604 Forward-Port-Of: odoo/odoo#206011
Another check on the object received by the IoT Box containing certificate keys was always returning False, resulting in the certificate never being applied to the box. The object returned by odoo.com is a dictionary containing either: - 'error': 'an error message', - 'result': False (always False), or: - 'private_key_pem', - 'x509_pem', - 'subject_cn'. So checking `response.get("result")` would always return `False`, even if the server returned a certificate. Forward-Port-Of: odoo
Original PR description
Another check on the object received by the IoT Box containing certificate keys was always returning False,
resulting in the certificate never being applied to the box.
The object returned by odoo.com is a dictionary containing either:
- 'error': 'an error message',
- 'result': False (always False),
or:
- 'private_key_pem',
- 'x509_pem',
- 'subject_cn'.
So checking `response.get("result")` would always return `False`, even if the server returned a certificate.
Forward-Port-Of: odoo/odoo#206605
Forward-Port-Of: odoo/odoo#206499Description of the issue/feature this PR addresses: Current behavior before PR: Project users can't subscribe partners in projectw which visibility is set to 'Invited internal users': - Set a project to that visibility type. - Create a task. - Assign a user outside the project who just has 'Project user' permissions to that task. - With that user: in the task, try to subscribe a partner to the chatter. - With that user: in the chatter, try to mention a partner who's not subscribed
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Project users can't subscribe partners in projectw which visibility is set to 'Invited internal users': - Set a project to that visibility type. - Create a task. - Assign a user outside the project who just has 'Project user' permissions to that task. - With that user: in the task, try to subscribe a partner to the chatter. - With that user: in the chatter, try to mention a partner who's not subscribed to the task's thread. The user couldn't subscribe any user due to permission issues on project.project. Desired behavior after PR is merged: User's are able to operate normally where access is granted. OPW-4725100 MT-9830 cc @moduon @rafaelbn @EmilioPascual --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206298 Forward-Port-Of: odoo/odoo#205908
**Steps to reproduce:** - Install Accounting and Studio - Go to "Accounting / Customers / Invoices" - Enable Studio and go to "Reports" tab - Duplicate "Invoices without Payment" report - Note the id of this custom report (e.g. account.report_invoice_copy_1) - Go to "Settings / Technical / Email / Email Templates" - Open "Invoice: Sending" - In "Settings" tab, set the custom report as dynamic report - Go to "Settings / Technical / Parameters / System Parameters" - Add a new param
Original PR description
**Steps to reproduce:** - Install Accounting and Studio - Go to "Accounting / Customers / Invoices" - Enable Studio and go to "Reports" tab - Duplicate "Invoices without Payment" report - Note the id…
**Steps to reproduce:** - Install Accounting and Studio - Go to "Accounting / Customers / Invoices" - Enable Studio and go to "Reports" tab - Duplicate "Invoices without Payment" report - Note the id of this custom report (e.g. account.report_invoice_copy_1) - Go to "Settings / Technical / Email / Email Templates" - Open "Invoice: Sending" - In "Settings" tab, set the custom report as dynamic report - Go to "Settings / Technical / Parameters / System Parameters" - Add a new parameter: * Key: account.custom_templates_facturx_list * Value: [id of the custom report] (e.g. account.report_invoice_copy_1) - Create an invoice - Confirm the invoice - Send the the invoice via "Send & Print" button - Check the attached PDF **Issue:** 2 PDF are sent: the default invoice report and the custom one as configured on the email template. The default one has the factur-x version embedded in it, but not the custom one. **Cause:** The hook that embed factur-x into the PDF is called after the creation of the default PDF report. The custom reports (i.e. the dynamic ones) are created afterwards. However, the code that should trigger the hook for these ones was in a method (and file) that has been removed after a refactoring. **Solution:** Restore the method (and file) that triggers the hook to embed factur-x in custom report. opw-4645564 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204588
It's always useful to keep the original .coda or .xml (for SODA) file that we receive from CodaBox on the created entry. task-none Forward-Port-Of: odoo/enterprise#81612
Original PR description
It's always useful to keep the original .coda or .xml (for SODA) file that we receive from CodaBox on the created entry. task-none Forward-Port-Of: odoo/enterprise#81612
Steps to reproduce: 1. Install documents module with demo data 2. After this navigate Settings -> Technical -> Database Structure -> Attachments 4. In attachment delete the spreadsheet(Partner Spreadsheet Test) from file content and try to save it will raise below mentioned traceback will raise Why following this flow -> during upgrade don't have the filestore so there is possiblity spreadsheet_data would be empty and traceback can raise. that is why handling this: ``` Trac
Original PR description
Steps to reproduce: 1. Install documents module with demo data 2. After this navigate Settings -> Technical -> Database Structure -> Attachments 4. In attachment delete the spreadsheet(Partner…
Steps to reproduce:
1. Install documents module with demo data
2. After this navigate Settings -> Technical -> Database Structure
-> Attachments
4. In attachment delete the spreadsheet(Partner Spreadsheet Test)
from file content and try to save it will raise below mentioned
traceback will raise
Why following this flow -> during upgrade don't have the filestore so there is possiblity spreadsheet_data would be empty and traceback can raise.
that is why handling this:
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/odoo/addons/base/models/ir_autovacuum.py", line 39, in _run_vacuum_cleaner
self.env.cr.commit()
File "/home/odoo/src/odoo/odoo/sql_db.py", line 472, in commit
self.flush()
File "/home/odoo/src/odoo/odoo/sql_db.py", line 137, in flush
self.transaction.flush()
File "/home/odoo/src/odoo/odoo/api.py", line 879, in flush
env_to_flush.flush_all()
File "/home/odoo/src/odoo/odoo/api.py", line 737, in flush_all
self._recompute_all()
File "/home/odoo/src/odoo/odoo/api.py", line 733, in _recompute_all
self[field.model_name]._recompute_field(field)
File "/home/odoo/src/odoo/odoo/models.py", line 6978, in _recompute_field
field.recompute(records)
File "/home/odoo/src/odoo/odoo/fields.py", line 1379, in recompute
apply_except_missing(self.compute_value, recs)
File "/home/odoo/src/odoo/odoo/fields.py", line 1352, in apply_except_missing
func(records)
File "/home/odoo/src/odoo/odoo/fields.py", line 1401, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/addons/mail/models/mail_thread.py", line 424, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/odoo/models.py", line 4924, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/src/odoo/odoo/fields.py", line 102, in determine
return needle(*args)
File "/home/odoo/src/enterprise/documents/models/documents_document.py", line 149, in _compute_is_multipage
document.is_multipage = bool(document._get_is_multipage()) # None => False
File "/home/odoo/src/enterprise/documents_spreadsheet/models/documents_document.py", line 256, in _get_is_multipage
spreadsheet_data = json.loads(self.spreadsheet_data)
File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
```
upg-2752614
opw-4711261
Forward-Port-Of: odoo/enterprise#83558