Daily updates from Odoo
Tuesday, November 25, 2025
35 changes · 18.0
Enhancements to existing features
This update enhances how Odoo calculates taxes, specifically addressing scenarios where taxes are based on volume (e.g., per unit). This change, requested during Odoo Exp 2025, ensures more accurate tax calculations for products sold by volume, improving financial reporting. It impacts the account and point of sale modules.
Original PR description
The use case to cover is when you have a volume based tax. Requested during Odoo Exp 2025. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update streamlines accounting test creation by introducing a standardized helper for asserting and saving XML files. This simplifies test maintenance, reduces errors, and provides a more organized approach to XML handling within the Odoo accounting tests.
Original PR description
> This is a backport of the merged https://github.com/odoo/odoo/pull/235565 - with a couple of improvements & adaptations to the test files. This commit adds helpers and improves on the way we assert…
> This is a backport of the merged https://github.com/odoo/odoo/pull/235565 - with a couple of improvements & adaptations to the test files. This commit adds helpers and improves on the way we assert XML files in `AccountTestInvoicingCommon` and all accounting test that extend from it. From now on, all accounting test code that assert an XML tree/string to an XML file should call the `assert_xml` helper, and design their test file name/location/etc. around this framework. This approach has a few major benefits: Assert / Save XML When testing XML files, we often need to perform create/read/update operations on the asserted XML to make sure it corresponds to the most updated/intended data. Previously, to save something to an XML, a developer would need to write their own local helpers to save the XML in the right directory. This was cumbersome and error-prone, so we decided to design a helper that allows developer to immediately save AND/OR update the asserted XML: to save/update an XML, we can simply add `SAVE_XML` as an additional test tags. Better test naming and optional subfolder management To better organize test files, the `assert_xml` method allows us to write just the test key name (without `.xml`), and the framework will automatically get the XML to assert/save from the `test_files` directory. An optional `subfolder` parameter is also added to allow writing to specific subfolder within `test_files`. Better `___ignore___` management in assertion XMLs Sometimes, we want to ignore a few XML node that are not relevant, or have content that are not deterministic (changes on every test run). To handle this, previously, developers would need to modify the assertion XML content by hand or write their own local script to do so. With this new framework, we just need to add an `ignore_schema.xml` file somewhere in the `test_files` directory. If put inside a subfolder, it will be applied with more priority towards the XML that are put on that specific subfolder. Save "pure" XML (before applying `___ignore___`) in temporary folder When calling `SAVE_XML`, before applying the ignore patches, the XML will be saved in a temporary folder (same folder as the screenshots for tours), so that developers can use them in external tests in the future, and for any other saving reasons. In addition, this commit also: - add `extra_tags` helper to save all the common tags for EDIs, for a better way to enable `EXTERNAL_MODE` testing inspired by `l10n_mx_edi` - convert some non-assert XML test helpers into a class method - canonicalize the XML to ensure consistency of the generated test files following the C14N Version 2 standard. (Deterministic namespaces location, sorted attributes, etc.) task-4891206
Resolved issues and error corrections
This update resolves a memory issue that occurred when processing sales documents for the Romanian EDI (RS) system. By proactively retrieving country codes, the system now avoids running out of memory, leading to smoother and faster processing of these documents. This improves the overall efficiency of the RS EDI functionality.
Original PR description
Due to more number of moves during compute it out of memory while getting the country_code per move. So, just pre fetch the country code. So, it won't go for computing that and will be available in…
Due to more number of moves during compute it out of memory while getting the country_code per move. So, just pre fetch the country code. So, it won't go for computing that and will be available in memory records ``` sagu_3267671=> select count(id) from account_move; count --------- 1034179 (1 row) ``` ``` File "/home/odoo/src/odoo/17.0/addons/mail/models/mail_thread.py", line 424, in _compute_field_value return super()._compute_field_value(field) File "/home/odoo/src/odoo/17.0/odoo/models.py", line 4923, in _compute_field_value fields.determine(field.compute, self) File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 102, in determine return needle(*args) File "/home/odoo/src/odoo/17.0/addons/l10n_rs_edi/models/account_move.py", line 85, in _compute_l10n_rs_edi_is_eligible move.l10n_rs_edi_is_eligible = move.country_code == 'RS' and move.is_sale_document() and move.l10n_rs_edi_state in (False, 'sending_failed') File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1219, in __get__ self.compute_value(recs) File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1401, in compute_value records._compute_field_value(self) File "/home/odoo/src/odoo/17.0/addons/mail/models/mail_thread.py", line 424, in _compute_field_value return super()._compute_field_value(field) File "/home/odoo/src/odoo/17.0/odoo/models.py", line 4923, in _compute_field_value fields.determine(field.compute, self) File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 105, in determine return needle(records, *args) File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 695, in _compute_related values = [first(value[name]) for value in values] File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 695, in <listcomp> values = [first(value[name]) for value in values] File "/home/odoo/src/odoo/17.0/odoo/models.py", line 6695, in __getitem__ return self._fields[key].__get__(self, self.env.registry[self._name]) File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 2933, in __get__ return super().__get__(records, owner) File "/home/odoo/src/odoo/17.0/odoo/fields.py", line 1182, in __get__ recs._fetch_field(self) File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3824, in _fetch_field self.fetch(fnames) File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3874, in fetch fetched = self._fetch_query(query, fields_to_fetch) File "/home/odoo/src/odoo/17.0/odoo/models.py", line 3984, in _fetch_query self.env.cache.insert_missing(fetched, field, values) File "/home/odoo/src/odoo/17.0/odoo/api.py", line 1135, in insert_missing field_cache.setdefault(id_, val) MemoryError ``` upg-3267671 opw-5246681 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235919
This update resolves an error that prevented the Accounts Coverage Report in the Spanish localization (l10n_es_reports) from generating correctly. The issue stemmed from incorrect data formatting within the report's database queries. By correcting the data file and adjusting its loading order, the report now functions as intended, ensuring accurate account coverage reporting for Spanish businesses.
Original PR description
Step to reproduce: - for Spain localization, in developer mode: - Go to Balance sheet - Select either report 'Balance sheet - SMEs (ES) or Complete Balance Sheet (ES) - Click on the parameters button…
Step to reproduce:
- for Spain localization, in developer mode:
- Go to Balance sheet
- Select either report 'Balance sheet - SMEs (ES) or Complete Balance Sheet (ES)
- Click on the parameters button
- Click on the "Accounts Coverage Report"
Observation:
- we receive a traceback
```
psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "%(balance_sheet_11700_account)d"
LINE 1: ...ccount_tag" WHERE ("account_account_tag"."id" IN ('%(balance...
```
Cause:
- few records used a wrong format style for values of `domain_formula`
- These faulty domains were not [evaluated](https://github.com/odoo/odoo/blob/2070e30c540a066fb80851527e5e54e97fb23c4b/addons/account/models/account_report.py#L450-L453), but inserted into database as is.
- when browsing account.tag record using these domain, record ids were expected,
instead we got its string representation , causing traceback
https://github.com/odoo/enterprise/blob/8fa6fb27d2a79ee299361b281dc82182feee5860/account_reports/models/account_report.py#L5679-L5680
Fix:
- we fix the data file, which is properly evaluated and stored in database.
- Manifest's data file order is changed, so that account tags is loaded first.
opw-5224114
Forward-Port-Of: odoo/enterprise#98745This update fixes an issue where the SAFT report incorrectly assigned the supplier's receivable account to customers. The fix corrects a typo in the XML data, ensuring customers now use the correct receivable account for reporting purposes. This ensures accurate SAFT report generation and compliance.
Original PR description
### Issue: In the SAFT report both the Customer and the Supplier have the same account. ### Cause: In the XML there was probably a typo and both have `property_account_payable_id` as account. ### Solution: For the `Customers` node, use `property_account_receivable_id`. opw-5144009 Forward-Port-Of: odoo/enterprise#99196
This update automatically flags stock moves resulting from returns as 'refunds,' streamlining the accounting process. Previously, only returns initiated through the return wizard were correctly marked for refund. This change ensures accurate tracking and reconciliation of returned goods, simplifying inventory management and financial reporting.
Original PR description
This commit makes the `to_refund` field `True` by default for stock move in case of return. The value is True for product coming from the return wizard but not for extra product added later in the picking. In `stock_barcode` there is even not return wizard. Task: 4680813 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue where stopping ringtone playback caused unintended HTTP requests to '/null'. The fix resets the element's source, eliminating this problematic behavior and improving performance. This ensures the application functions smoothly without unnecessary network activity.
Original PR description
Setting the src of an element to null triggers a GET HTTP request to /null. This is not the intended behavior; we want to reset the source so that it is not linked to any file, but the browser interprets it as an attempt to load a file called "null". This commit fixes the problem by resetting the source using removeAttribute instead. [Task-5349985](https://www.odoo.com/odoo/project/5778/tasks/5349985) Forward-Port-Of: odoo/enterprise#100146
This update corrects an issue where credit notes' XML files weren't properly validated by the FACe system, a Spanish tax authority. The fix ensures compliance by standardizing the 'ReasonDescription' field, aligning with Spanish requirements. Additionally, the reversal wizard has been streamlined for clarity.
Original PR description
In cases of credit notes, the xml would not be validated by the FACe. This was caused by the field 'ReasonDescription', which can only be one of the proposed field. We used to provide it in English when the available reasons are only in Spanish. Also fixed CorrectionMethodDescription. See https://www.facturae.gob.es/formato/Paginas/version-3-2.aspx for more documentation. ticket-5184181 Took the opportunity to improve the reversal wizard : In the reversal wizard, two fields 'Reason' would be displayed. Only kept the mandatory one and used it in place of the non-mandatory one. Forward-Port-Of: odoo/odoo#236684
This update optimizes how sales orders are accessed, specifically when filtering by sales team. By adding an index to the `sale.order.team_id` field, the system now searches more efficiently, reducing delays and improving the speed of reports and data views related to sales teams. This enhances the overall performance of our sales tracking processes.
Original PR description
`team_id` might be used in filters to conditionally see related `sale.order` for a specific (or set of) sales teams. If the field isn't indexed, it's a Sequential Scan on `sale_order`, which can be a large table. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237116
This update resolves issues with concurrent database writes impacting Viva Wallet notifications, preventing duplicate or delayed messages to the POS. The change streamlines data transmission via websocket and adds safeguards to handle failed payment requests and unexpected webhook events, ensuring smoother operation across multiple Viva terminals.
Original PR description
When using many Viva terminals linked to the same DB, there could be many serialization errors due to concurrent writes to the DB. This is because the webhook controller writes to the…
When using many Viva terminals linked to the same DB, there could be many serialization errors due to concurrent writes to the DB. This is because the webhook controller writes to the `viva_wallet_latest_response` field of the payment method. The webhook request would be automatically retried later, but this could result in duplicate notifications being sent to the POS, or notifications being handled too late. This commit stops using the `viva_wallet_latest_response` field, instead sending the information directly via the websocket to the POS. Only the required information is sent to reduce the size of the message. In addition, there are two other minor fixes: - In the event that the initial payment request to Viva failed, the POS will no longer poll the payment status (this resulted in a Session ID not found error). - The webhook controller will now check the event type it receives, and only process the 'Transaction Payment Created' events. This should prevent any unintended behaviour if other webhooks are set up in Viva. opw-5226966 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a visual issue in the Contacts module where the 'parent_id' field in the new contact form lacked a placeholder. The fix ensures that the placeholder 'Company Name...' is displayed correctly when creating a new individual contact, improving the user experience.
Original PR description
### Steps to reproduce: - Go to Contacts > Contacts > New - Change it to "individual" type #### > The "parent_id" field should have a place holder "Company Name..." ### Cause of the issue: The…
### Steps to reproduce: - Go to Contacts > Contacts > New - Change it to "individual" type #### > The "parent_id" field should have a place holder "Company Name..." ### Cause of the issue: The `parent_id` field of the res.partner form uses the `res_partner_many2one` widget: https://github.com/odoo/odoo/blob/58b888992f80a58fecdb92e23fea0050f2178faf/odoo/addons/base/views/res_partner_views.xml#L164-L166 and is therefore relying on the `PartnerAutoCompleteMany2XField`. However, this template tries to recover its placeholder from the `placeholder` attribute of the Component: https://github.com/odoo/odoo/blob/58b888992f80a58fecdb92e23fea0050f2178faf/addons/partner_autocomplete/static/src/xml/partner_autocomplete.xml#L41-L50 even thought this attribute is not defined and the placeholder should be recovered from its props: https://github.com/odoo/odoo/blob/60e0529b98098b019ade09aad97cc6e359bc0755/addons/web/static/src/views/fields/relational_utils.xml#L35-L38 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where increasing stock quantities didn't accurately reflect the reservation process, leading to incorrect move line creation. Now, the system first checks available quantities before creating the move line, ensuring quantity increases align with the standard stock reservation logic. This improves the reliability of stock adjustments.
Original PR description
Increasing the quantity of a stock move will create a move line with the same data as the stock move (location and product), no lot, nor package. This commit make the increase of quantity mimic the reservation process by getting first the available quants. The move line are then created accordingly. Backport of odoo/odoo#230344 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing the successful installation of the UK Construction Industry Scheme for companies with branches. The previous version created duplicate account codes, resulting in installation errors. Now, the system correctly handles branch companies, allowing for seamless UK reporting installation.
Original PR description
Before this commit: Steps 1) Create a UK localization company 2) Create a branch for that company 3) Try to install UK - Construction Industry Scheme (l10n_uk_reports_cis) => A Validation Error is raised with the message `Account codes must be unique. You can't create accounts with these duplicate codes: 220001, 220101, 220201`, This occurs because the `_l10n_uk_reports_cis_post_init()` method is creating accounts for each UK company even if they aren't root companies (branch). After this commit: UK - Construction Industry Scheme (l10n_uk_reports_cis) is installed successfully with UK companies that have branches. opw-5326079
This update streamlines account reporting settings for users in specific countries. It automatically displays relevant settings based on report type (monthly, non-monthly) and fiscal year, preventing confusion and ensuring accurate reporting. This improves the user experience by only showing necessary options.
Original PR description
We're adding several countries to the settings, each time a user from this country has specific fiscal year and does non-monthly reporting. It's cumbersome, as we have to know in which country it's acceptable. At the same time, we don't want to show a setting if it's useless to the user. It will just confuse him. So, we should show this setting as soon as the report will complain: - If it's monthly and he does not start at the beginning of the month. - If he does non-monthly and does not end on 31st of December. We could be even more selective and also compute which months would be valid if in quarterly and other modes but we think it's fine for these cases.
This update fixes an issue where archived users were incorrectly sending out automated follow-up emails for invoices and partners. The change ensures that only active users are designated as the sender, preventing misdirected notifications and improving email reliability. This resolves a bug identified in version 18.0.
Original PR description
### Issue: If an archived user is set as the Sales person on an invoice or as the followup responsible on a partner, it will be the one sending the automatic followups. ### Steps to reproduce: - Create a partner and an overdue invoice for this partner - Change the "Salesperson" of the invoice to another user - Archive this user - Accounting > Customer > Followup Reports - Click on the partner created earlier - Click the actions and "Process Automatic Follow-ups" - [17.0] Traceback - [18.0+] The sent message is from the user that was archived ### Cause: `_get_followup_responsible()` does not check is the users it returns are active or not. ### Solution: Create an iterable with all the possibilities and iterate on it to return the first active user in the list. Fallback on `self.env.user`. opw-5153159 Forward-Port-Of: odoo/enterprise#98807
This update optimizes how Odoo matches bank transactions with sale orders, resulting in a significant speed improvement. By removing an inefficient query and leveraging an index, the process is now much faster, leading to quicker reporting and improved system performance. This change addresses a performance bottleneck.
Original PR description
Before this commit, finding a match between the bank transactions and sale orders was done via an unoptimized query that is preventing postgres from using any index. This commit removes the unnecessary CTE by simply doing the query directly on the sale_order table. This way we can also use a trigram index on the regex used for matching and postgres will be able to utilize it for faster search. Benchmarks: | Num sale_order | Before | After | | -------------- | ------ | ------ | | 1391909 | 3.88 s | 0.27 s | opw-5139457
This update resolves an issue where subsequent patches weren't consistently applied within the Odoo web module. Specifically, if the object itself isn't utilized, subsequent patching attempts fail. This change ensures that patches are correctly applied, addressing a technical limitation that could impact future updates. The fix was prompted by a related issue and is part of the ongoing maintenance of the Odoo web module.
Original PR description
If we don't use the object itself, we can't get subsequent patches. One example where this is needed: https://github.com/OCA/web/pull/3365 cc @moduon MT-11823 fyi @yajo --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a potential issue where changes to related records weren't consistently reflected across multiple linked data fields. The update ensures that all relevant data is synchronized during updates, preventing data inconsistencies and improving data accuracy. This primarily impacts how data is updated within certain Odoo modules.
Original PR description
Some models have several One2many (some with a domain and another without by example) targeting the same Many2one. In this case, when we create a new record, add new line in one of this One2many and modifying any else that triggers onchange. The onchange will contains the line in one of the sibling one2many but not the other, and then during the `modified`, the ORM may used the one2many that doesn't contains any lines, and that's miss some compute to recompute.... To avoid this situation, we patch the sibling one2many when one of them contains the line during the all onchange process.
This update resolves a bug that caused payments using the 'Own Checks' method in foreign currencies to fail due to an incorrect calculation. The fix corrects a typo in the code, ensuring payments are properly balanced and processed correctly. This improves the reliability of outgoing payments.
Original PR description
Setup: - Install l10n_latam_check - Set an outstanding payment account on the outgoing payment method "Own Checks" in the "Bank" journal. - Activate a foreign currency Steps to reproduce: - Go to "Accounting/Vendors/Payments" - Create new payment with a foreign currency, with the journal "Bank" and "Own Checks" as payment method - Create 3 "Checks" lines (whatever dates or amounts) - Post -> Invalid Operation: The entry is not balanced. Issue: - There appears to be a typo in `_l10n_latam_check_split_move`, where `liquidity_balance` is used instead of `liquidity_balance_total` opw-5151228
This update resolves an issue where the 'Select All' button in the document control panel only selected the first 40 files. Now, all files selected through any method (including 'Select All') are correctly included when performing actions like duplication or moving to the trash. This ensures consistent and reliable functionality for managing large document sets.
Original PR description
Steps to Reproduce =================== 1. Upload more than 40+ files in a folder. (One page displays upto 40 docs) 2. Use the checkbox to select all files on the page (this selects only 40 files) 3.…
Steps to Reproduce =================== 1. Upload more than 40+ files in a folder. (One page displays upto 40 docs) 2. Use the checkbox to select all files on the page (this selects only 40 files) 3. Click the 'Select All' button in the control panel to select all 40+ files. 4. Now, try duplicating or moving them to the trash. => Only the first 40 selected files (on the single page) are considered for action, not all the selected files. Technical ========== For documents control panel action we have custom handling for selecting records and executing action. We use `model.root.selection` which only consider records in current page, case of select all records from other pages is missed here. After this PR ================== - All selected records are considered for the actions - Added custom `getResIds` method to get filtered `resIds` as per domain. Note: `getResIds` in DynamicList doesn't have custom domain feature so create our own as per use case Task-4700841
This update enhances the compatibility of the Enterprise module with newer IoT Boxes (v19.1 and above). The change ensures proper functionality by verifying the 'bb status' within the system's data tracking, resolving a previous issue related to formatting inconsistencies. This update maintains a smooth experience for users utilizing IoT Box integrations.
Original PR description
We now check the bb status in `data.status` in addition to `data.status.status` to ensure compatibility with v19.1+ IoT Boxes. This commit also fixes an issue introduced in [this fw port](https://github.com/odoo/enterprise/pull/100205), where 2 lines where mistakenly unindented
This update resolves an issue where helpdesk ticket assignments were failing due to incorrect resource selection. The fix ensures that only resources within the same company as the helpdesk team are considered, preventing access errors and improving ticket assignment functionality. This improves the reliability of the helpdesk module.
Original PR description
To reproduce: ============= - with `hr_contract` and `helpdesk` installed - create a user with 2 resources in 2 different companies - add the user as member of a helpdesk team of company A - enable…
To reproduce: ============= - with `hr_contract` and `helpdesk` installed - create a user with 2 resources in 2 different companies - add the user as member of a helpdesk team of company A - enable auto assignment on the team - try to create a ticket on that team -> error Problem: ======== When computing working intervals for resources of the team members, we were considering all resources of the user, even those not in the same company as the helpdesk team. Which lead to access errors when trying to read data from the other company. This issue was not caught before as we were never reading data from the resources, until this [commit](https://github.com/odoo/odoo/commit/79a559c9741410ad861c107e395b2fc486da95e8) where we try reading `employee_id` of the resource. Solution: ========= Filter resources to keep only those in the same company as the helpdesk team. P.S: ==== the removed test was trying to test assigning ticket to user that is not in the same company as the helpdesk team, which is not correct so the test was removed. opw-[2749232](https://www.odoo.com/web#id=2749232&view_type=form&model=project.task)
This update resolves an issue where the Gantt view incorrectly grayed out days when flexible working hours were enabled. The fix ensures that all days are treated as working days, accurately reflecting employee availability and improving the view's reliability. This change impacts project scheduling accuracy.
Original PR description
To reproduce: ============= 1. Activate flexible working hours on the company calendar 2. Go to Project app -> all tasks 3. Switch to Gantt view notice that on the unassigned tasks row, two days are grayed out randomly Problem: ======== When flexible working hours is activated, the unavailability intervals are computed with an estimation: we take the total of working hours per week and we divide it by number of hours per day to get `N` days, so we estimate that from `now` to `now + N` days are working days, and the rest are non-working days. This is wrong because the working hours may not be evenly distributed over the week, and between today and tomorrow we get different unavailability intervals. Solution: ========= When flexible working hours is activated, we consider that all days are working days, so there is no unavailability interval to consider. opw-5257081
This update fixes an issue where the Activity Menu's filtering options (Late, Today, Future) didn't correctly display Approval requests. The fix adds necessary filters to the Approvals search view, ensuring these options work consistently and align with other Odoo modules. This improves the user experience for managing approvals.
Original PR description
Issue: - In the Activity Menu, clicking "Late", "Today", or "Future" did not filter Approval requests and always returned all records. - The Approvals search view lacked the activity filters that these context defaults rely on. Fix: - Added the invisible activity filters (overdue, today, upcoming_all) to the Approvals search view. - Filters use `my_activity_date_deadline` to match Odoo's standard deadline-based activity filtering. Impact: - Activity Menu filtering now works correctly for Approvals and aligns with behavior in other modules. Task: 5261406 Forward-Port-Of: odoo/enterprise#99632
This update resolves a problem where the exchange rate was missing from invoices generated with certain currencies in Odoo 18. The underlying issue stemmed from how multiple country templates were linked, causing conflicts. This fix focuses on correcting the display of the exchange rate for invoices, ensuring accurate reporting.
Original PR description
Steps to reproduce: - install l10n_ae - switch to AE company - create an invoice with a currency != AED and print -> exchange rate shows - install l10n_sa_edi - print the invoice with the AE company -> in 17.0, the exchange rate is missing -> in 18.0, the template is broken The same fix can be applied for both 17.0 and 18.0. The main issue is that l10n_gcc_invoice is a template for 5 different countries, and all of them inherit it without primary=True, which results in many conflicts if several of these countries are installed on the database. Here, we only try to solve the most apparent issue, which is the broken template for the exchange rates. Note that in 19, a major PR has been fixing this inheriting issue: https://github.com/odoo/odoo/commit/1cddcab8b8626b34c437a51d320b0a3e4698dae7 opw-5215971 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236844
This update corrects a bug where tasks created from service products didn't automatically reflect the quantity of the corresponding sales order line. Now, when a service product with 'manual' service type is used to create a task from a sales order, the task's allocated hours will accurately match the order line quantity. This ensures accurate time tracking for service projects.
Original PR description
To reproduce: ============= - Create service product with `service_tracking = task_in_project` and `service_type = manual` - Create a SO with this product and set quantity on the line - Confirm the SO - check the created task, allocated hours is 0.0 instead of the quantity of the SO line Problem: ======== When creating tasks from SO lines, allocated hours is initialized to 0 then computed based on the SOL quantity except when the product's service_type is 'milestones' or 'manual'. Solution: ========= Following the logic in `write` method of `sale.order.line`, the allocated hours should be set to the SOL quantity. opw-5153467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue in Odoo 18.0 to 18.4 where changing a product's cost in a multi-company environment caused tax access errors. The problem stemmed from fetching taxes using a privileged (sudo) environment, leading to incorrect data and manual save failures. This fix, removing the privileged environment, ensures accurate tax calculations and prevents these errors.
Original PR description
from v18.0 to v18.4, in a multi-company environment, when a product with no income/expense account had its cost changed, all the taxes for other companies were being fetched which caused access errors when trying to view it after a manual save. This happens because the fetch is happening in a sudo environment because the stock valuation layer was being created as sudo, so all taxes were being fetched and probably because of cache pollution they were not being filtered properly, this is not happening in v19.0 because the stock valuation layer was removed, so everything is being called in a normal user environment, refer to this commit-08b62a4 task-5117882
This update resolves an issue where the account no followup feature wasn't consistently working correctly. The fix involves optimizing the search process for better accuracy and reliability, ensuring data is processed properly before searching. This improves the overall functionality of the account no followup module.
Original PR description
- unwrap Markup before applying regex substitution - word-bound search term
This update resolves an issue where document previews were not updating correctly after renaming documents. Previously, the preview displayed the old attachment name even after a successful rename. This change ensures that document previews always reflect the most current document name, improving data consistency and user experience.
Original PR description
BUG 1: --------- **steps to reproduce**: 1. Install documents 2. Open any document 3. Go to Action > Rename 4. Rename the document 5. Preview it and read the name showed there **issue**: When…
BUG 1:
---------
**steps to reproduce**:
1. Install documents
2. Open any document
3. Go to Action > Rename
4. Rename the document
5. Preview it and read the name showed there
**issue**:
When previewing the document, it still shows the old attachment name.
**observation**:
When renaming a document, only the document name was updated. The attachment name remained unchanged, which caused inconsistencies:
1. In the All Records section, the document name is displayed correctly. https://github.com/odoo/enterprise/blob/459e8ddaf6f67a556d35bf00e0fbb68eb1500a94/documents/views/documents_document_views.xml#L130
2. But in the Preview, the old attachment name was still shown, as it is taken from the attachment:
https://github.com/odoo/enterprise/blob/459e8ddaf6f67a556d35bf00e0fbb68eb1500a94/documents/static/src/views/hooks.js#L373-L383
**solution**:
Use the document name when previewing it
BUG 2:
---------
**steps to reproduce**:
1. Install Documents.
2. Open any document.
3. Rename it via the chatter.
4. Try renaming it again via the details panel.
**issue**:
After renaming a document twice through the details panel, the preview still displayed the old document name.
**cause**:
On the first rename, the [insert](https://github.com/odoo/enterprise/blob/691115d8a0b31322f64d35d82dc8c9ddbfcd39b0/documents/static/src/core/document_service.js#L96-L129)) method creates a new [store.Document](https://github.com/odoo/enterprise/blob/691115d8a0b31322f64d35d82dc8c9ddbfcd39b0/documents/static/src/views/hooks.js#L367-L393) record with the updated attachment name. However, The write method (used by chatter) skips reloading the record and linked attachment data on the second rename.
Unlike the Rename button, which uses web_save (and triggers a record reload via web_read), the chatter directly calls write without refreshing the attachment.
**Solution**:
Ensure the preview uses the document name from the document record, keeping it consistent after multiple renames via the details panel.
**Example:** Try to rename a "Invoice.pdf" document to "Invoice_rename.pdf"
<details>
<summary>Click here to see the results:</summary>
Before:
<img src="https://github.com/user-attachments/assets/563b7fb9-709c-4651-8492-032a7f353730"/>
After:
<img src="https://github.com/user-attachments/assets/6fc6bdfe-dd1e-4f3c-aaf7-821c44fd135d"/>
</details>
opw-5065433This update fixes an issue where vendor bill payment statuses remained incorrect after deleting or resetting payments. The change ensures that the bill's status accurately reflects the payment's state, resolving a discrepancy observed compared to customer invoices. This improves data consistency and reporting accuracy.
Original PR description
Steps to reproduce: ------------------------- 1. Install the Accounting module. 2. Create and confirm a Vendor Bill. 3. Click on Pay and create a payment for the bill. 4. Open the created payment…
Steps to reproduce: ------------------------- 1. Install the Accounting module. 2. Create and confirm a Vendor Bill. 3. Click on Pay and create a payment for the bill. 4. Open the created payment using the smart button. 5. Delete the payment or click on Reset to Draft. Observation: ------------------------- 1. On deleting the payment: The Vendor Bill still shows the "In Payment" status even after the payment is deleted. 2. On resetting the payment to draft: The Vendor Bill also remains in the "In Payment" status instead of reverting to "Not Paid". This behavior is not observed for customer invoices, where the payment state updates correctly in both cases. Issue: ------------------------- 1. Delete case: In the `unlink` method, https://github.com/odoo/odoo/blob/b991f766e28dc71f8627fdfbf2d59589d9707d3a/addons/account/models/account_payment.py#L938-L945 the `linked_invoices` variable only includes invoices that are reconciled (i.e., their journal items are matched). Since the Vendor Bill is not yet reconciled, it is excluded from recomputation. Hence, its `payment_state` remains unchanged. 2. Reset to draft case: In the `_compute_payment_state` method, https://github.com/odoo/odoo/blob/b991f766e28dc71f8627fdfbf2d59589d9707d3a/addons/account/models/account_move.py#L1162-L1163 the compute depends on the state of reconciled payments. However, since these payments are not reconciled, the compute method is not triggered, and the payment state remains outdated. Solution: ------------------------- Added `matched_payment_ids.state` in the depends of the `_compute_reconciled_payment_ids` method to ensure it recomputes correctly when payment state changes on setting payment to draft or deleting payment Ticket [link](https://www.odoo.com/odoo/project.task/5208772) opw-5208772
This update resolves an issue where adding content to the website header caused unexpected scrolling behavior. The fix removed a problematic variable that wasn't consistently updating, leading to a jumpy scroll. This ensures a smoother and more reliable user experience when adding or modifying content on the website.
Original PR description
Before this commit, the header height was stored in a global variable. This variable wasn't always updated, which led to issues regarding the scroll. When adding elements in the header that increased its height, the scroll would jump and showing / hiding the header. This commit removes the need of the headerHeight variable. Steps to reproduce the bug: - Add a "Text Highlight" inner content above the ContactUs button - Add multiple Title snippets below one another (When adding the third one, the page scroll indefinitely) (The number of snippets to drop may vary depending on the viewport) task-4267249 Forward-Port-Of: odoo/odoo#185812
This update fixes a translation error in the Netherlands (l10n_nl) module. The description for the 9% ST tax was previously incorrectly translated as 'TVA' (VAT). This change ensures accurate reporting and compliance with Dutch tax regulations, improving the accuracy of financial data.
Original PR description
The traduction of te description of the 9% ST tax was wrong and was TVA to get back on a sale tax task-5217323 Forward-Port-Of: odoo/odoo#236655
This update fixes an error in the Peru tax report (RVIE Sales 14.4) export that incorrectly included credit note amounts in the report. The fix ensures the report accurately reflects SUNAT regulations for credit note reporting, improving compliance and data accuracy for Peruvian businesses.
Original PR description
How to reproduce the issue: -With l10n_pe localization - Create an invoice for the previous period, generate a credit note for that invoice in the current period. - In the tax return with report VAT Report (RVIE Sales 14.4) (PE), download the txt file. - Columns 15(base_igv), 16(amount_discount), 17(tax_igv) and 18(tax_igv_discount) are wrong: the credit note is included in col 15 and 17 However, according to SUNAT spec the rule should be: - If the NC modifies a document issued in the same period: amounts must be reported in Col. 15 and 17 (with the negative sign already inherent in the NC). - If the NC modifies a document issued in previous periods: amounts must be reported in Col. 16 (Discount BI) and Col. 18 (Discount IGV/IPM) (values must be negative), and not in 15/17 opw-5094466
This update resolves an issue where invoices using specific document types within the l10n_ar localization pack couldn't be printed correctly. The fix ensures that the invoice template supports multiple Spanish languages, allowing printing regardless of whether es_AR is installed. This improves usability for customers using the Arabic localization.
Original PR description
#The issue: - With l10n_ar company - Make sure that the language es_AR is not installed. - Create an invoice where the Document type (l10n_latam_document_type_id) code is in 201, 202, 203, 206, 207, 208, 211, 212 or 213 - Try to print the invoice, the following error occurs: odoo.addons.base.models.ir_qweb.QWebException: Error while render the template UserError: Invalid language code: es_AR In the report_invoice template used in l10n_ar, if the document type is 201, 202, 203, 206, 207, 208, 211, 212, or 213, the amount in letters is mandatory. Currently, the template is hard-coded to use es_AR. As a result, if the customer does not have the es_AR language installed, the invoice cannot be printed, even if another Spanish language is available. opw-5079885 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where changes to the 'analytic.project_plan' system parameter didn't properly update related fields in the analytic accounting system. Now, when this parameter is modified, the system dynamically adjusts the associated fields on analytic lines, ensuring data consistency. This prevents errors and ensures accurate reporting.
Original PR description
A field on `account.analytic.line` is created for every plan using the `id` of the plan to make the names unique, like `x_plan{id}_id`. The plan that has the ID of the `analytic.project_plan`…
A field on `account.analytic.line` is created for every plan using the `id` of the plan to make the names unique, like `x_plan{id}_id`. The plan that has the ID of the `analytic.project_plan` parameter does not get a dynamic field, it uses `account_id`. If you change the system parameter for analytic.project_plan, the plan with the corresponding value will now use `account_id,` and the plan that corresponds to the previous default value will have no corresponding field on `account.analytic.line`.
So, when the project plan system parameter changes, the dynamic fields that are created for each analytic plan (apart from the project one) do not get updated.
Steps:
1. Set the `analytic.project_plan` system parameter to a value other than `1`
2. Enable `Analytic Accounting` setting under `Accounting > Analytic`
3. Create a sales order with a service product that creates a project.
4. Confirm sales order
5. Traceback: `ValueError: Invalid field account.analytic.line.x_plan1_id in leaf 'x_plan1_id', 'in', [23])`
We now extend the write method on `ir.config_parameter` so that when the value of the analytic.project_plan is changed the dynamic fields on `account.analytic.line` are properly added and removed. This solution always creates a field for the previous value and deletes a field for the new value so that no plan ever has two fields referencing it.
Ticket [link](https://www.odoo.com/odoo/project.task/5069381)
opw-5069381
Forward-Port-Of: odoo/odoo#231981