Tuesday, February 18, 2025
21 changes · 17.0
Enhancements to existing features
Nilvera electronic invoice XML now uses Turkish country names as required by the service. The Turkish language is activated during installation so the correct translated country values are available and consistently included in exported XML.
Original PR description
Nilvera requires the country name in the XML to be in Turkish. To achieve this, the Turkish language is now activated during installation, ensuring translated values are stored in the database and can be enforced in the XML output. task-4504454
Resolved issues and error corrections
Mail command descriptions now use regular text styling instead of italic emphasis, preventing the ends of sentences from being visually cut off. This makes canned responses and channel command help text easier for users to read.
Original PR description
Purpose of this commit: The command descriptions (canned responses, channel command) currently use an italic font style due to being wrapped in the emphasis tag, causing the text to appear cropped at the end of the sentence. This commit resolves the issue by replacing the emphasis tag with a span tag. task-4485553 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
This commit fixes two pivot tests failing randomly by ensuring that we wait for the download to be completed before ending the test or asserting the steps. Runbot error-134572 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#198098
Original PR description
This commit fixes two pivot tests failing randomly by ensuring that we wait for the download to be completed before ending the test or asserting the steps. Runbot error-134572 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#198098
Corrected a missing percent sign in the Spanish Mod 390 VAT report line label. This helps users read the report accurately and avoids confusion when reviewing annual VAT information.
Fixes the sample JavaScript provided in the Website HTML/CSS Editor so it works correctly after dialog changes. This prevents an error when users save the example and then enter edit mode, improving reliability for website customization.
Original PR description
Steps to reproduce: - In website, open the HTML/CSS Editor (Site > HTML/CSS Editor). - In the dropdown, select JS. - Uncomment the given example (about the "Hello World" dialog) and save. - Try to go in edit mode. => Traceback This happens since commit [1], which replaced the dialogs by OWL Dialog ones. Indeed, the call to `super` in the `init` function was forgotten, making the widget not being initialized correctly, and therefore not destroyed correctly either when going in edit mode. This commit adds this missing call. [1]: https://github.com/odoo/odoo/commit/57ed8bc0bf9d1ae2b7542d677a4d7e8fd1899ea2 opw-4243615
This fixes a website test so it uses the same default website that Odoo loads when multiple websites exist. It prevents false test failures in multi-website setups, especially when different websites use different themes.
Original PR description
To reproduce: Testing `test_ensure_correct_website_asset` with multiple website will consistently fail as the bundle from the biggest `website_id` is used whereas it compare the bundle to default website loaded, which looks to be the one with the smallest ID. Installing `test_themes` reproduce the issue consistently as the website with biggest and smallest ID will use different theme website with distinct bundle After this fix: As the website with smaller ID load by default, we use the smallest existing website_id rather than the biggest one rb-65788
The POS Sales Details report now rounds combined product quantities according to the product unit of measure. This prevents confusing decimal display errors, such as showing 74.60000000000001 instead of 74.6, and makes printed reports clearer and more reliable.
Original PR description
The Sales Details report in POS sometimes displays incorrect quantities due to floating point precision errors. This happens when summing product quantities that have decimal values, leading to…
The Sales Details report in POS sometimes displays incorrect quantities due to floating point precision errors. This happens when summing product quantities that have decimal values, leading to unintended rounding inaccuracies in the report output. Steps to Reproduce: 1. Create a sample product to be sold in POS. 2. Check the rounding precision set for the unit of measure for this product. 3. Open a new POS session and confirm an order with `14.9` quantities of the product. 4. Create another order for the same product, this time with `59.7` as the quantity. 5. Go to POS → Reporting → Sales Details, select the relevant POS, and print the report. 6. Issue: The generated PDF report incorrectly shows `74.60000000000001` instead of `74.6`. The sum of product quantities was not respecting the unit of measure's decimal precision, leading to floating point inaccuracies in the report. I Applied rounding to the quantity aggregation using the decimal precision of Product Unit of Measure, ensuring consistent and correctly formatted values in the report. opw-4430513 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes automated checks for the pivot view more reliable by waiting for downloads to finish before ending the test. It helps reduce random test failures, supporting smoother maintenance and more dependable release validation.
Original PR description
This commit fixes two pivot tests failing randomly by ensuring that we wait for the download to be completed before ending the test or asserting the steps. Runbot error-134572 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
Timesheet reports now keep their columns aligned when users print only timesheets linked to helpdesk tickets. This ensures ticket-related entries display correctly and reports remain easy to read.
Original PR description
Steps to reproduce: - install helpdesk_timesheet - Go to `Timesheets` - Select ticket-linked timesheets only. - print report. Issue: - Tickets names are not rendered on the report, causing misalignment. Fix: If the column `timesheet_record_label` exists, render the cell anyway. task-4476391 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change adjusts internal performance tests for appointment features after a related access-rights update changed how publishing permissions are checked. It helps keep automated test expectations accurate when the website feature is installed, without changing the appointment behavior customers use.
Original PR description
Related to https://github.com/odoo/odoo/pull/195866. Now that `Can publish` is based on access rights, some extra queries are needed when `website` is installed. Note that the `appointment`-only and `appointment.hr`-only counts are unchanged. task-3175890
The Spanish Libro de IVA Excel export now places vendor bill references and reception numbers in the correct columns. This helps businesses produce more accurate VAT reporting files and reduces manual correction before submission or review.
Original PR description
This commit fix 2 columns in the Libro de IVA xlsx export file: 1. **expense_series_number**: before it was the move name, now it's the move ref 2. **reception_number**: before it was blank, now it's the move name task-4508992
The Knowledge app sidebar now resizes accurately for users working in right-to-left languages. This prevents the sidebar from moving incorrectly during resizing, improving usability for affected language settings.
Original PR description
Previously, in RTL mode, sidebar resizing calculations were incorrect, causing the sidebar to not follow the mouse properly resulted in incorrect resizing. This fix ensures accurate resizing behavior. Task-4571290
The cohort reporting tests were updated to wait for file downloads to finish before completing checks. This reduces random test failures, helping keep release validation stable without changing business features.
Original PR description
This commit fixes a cohort test failing randomly by ensuring that we wait for the download to be completed before ending the test or asserting the steps. Runbot error-134572
Before this commit all systray items of website were hidden for users that did not have the Restricted Editor right. This commit limits only some of the items to users having the Restricted Editor right: - Published: unrelated - Mobile preview: unrelated - Website switcher: unrelated - + New: Restricted Editor only - Edit in backend: unrelated - Translate: Restricted Editor only - Edit: Restricted Editor only It therefore now shows the Published button only based on the result of th
Original PR description
Before this commit all systray items of website were hidden for users that did not have the Restricted Editor right. This commit limits only some of the items to users having the Restricted Editor…
Before this commit all systray items of website were hidden for users that did not have the Restricted Editor right. This commit limits only some of the items to users having the Restricted Editor right: - Published: unrelated - Mobile preview: unrelated - Website switcher: unrelated - + New: Restricted Editor only - Edit in backend: unrelated - Translate: Restricted Editor only - Edit: Restricted Editor only It therefore now shows the Published button only based on the result of the `_compute_can_publish` method of the `website.published.mixin`. The default implementation now checks whether the user has write access to the `website_published` field on the record. Steps to reproduce: - Install `website_crm_partner_assign`. - Connect as a user without any Website role, and in Sales, the "User: Own Documents Only" role. - Go to a partner in the `/partners` page. => "Published" button did not appear. And on the contrary: - Connect as a Restricted Editor user without Sales rights. - Go to a partner in the `/partners` page. - Click on "Published". => An access right error notification did appear. task-3175890 Forward-Port-Of: odoo/odoo#112421
Backport of https://github.com/odoo/odoo/pull/166533: > For the Bizkaia tax agency in Bask country, we also need to send vendor bills and vendor bill refunds. In Odoo standard however, we only have a link towards one original vendor bill for a vendor bill refund. > > The problem however is that your vendor can send you a vendor refund for multiple original vendor bills and that for the moment, you do not really have a good way to encode it. > > So, we added a field to put the other ori
Original PR description
Backport of https://github.com/odoo/odoo/pull/166533: > For the Bizkaia tax agency in Bask country, we also need to send vendor bills and vendor bill refunds. In Odoo standard however, we only have a link towards one original vendor bill for a vendor bill refund. > > The problem however is that your vendor can send you a vendor refund for multiple original vendor bills and that for the moment, you do not really have a good way to encode it. > > So, we added a field to put the other original vendor bills as a many2many. > > We also updated the translations. > > opw-3719158 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr @moduon MT-4966 Forward-Port-Of: odoo/odoo#191303
**Current behavior:** For `real_time`, `avco` prod: When posting the bill of a reception which originated from a PO with a foreign currency, if a return for the receipt was generated as well as a return for that return, there will be an extraneous SVL created which illogically affects the product's `standard_price` (product value has increased from nowhere). **Expected behavior:** The product cost prior to posting the bill and after posting the bill is equal. **Steps to reproduce:** 1.
Original PR description
**Current behavior:** For `real_time`, `avco` prod: When posting the bill of a reception which originated from a PO with a foreign currency, if a return for the receipt was generated as well as a…
**Current behavior:** For `real_time`, `avco` prod: When posting the bill of a reception which originated from a PO with a foreign currency, if a return for the receipt was generated as well as a return for that return, there will be an extraneous SVL created which illogically affects the product's `standard_price` (product value has increased from nowhere). **Expected behavior:** The product cost prior to posting the bill and after posting the bill is equal. **Steps to reproduce:** 1. Create an `avco` + `real_time` costing/valuated productA 2. Activate 2 additional currencies + give them unique exchange rates 3. Create a purchase order in the first of the two additional currencies, for `N` units of productA at $`price_unit` 4. Confirm the PO -> receive the product 5. Create another purchase order in the second of the two currencies, again `N` units @ $`price_unit` 6. Confirm + receive, then generate a return for this reception 7. Generate a return for the return of step 6 8. Note the current `standar_price` of ProductA 9. For the second purchase order (the one with the returns) create the vendor bill 10. Observe that the `standard_price` of ProductA has increased without any legitimate basis **Cause of the issue:** In `_generate_price_difference_vals`: https://github.com/odoo/odoo/blob/55658e7f43375d7e1af07293e2cd9d1cc4b33883/addons/purchase_stock/models/account_move_line.py#L307-L314 We operate with the assumption that, because we are in a return of a return, any existing pdiff will have already been compensated for- so we take the POL price unit at face value to compare with the AML price unit. But, in case the POL and AML are in different currencies, this will fail to prevent a pdiff SVL from being created. **Fix:** Convert the purchase line's returned price unit to the currency used by the layer for which we are finding the pdiff. opw-4334372 Forward-Port-Of: odoo/odoo#196222
Description of the issue/feature this PR addresses: Applies https://github.com/odoo/odoo/pull/194130 for all TicketBAI invoices, and not only for those for Bizkaia. Current behavior before PR: When invoice is not for Bizkaia, it fails to render the XML. <details> ``` 2025-01-20 11:41:09,902 28 ERROR odoo odoo.http: Exception during request handling. Traceback (most recent call last):
Original PR description
Description of the issue/feature this PR addresses: Applies https://github.com/odoo/odoo/pull/194130 for all TicketBAI invoices, and not only for those for Bizkaia. Current behavior before PR: When…
Description of the issue/feature this PR addresses:
Applies https://github.com/odoo/odoo/pull/194130 for all TicketBAI invoices, and not only for those for Bizkaia.
Current behavior before PR:
When invoice is not for Bizkaia, it fails to render the XML.
<details>
```
2025-01-20 11:41:09,902 28 ERROR odoo odoo.http: Exception during request handling.
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: 55111
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: 'account.edi.document(55111,).edi_content'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 5201, in ensure_one
_id, = self._ids
ValueError: not enough values to unpack (expected 1, got 0)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<3645>", line 580, in template_3645
File "<3645>", line 175, in template_3645_content
File "/opt/odoo/auto/addons/l10n_es_edi_tbai/models/account_move.py", line 130, in _get_l10n_es_tbai_sequence_and_number
self.ensure_one()
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 5204, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: account.move()
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 2066, in __call__
response = request._serve_db()
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 1653, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/opt/odoo/custom/src/odoo/odoo/service/model.py", line 133, in retrying
result = func()
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 1681, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 1795, in dispatch
return self.request.registry['ir.http']._dispatch(endpoint)
File "/opt/odoo/auto/addons/website/models/ir_http.py", line 237, in _dispatch
response = super()._dispatch(endpoint)
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 734, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/opt/odoo/auto/addons/web/controllers/binary.py", line 75, in content_common
stream = request.env['ir.binary']._get_stream_from(record, field, filename, filename_field, mimetype)
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_binary.py", line 126, in _get_stream_from
stream = self._record_to_stream(record, field_name)
File "/opt/odoo/auto/addons/website/models/ir_binary.py", line 41, in _record_to_stream
return super()._record_to_stream(record, field_name)
File "/opt/odoo/auto/addons/documents/models/ir_binary.py", line 13, in _record_to_stream
return super()._record_to_stream(record, field_name)
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_binary.py", line 87, in _record_to_stream
return Stream.from_binary_field(record, field_name)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 523, in from_binary_field
data_b64 = record[field_name]
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 5975, in __getitem__
return self._fields[key].__get__(self, self.env.registry[self._name])
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1210, in __get__
self.compute_value(recs)
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 2360, in compute_value
super().compute_value(records)
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1392, in compute_value
records._compute_field_value(self)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 4259, in _compute_field_value
fields.determine(field.compute, self)
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 98, in determine
return needle(*args)
File "/opt/odoo/auto/addons/account_edi/models/account_edi_document.py", line 63, in _compute_edi_content
res = base64.b64encode(move_applicability['edi_content'](move))
File "/opt/odoo/auto/addons/l10n_es_edi_tbai/models/account_edi_format.py", line 251, in _l10n_es_tbai_get_invoice_content_edi
xml_tree = self._get_l10n_es_tbai_invoice_xml(invoice, cancel)[invoice]['xml_file']
File "/opt/odoo/auto/addons/l10n_es_edi_tbai/models/account_edi_format.py", line 275, in _get_l10n_es_tbai_invoice_xml
xml_str = self.env['ir.qweb']._render(template_name, values)
File "/opt/odoo/custom/src/odoo/odoo/tools/profiler.py", line 294, in _tracked_method_render
return method_render(self, template, values, **options)
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_qweb.py", line 588, in _render
result = ''.join(rendering)
File "<3641>", line 35, in template_3641
File "<3641>", line 24, in template_3641_content
File "<3643>", line 287, in template_3643
File "<3643>", line 85, in template_3643_content
File "<3645>", line 586, in template_3645
odoo.addons.base.models.ir_qweb.QWebException: Error while render the template
ValueError: Expected singleton: account.move()
Template: l10n_es_edi_tbai.template_invoice_factura
Path: /t/CabeceraFactura/t[3]/FacturasRectificadasSustituidas/IDFacturaRectificadaSustituida/SerieFactura
Node: <SerieFactura t-out="seq_and_num[0]"/>
2025-01-20 11:41:09,903 28 INFO odoo werkzeug: 89.7.25.15 - - [20/Jan/2025 11:41:09] "GET /web/content/account.edi.document/55111/edi_content HTTP/1.1" 500 - 49 0.083 0.049
```
</details>
Desired behavior after PR is merged:
All invoices for TicketBAI work the same.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
@RicGR98 @moduon MT-4966 @gelojr
Forward-Port-Of: odoo/odoo#194361When trying to select refunded vendor bills with this module, only customer invoices were searchable: https://github.com/user-attachments/assets/e6b01236-780c-45d9-b03a-0cae83a6f37b It turns out that the web client has a bug. When there's a field defined twice in the same form, to make it conditionally visible with different properties, and each of the field instances has a different domain, only the last one will be used always. I couldn't find the fix for that bug, but with this
Original PR description
When trying to select refunded vendor bills with this module, only customer invoices were searchable: https://github.com/user-attachments/assets/e6b01236-780c-45d9-b03a-0cae83a6f37b It turns out that…
When trying to select refunded vendor bills with this module, only customer invoices were searchable: https://github.com/user-attachments/assets/e6b01236-780c-45d9-b03a-0cae83a6f37b It turns out that the web client has a bug. When there's a field defined twice in the same form, to make it conditionally visible with different properties, and each of the field instances has a different domain, only the last one will be used always. I couldn't find the fix for that bug, but with this fix I can avoid defining the field twice: - The field name and help doesn't involve anything specific to customer or vendor invoices. - The domain itself contains the condition. Now both customer and vendor refunds allow selecting their corresponding invoices before posting. This makes the feature from https://github.com/odoo/odoo/pull/194130 actually usable. @moduon MT-8778 OPW-4509823 @RicGR98 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195418
This commit fixes a cohort test failing randomly by ensuring that we wait for the download to be completed before ending the test or asserting the steps. Runbot error-134572 Forward-Port-Of: odoo/enterprise#79555
Original PR description
This commit fixes a cohort test failing randomly by ensuring that we wait for the download to be completed before ending the test or asserting the steps. Runbot error-134572 Forward-Port-Of: odoo/enterprise#79555
Mod349 tax report in Spanish localization should report the total number of intra-community operators [1] However currently we count the number of operations Steps to reproduce: - With an ES company setup - Create 2 invoice to the same an EU partner - Go to Accounting / Reporting / Statement Reports / Tax Report - Select Tax Report (Mod 349) (ES) Issue: Total number of intra-community operators is 2, but should be 1 [1] https://sede.agenciatributaria.gob.es/static_files/Sede/Proced
Original PR description
Mod349 tax report in Spanish localization should report the total number of intra-community operators [1] However currently we count the number of operations Steps to reproduce: - With an ES company setup - Create 2 invoice to the same an EU partner - Go to Accounting / Reporting / Statement Reports / Tax Report - Select Tax Report (Mod 349) (ES) Issue: Total number of intra-community operators is 2, but should be 1 [1] https://sede.agenciatributaria.gob.es/static_files/Sede/Procedimiento_ayuda/GI28/instr_mod_349.pdf opw-4403287 Forward-Port-Of: odoo/enterprise#78588
This commit fixes an issue with knowledge's members permission computation. If the additional fields given to the method weren't valid fields, the computation would crash and return an error. With this fix we filter the valid additional_fields provided so that we only use those for the computation. task-4562838 Forward-Port-Of: odoo/enterprise#79221
Original PR description
This commit fixes an issue with knowledge's members permission computation. If the additional fields given to the method weren't valid fields, the computation would crash and return an error. With this fix we filter the valid additional_fields provided so that we only use those for the computation. task-4562838 Forward-Port-Of: odoo/enterprise#79221