Daily updates from Odoo
Navigate
Branch
Thursday, December 11, 2025
215 changes
32 changes
Enhancements to existing features
This update ensures that newly imported customer and supplier records are correctly identified as ‘companies’ within Odoo. This improves data accuracy and streamlines processes related to invoicing and reporting. The change was made to align with best practices for account management.
Original PR description
Ensure imported partner records are marked as companies when creating new partners. Task-5353923 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239116 Forward-Port-Of: odoo/odoo#238793
Resolved issues and error corrections
This update optimizes how Odoo searches for sale orders linked to projects, significantly speeding up the loading time of the 'Settings' page. By adding an index, the system now efficiently locates relevant data, reducing the time taken to load project information. This improves overall user experience and system responsiveness.
Original PR description
Description ----------- Following odoo/odoo@238a41e35280256382f6509182b9e900fb4f7aba, the domain for `sale.order.line` in `_get_sale_order_items_query` was modified to search based on the relevant…
Description ----------- Following odoo/odoo@238a41e35280256382f6509182b9e900fb4f7aba, the domain for `sale.order.line` in `_get_sale_order_items_query` was modified to search based on the relevant `order_id` `id` or `project_id`. `project_id` is not indexed, leading to a heavy non-selective scan on the primary key for databases with many `sale. order` records. There is poor selectivity with the filter on `sale. order.line` resulting in a heavy join between `sale.order` and `sale.order.line`. This commit adds the missing index, allowing for `Bitmap Heap Scan` on both indexes and leveraging the selectivity of the project being currently opened. Benchmark --------- On a database with 3.5M `sale.order`, 12M `sale.order.line`, opening the "Settings" page of a project with a few sale lines associated with it took: | | Before | After | |--------------|--------|-------| | Timing (hot) | 9.1s | 5ms | Reference --------- opw-5280364 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239114 Forward-Port-Of: odoo/odoo#238995
This update fixes an issue where the LWF report incorrectly included data from previous departments when a new department was selected. The fix clears existing report data before generating a new report with the chosen department, ensuring accurate reporting of labour welfare fund contributions. This improves the reliability of the LWF report for users.
Original PR description
Step to reproduce: - Install l10n_in_hr_payroll. - Create 3-4 employee with labour welfare fund, all in different departments. - Open the LWF report wizard and do not select any department. -…
Step to reproduce: - Install l10n_in_hr_payroll. - Create 3-4 employee with labour welfare fund, all in different departments. - Open the LWF report wizard and do not select any department. - Download report , all employee will come in report. - Now select any department and download report again. - All employee(It is fetching previous data) + employee from selected department will come in report. Cause: - In '_compute_line_ids()' wizard computed field 'line_ids' doesn't properly reset previous lines as a result previous data remains in lines. - When the department is changed, the wizard id remain same, so previously lines added to wizard are coming with new lines. - Using `Command.link()` for new lines is invalid because it requires an existing database record ID, but wizard lines are creating inside a compute method so their IDs are only saved after the flush. Fix: - Since this is a stable version, clear the previously existing lines using 'Command.clear()' before creating new ones. Task - 5366498 Forward-Port-Of: odoo/enterprise#101190
This update fixes an issue where the debit note button was missing on credit notes and refunds. The button was recently moved to the invoice header, but this change only applied to invoices and bills. This fix ensures the button is visible for refunds, which is crucial for processing transactions in regions like Latin America.
Original PR description
The button for debit note is not visible on credit notes and refunds. Since f29c106b57dd6e8ca19ccc2d2479542f202d1c77 the button for debit note has been moved from action menu to the header of the invoice form, but the commit makes it only visible for invoices and bills, while it was also visible for credit notes and refunds before. The button needs to be also visible for CN/refunds as it is necessary for many countries, like latam countries opw-5385273 Forward-Port-Of: odoo/odoo#239019
This update resolves an issue where outdated records in the system's data management (ir.model.data) persisted after a model was removed. These lingering records could cause errors and instability. The fix ensures that these records are properly cleaned up, improving system reliability and preventing potential problems.
Original PR description
When a model is unlinked, the `ir.model.data` related to that model wasn't cleaned up. This leaves dangling records that can generate issues. sentry-6938852090 Forward-Port-Of: odoo/odoo#236615
This update resolves an issue where the demo stock data installation incorrectly used US currency, causing problems when users have databases with different currencies (like EUR). The fix ensures the demo data installation works correctly regardless of the company's currency, improving data consistency and usability.
Original PR description
Currently in the `_merge_move_itemgetter` the system call `self.company_id.currency_id.decimal_places`. However the demo data of stock create a database with US currency and some `stock.move` in it. If we have an existing database with EUR for example. The upper call will return a `currency_id.decimal_places` since we have multiple currency. The best solution, would be to split `_action_confirm` to do a loop by company. But it would need a small refactoring and we will do a minimal diff to fix this issue. Using the smallest currency among all the company is not always correct but it's a super edge case and we should probably remove this code since it went to far. Close #230965, #234078 Forward-Port-Of: odoo/odoo#239273
This update resolves an issue where a test for the website color picker was failing due to timing problems. The fix ensures the test waits for all steps in the color selection process, preventing inconsistent and unreliable test results. This improves the stability of the website customization feature.
Original PR description
__Behavior before commit:__ Since `edit` writes one character after the other, using it on a color picker to write an RGBA color calls `make_scss_customization` when the input value reaches the RGB color. Then, another call is made when the entire color is written (because they are both valid colors). However usually the test finished before the steps for the second call were reached because the `Deferred` was only waiting for the first call. __Fix:__ Wait for all steps to avoid nondeterministic behavior. Runbot error: https://runbot.odoo.com/odoo/runbot.build.error/234621
A recent change in the Employee Skills pie chart report caused an error when users clicked on individual data points. This fix prevents the error by addressing a removal of a previous list view functionality. Users can now reliably access the chart data.
Original PR description
Clicking a record in the Employee Skills pie chart report currently triggers a traceback. Steps to reproduce the error: - Install ``hr_skills`` module with demo data - Open any employee > In Resume…
Clicking a record in the Employee Skills pie chart report currently triggers a traceback. Steps to reproduce the error: - Install ``hr_skills`` module with demo data - Open any employee > In Resume tab, Click on TIMELINE - Switch to Pie chart > click on any record Traceback: ```py UndefinedColumn: column hr_employee_skill_history_report.id does not exist LINE 1: SELECT "hr_employee_skill_history_report"."id" FROM "hr_empl... ``` ``hr.employee.skill.history.report`` model is ``_auto=False``, meaning that no database table is created for this model. In earlier versions, clicking on the record opens the list view. In the [commit](https://github.com/odoo/odoo/commit/341fe890d2b7001dab1e3cd65ecb0c3bb4ed327e), list view was removed. So, now clicking on the record will lead to the above traceback. [1]: https://github.com/odoo/odoo/commit/341fe890d2b7001dab1e3cd65ecb0c3bb4ed327e sentry-7099766240 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue where website snippets were displaying incorrectly, often leaving them blank. The fix focuses on limiting the snippet's visibility to product pages, ensuring it functions as intended without impacting other website areas. This improves the overall user experience on product listings.
Original PR description
This PR fixes an issue introduced in Commit[^1] while trying to fix an issue with the alternative products section being displayed even with no alternative products. In Commit[^1], the rule was set in the snippet file, which worked but was affecting all the places where this snippet is displayed, which made the snippet preview empty. To ensure this does not happen, we scope the rule to the product page only, ensuring the snippet remains untouched. [^1]: https://github.com/odoo/odoo/commit/0dfc5a6cfbae808f2dc5c7042bc07180eaa49e9a task-5404601 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue in the German localization (l10n_de) module where changing a product's cost in a multi-company environment caused access errors and data inconsistencies. The problem stemmed from fetching taxes within a privileged (sudo) environment, leading to incorrect data retrieval. This fix ensures accurate tax calculations and data access after cost changes.
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 Forward-Port-Of: odoo/odoo#236931
This update ensures that a key stock test consistently produces the same results. Previously, slight timing differences in test execution could cause the test to fail intermittently. To guarantee reliable test results, the test now freezes time to eliminate these timing variations.
Original PR description
In a previous fix in #174442, we ensured that the order of moves when freeing reservation would remain deterministic, even if move dates were the same. In the test however, we didn't make sure that both moves were created at the exact same time, meaning that in some case, a millisecond could pass between the two moves creation, making the later assert checking if both dates are the same wrong, and making the test irrelevant. Now freeze the time at an irrelevant date just to make sure the test always does what it was intended to do. runbot-233470 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239229
This update fixes an issue where subscription details weren't being displayed correctly within the dashboard. Specifically, it corrected a filtering problem and ensured subscription titles were accurately shown. This improves the clarity and usability of the subscription section for users.
Original PR description
Before this commit, when subscriptions were linked to the analytic account of a project, the sale order items appears in an unwanted section when the section is unfolded. Meanwhile, when the subscription section is unfolded the title of the subscriptions items are not correctly displayed. The first issue is due to the fact that we did not correctly exclude the subscriptions items from the domain. The second issue is due to the fact that we fetch the field 'name' from the subscription search instead of the field 'display_name' task-5159781 Forward-Port-Of: odoo/enterprise#97238
This update corrects a technical issue that was preventing the generation of WPS files in the Saudi HR payroll module. The fix addresses an error caused by incorrect function usage, ensuring reports are now created reliably. This resolves a potential disruption to payroll reporting.
Original PR description
this commit addresses traceback errors occured due to incorrect usage of `_` function. task-5310946 Forward-Port-Of: odoo/enterprise#99789
This update resolves a problem in the tests for the 'pos_settle_due' module that was failing due to a hardcoded year. The fix ensures the tests work correctly regardless of the current year, improving the reliability of the testing process. This prevents potential disruptions during development and ensures accurate test results.
Original PR description
When running the pos_settle_due tests with faketime, the tour pos_settle_account_due was failing cause of a hardcoded year which would not work on another year. This is now fixed. runbot-error: 234052 Forward-Port-Of: odoo/enterprise#101217
This update fixes issues with the creation and formatting of snailmail reports. Specifically, a new function extracts PDF generation, ensuring consistent page layouts and cover pages. It also addresses a bug preventing the correct generation of followup reports, improving the reliability of snailmail communications.
Original PR description
#### [FIX] snailmail: extract report PDF generation function We extract a function `_generate_report_pdf` from `_fetch_attachment` to create the report PDF (and its filename). The resulting PDF's…
#### [FIX] snailmail: extract report PDF generation function We extract a function `_generate_report_pdf` from `_fetch_attachment` to create the report PDF (and its filename). The resulting PDF's margins are fixed and a cover page is added to it after the function is called in `_fetch_attachment`. The new function is extended in the related enterprise commit to generate the followup report inside `_fetch_attachment` (when sent via snailmail). This way it will respect the cover page option and page layout / size requirements. (See the related enterprise PR for more details.) #### [FIX] snailmail: extract letter resending function We extract a function `_resend_letters` from the `update_resend_action`. It handles the regeneration of letters after the cover option has been updated. This way the resending logic can easily extended to adjust the logic depending on attributes of the letter. The new function is extended in the related enterprise commit to disable the resending for followup report letters. This is necessary because the followup report requires special options to be generated that are not available at the point of the regeneration. #### references opw-5160121 opw-5209504 opw-5226366 Forward-Port-Of: odoo/odoo#238905 Forward-Port-Of: odoo/odoo#235699
This update fixes issues with sending follow-up reports via snailmail, specifically addressing address formatting, cover page functionality, and PDF layout compatibility with our Pingen provider. The changes ensure accurate address delivery, enable cover page options, and optimize the PDF for successful processing, preventing potential delays or rejections.
Original PR description
#### [FIX] snailmail_account_followup: fix address, cover page and layout Currently there is the following potential problem when sending the followup report via snailmail. 1. The address generation…
#### [FIX] snailmail_account_followup: fix address, cover page and layout
Currently there is the following potential problem when sending
the followup report via snailmail.
1. The address generation is not adjusted for snailmail. That can
lead to problems with the service we use to send the actual letter.
They validate the address rather strictly.
2. The cover page option does not work; it does not add a cover page.
So we can not work around problems with the address generation
by adding a cover page.
3. The layout / dimensions / margins of the generated document / PDF may not work
with our current snailmail provider (Pingen). But there is no error
message about it. (Although we do have something in the usual
snailmail flow)
4. In case the address is invalid we do not try to "print" / send the letter,
so the user does not receive any feedback.
This could be an issue in case multiple follow-up reports are sent
at the same time.
This commit fixes these issues. (See below for details.)
(1)
The logic for this already exists but it is only activated when
a context key is set. This is not the case currently.
After this commit we do set the key.
(2) & (3)
The issue is that we generate the PDF attachment before creating the
'snailmail.letter' record.
In the usual snailmail flow the PDF attachment generation is handled during the sending and
printing (in function `_fetch_attachment` on model 'snailmail.letter').
There is some special logic to
- add a cover page to the report PDF (if the option is selected)
- make sure the page dimensions of the PDF are okay
- overwrite the margins of the PDF with white to make sure the PDF is
not rejected by Pingen because of this
But all this only happens if we do not have an attachment already.
(So it does not happen currently with the followup report)
For this a function called `_generate_report_pdf` was extracted from `_fetch_attachment`
in the related community commit to generate the report PDF (and its
filename). The function is extended here to be able to generate the
followup report.
(4)
We try to print / send the letter even if the address is invalid
Reproduce (i.e. for the cover page issue; but it explains how to get
the PDF that will be sent in general)
1. Install `snailmail_account_followup`
2. Create an overdue invoice
3. Set the "Add a Cover Page" option
(Settings -> Accounting -> section "Customer Invoices")
- enabled to test for the cover page
- disabled to test that the address generation is adjusted
4. Send a follow-up report:
- On 17.0: Accounting -> menu: "Customers" / "Follow-up Reports"
-> click on a line / partner -> button "Follow up"
- On 18.0+: partner form view -> tab "Accounting"
-> section "invoice follow-ups" -> button "Send"
5. Go to the snailmail letter:
In debug mode: Settings -> menu: "Technical" -> section: "Email" -> "Snailmail Letters"
(or just search for "snailmail" in the main screen)
And select the letter
6. Download the PDF document
#### [FIX] snailmail_account_followup: forbid regenerating failed letters
The wizard to resend failed letters which allows to change the
cover page option is broken: The follow-up report can not be regenerated
correctly because it requires special follow-up specific `options` that are
lost after the initial pdf generation for the letter.
Currently it can happen that the follow-up PDF is regenerated but
without (actual) content (table listing the overdue amounts).
After this commit we cancel the snailmail letters and show an
error notification indicating that the followup needs to be done again to
create a new letter.
Reproduce
(needs credit on IAP or locally edit this function https://github.com/odoo/odoo/blob/3ffd51f1cb18e3f4fb0367c4a498d7438e0c0357/addons/snailmail/static/src/core_ui/message_patch.js#L11
to open the resend wizard `this.openFormatLetterAction()` for `sn_credit` error or always)
1. Install `snailmail_account_followup`
2. Create an overdue invoice
3. Ensure the address of the partner causes issues with Pingen
4. Ensure the cover page option is disabled:
Settings -> Accounting -> section "Customer Invoices"
5. Send a follow-up report:
- On 17.0: Accounting -> menu: "Customers" / "Follow-up Reports"
-> click on a line / partner -> button "Follow up"
- On 18.0+: partner form view -> tab "Accounting"
-> section "invoice follow-ups" -> button "Send"
6. Make some modifications like editing the follow-up message or a custom attachment
7. Download the snailmail letter PDF (see previous commit for details)
8. In the chatter go to the message saying "Letter sent by post with Snailmai"
9. Click on the red symbol (paper plane) next to the name
10. A "Format Error" wizard should show up
11. Select "Add a Cover Page"
12. Click the button "Update Config and Re-Send"
13. Download the snailmail letter PDF (see previous commit for details)
14. Compare PDFs from 7 and 13; they are different (not just the cover page)
#### references
opw-5160121
opw-5209504
opw-5226366
Forward-Port-Of: odoo/enterprise#101596
Forward-Port-Of: odoo/enterprise#99491This update resolves an issue where the Czech VAT control statement incorrectly calculated amounts for invoices in foreign currencies (specifically EUR). The fix ensures accurate reporting by using the absolute value of the signed total when foreign currency amounts are processed, aligning with Czech tax regulations.
Original PR description
With l10n_cz_reports: - Create a currency exchange between CZK and EUR where the EUR is valued at least at twice the amount of CZK. - Create an invoice in EUR, with a line with price_unit 5000 and a tax. - In the CZ Tax Report, in the VAT control statement, the converted amount is found in section B.3, which contains received taxable supplies and provided payments up to CZK 10,000. However, the converted amount of the invoice in CZK is higher than 10,000. In `_report_custom_engine_control_statement`, the amount used to check whether the move should be included in this section uses `amount_total`, which in the case of foreign currency gives the wrong result. If the move is in a foreign currency the total is not in CZK so we have to use the absolute value of the signed total. opw-5080339 Forward-Port-Of: odoo/enterprise#100456
This update fixes an issue where batch barcode scanning wasn't working correctly with multiple pickings. The system now correctly merges moves by picking, ensuring accurate tracking of batch inventory. This improves the reliability of batch management within the Odoo Enterprise system.
Original PR description
Steps to reproduce ----- - Enable batch pickings - Create a product - Create 2 receptions for the product (qty > 1) - Create a batch with the 2 transfers - Open the batch in barcode - Scan part of…
Steps to reproduce ----- - Enable batch pickings - Create a product - Create 2 receptions for the product (qty > 1) - Create a batch with the 2 transfers - Open the batch in barcode - Scan part of both pickings - Go back to the barcode main screen - Open the batch again > Both pickings have their demand = partially delivered quantity Cause ----- When leaving the page, we trigger https://github.com/odoo/enterprise/blob/91d6a096e88e4f11d7504d7a4052a57e2cb09ca8/stock_barcode/models/stock_move.py#L65-L68 in which we end up merging the moves together https://github.com/odoo/enterprise/blob/91d6a096e88e4f11d7504d7a4052a57e2cb09ca8/stock_barcode/models/stock_move.py#L51 This has been added by 9753c24 (ade0bef in 17.0) The problem is that `_merge_moves` merges all of the moves into the first of `merge_into` https://github.com/odoo/odoo/blob/26761e04bb648b46cd35697c6cbc8ed1e27fef90/addons/stock/models/stock_move.py#L1086-L1088 This, however, doesn't make much sense for batches because the moves can be from different pickings. ----- Ticket: opw-5163740 Forward-Port-Of: odoo/enterprise#101630 Forward-Port-Of: odoo/enterprise#100940
This update fixes a technical issue where users could inadvertently modify parser rules after the parser was initially set up. This change ensures data integrity by preventing unauthorized modifications to the parser, improving the stability and reliability of Odoo's data processing.
Original PR description
The parser rules cannot be modified once the parser has been instantiated. task-5091744 Forward-Port-Of: odoo/odoo#239046
This update resolves a problem where invoices generated in Arabic were sometimes printed incorrectly, with missing logos or repeated headers. The fix reduces the number of invoices processed at once, allowing the printing software to render them correctly. This ensures all invoices are printed accurately.
Original PR description
Repro steps: 1. Create a customer whose language is Arabic 2. Create 16 or more invoices for that customer 3. Send these invoices together all at once Issue: PDFs generated for the invoices are strange, some have missing logo in the header, while others have the header repeated multiple times on the page. Root cause: wkhtmltopdf does not have enough time to render all these PDFs at once, so it fails to render them properly leading to these half-rendered PDFs. Solution: This commit solves this issue by reducing the number of invoices that the cron processes at once from 20 to only 10 (the default of the function _cron_account_move_send). This would ensure that wkhtmltopdf has enough time to process and render a batch of invoices at once. opw-4997495 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236810
This update fixes an issue where GIF image sizes were incorrectly displayed in the Odoo builder. A previous workaround was removed, and the system now accurately shows the size of GIF images, aligning with other image types. This ensures consistent and accurate image representation within the builder.
Original PR description
`*` = html_builder, html_editor A previous workaround [[1]](https://github.com/odoo/odoo/commit/520dde6f20742229de32c7bf781ab4208284ee79) hid GIF file sizes in the builder because `_processImage` used to return incorrect data for GIFs, causing their size to appear as "NaN kb". The underlying `_processImage` issue was fixed in [[2]](https://github.com/odoo/odoo/commit/27be6d81497b49939d039361dc602d4575e23502), but the workaround from [[1]](https://github.com/odoo/odoo/commit/520dde6f20742229de32c7bf781ab4208284ee79) was never reverted. This commit removes that leftover logic and restores correct size display for GIF images, bringing them back in line with other image types. task-[5071548](https://www.odoo.com/odoo/project.task/5071548) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures compatibility with new IoT Boxes by adding a necessary request parameter. The customer display data service was recently simplified, but this change restores functionality to support the v19.1 IoT Boxes and their response formats. This ensures a smooth experience for users utilizing these devices.
Original PR description
In `saas-18.4` and `19.0` the customer display data service was simplified as we refactored to control IoT displays with actions instead of controllers.
However, to ensure compatibility with v19.1 IoT Boxes, we need to add a request parameter back and to accept both responses: `result: { data: { ... } }` and `result: { ... }`.This update resolves an issue where document previews were not updating correctly after renaming documents. The fix ensures that the preview always displays the most recent document name, regardless of how the document was renamed (e.g., via the 'Rename' action or the chatter interface).
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-5065433
Forward-Port-Of: odoo/enterprise#101183
Forward-Port-Of: odoo/enterprise#95111This update resolves a technical issue that caused a traceback when reloading the WorkEntries page in Odoo Studio. The fix ensures Studio correctly loads the page after a reload, improving stability and preventing disruptions for users. This change focuses on internal technical improvements.
Original PR description
**Verison:** - saas-18.2 **Steps to reproduce:** - Go to an employee form view. - Click on the WorkEntries smart button. - Open Studio. - Reload page. **Issue:** - A traceback appears after reloading the page in Studio. **Cause:** - The smart button URL uses the model name hr.work.entry, but Studio’s service_action expects a path without dots. Because the action cannot be loaded correctly, the view breaks and triggers the traceback. **Solution:** - Return the proper path instead of the model name so that the action loads correctly. This prevents the error when reloading the page. task-5236317 Forward-Port-Of: odoo/odoo#239335 Forward-Port-Of: odoo/odoo#235662
This update resolves an issue where removing a video URL in the HTML editor would leave a broken iframe in the system, leading to errors. The fix ensures that when a video URL is deleted, the associated options are properly cleared, preventing the creation of invalid media entries and improving the user experience. This prevents 404 errors and ensures data integrity.
Original PR description
*=website **Steps to reproduce:** 1. Drop a video 2. Reopen the media dialog 3. Remove the URL 4. Confirm **Issue:** When the URL was removed and confirmed, an iframe without a valid source was saved, leading to a 404 error. **Fix:** When the video URL is cleared, VideoSelector component calls selectMedia with an empty object. MediaDialog did not previously handle this case, so the media selection was not cleared. Now we Update MediaDialog to treat an empty object as a clear-selection signal and disable the Add button accordingly. task-5190485 Forward-Port-Of: odoo/odoo#238884 Forward-Port-Of: odoo/odoo#234085
This update fixes issues where video settings were lost or not applied correctly when adding or editing video snippets. Specifically, it ensures that options from URLs and manual edits are now properly captured and applied, improving the user experience when embedding videos.
Original PR description
Issues: 1. Resetting options when dialog is closed without modification: When the media dialog is closed without changing any options and "Add" is clicked, the videoSelector component is reset,…
Issues:
1. Resetting options when dialog is closed without modification:
When the media dialog is closed without changing any options
and "Add" is clicked, the videoSelector component is reset, causing
previously selected parameters to be lost.
- Steps to reproduce:
- Drop a Video snippet.
- Double-click the snippet and toggle a few options (e.g., "Loop").
- Save the video configuration.
- Double-click the snippet again to open the video configurator.
- Save without making any changes.
- The options will be reset.
2. Embedding videos via Powerbox does not capture URL query parameters:
When embedding a video via Powerbox, option values from the URL
query parameters (like loop or autoplay) are not correctly applied.
- Steps to reproduce:
- Add any Text snippet.
- Paste a YouTube video URL with query parameters (e.g., ?loop=1&autoplay=1).
- Choose to embed the YouTube video from the Powerbox popup.
- The Video snippet is added without options enabled for the pasted URL.
3. Manual URL editing does not synchronize options:
Editing the video URL manually does not update the toggle states
of corresponding options.
- Steps to reproduce:
- Drop a Video snippet.
- Double-click the snippet and append query parameters to the URL.
- The option buttons should toggle according to the parameters, but they do not.
4. Dailymotion preview fails for protocol-independent URLs:
Previewing Dailymotion videos fails for URLs like //[www.dailymotion.com/](http://www.dailymotion.com/)....
- Fixes implemented:
- Preserve selected options when saving the Video snippet without any changes.
- Retrieve all query parameters from the URL and include them in the RPC request.
- Synchronize option toggles with the URL input when the user manually edits it.
- Fixed the Dailymotion regular expression to support protocol-independent
URLs (e.g., //[www.dailymotion.com/](http://www.dailymotion.com/)...).
task-4529118
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238732
Forward-Port-Of: odoo/odoo#210596This update fixes an issue where Turkish language translations weren't properly applied after installing the 'l10n_tr_nilvera' module. Previously, the system only activated the language but didn't update existing translations. Now, the installation process correctly updates translations across all modules, ensuring accurate Turkish language support.
Original PR description
### Issue: When installing "l10n_tr_nilvera" on a new DB the Turkish language is installed but the translation of previously installed modules are not updated. ### Steps to reproduce: - Install…
### Issue: When installing "l10n_tr_nilvera" on a new DB the Turkish language is installed but the translation of previously installed modules are not updated. ### Steps to reproduce: - Install 'l10n_tr_nilvera' and switch to a Saudi company - Check the view "report_invoice_document" - Click the translation icon on the view - No Turkish translations are loaded ### Cause: When installing "l10n_gcc_invoice" the Arabic language is installed ([src](https://github.com/odoo/odoo/blob/70404624d7ea6f971182cbe4f4fe8fc064d2afd8/addons/l10n_gcc_invoice/__init__.py#L4-L5)). But the method [`_activate_lang()`](https://github.com/odoo/odoo/blob/70404624d7ea6f971182cbe4f4fe8fc064d2afd8/odoo/addons/base/models/res_lang.py#L161-L169) only activates the language, it does not update the translations. ### Solution: Create a new method that activate the language and calls `_update_translations()` on the installed modules. opw-5219783 Forward-Port-Of: odoo/odoo#239310 Forward-Port-Of: odoo/odoo#237041
This update enhances user privacy by permanently providing access to the Cookie Policy page and allowing users to update their consent choices at any time. Previously, users could only access the policy through a popup that disappeared after accepting cookies. Now, changes to cookie preferences are correctly reflected, ensuring accurate tracking data.
Original PR description
This improvement enhances user control over cookie preferences by making the Cookie Policy page (/cookie-policy) more accessible and allowing users to modify their consent at any time. **Issue:** -…
This improvement enhances user control over cookie preferences by making the Cookie Policy page (/cookie-policy) more accessible and allowing users to modify their consent at any time. **Issue:** - Previously, the only way to access the Cookie Policy page was through the link in the cookie consent popup. However, once users accepted cookies, the popup was no longer displayed, making it impossible to navigate to the policy page later. - Additionally, the Cookie Policy page had a button to reopen the cookie consent popup, but it was only visible if cookies were not accepted. Once cookies were accepted, the button was hidden, preventing users from changing their preferences. **Improvements:** - Added a permanent link to the Cookie Policy page in the copyright footer, ensuring it remains accessible at all times. - The cookie consent toggle button now remains visible even after a user has accepted cookies, allowing them to update their preferences at any time. task-[4502416](https://www.odoo.com/odoo/project/974/tasks/4502416) Forward-Port-Of: odoo/odoo#238772 Forward-Port-Of: odoo/odoo#203409
This update resolves an error that prevented users from creating consolidated invoices for multiple POS orders linked to the same customer. The fix ensures the correct date and refund reason are used when generating these invoices, allowing for seamless consolidated billing. This improves the reliability of the SA POS invoicing process.
Original PR description
Currently, an error occurs when trying to create a consolidated invoice for multiple POS orders associated with the same customer. **Steps to reproduce:** - Install the `l10n_sa_pos` module and…
Currently, an error occurs when trying to create a consolidated invoice for multiple POS orders associated with the same customer. **Steps to reproduce:** - Install the `l10n_sa_pos` module and switch to the `SA company`. - Create two POS orders for the `same customer` without invoicing at checkout. - Close the POS session and go to `Point of Sale` > `Orders`. - Select both orders > click `Create Invoice` > `confirm` the action. (Make sure `Consolidated Billing` is enabled) **Error:** `ValueError: Expected singleton: pos.order(8, 7)` **Root cause:** At [1], the code accesses `self.date_order` and `self.l10n_sa_reason`, but when consolidated billing is enabled, self contains multiple POS orders, which causes an error. **Fix:** This commit prevents the error by ensuring that the current datetime is assigned when creating a consolidated invoice, same as [2]. For the refund reason, a fix similar to [3] has been applied. [1]: https://github.com/odoo/odoo/blob/0c87b6b8836522913dbe77b57a018ac26012edca/addons/l10n_sa_pos/models/pos_order.py#L17-L18 [2]: https://github.com/odoo/odoo/blob/583bacdc8ad2b87b99b11d1e12dacf6e42edf22b/addons/point_of_sale/models/pos_order.py#L828-L832 [3]: https://github.com/odoo/odoo/blob/0c87b6b8836522913dbe77b57a018ac26012edca/addons/l10n_es_edi_tbai_pos/models/pos_order.py#L103-L107 opw-5266908 Forward-Port-Of: odoo/odoo#237677
This update resolves an issue where tests relying on internal URLs (like 'blob:') required a mock 'fetch' to work correctly. The change ensures these URLs function seamlessly without the need for mocking, enhancing test reliability and streamlining the testing process. This improves the consistency and accuracy of our automated tests.
Original PR description
Before this commit, internal URLs (i.e. "blob:" and "data:") required 'fetch' to be mocked to work. This is wierd because these requests are handled directly by the browser and shouldn't require any…
Before this commit, internal URLs (i.e. "blob:" and "data:") required
'fetch' to be mocked to work. This is wierd because these requests are
handled directly by the browser and shouldn't require any particular
manipulation from the (mocked) server.
This commit ensures that internal URLs still work without fetch being
mocked.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#239237
Forward-Port-Of: odoo/odoo#239011This update resolves a technical issue that was causing test failures. The change prevents the use of internal testing tools outside of test environments, ensuring the stability and reliability of our core system. This improves the overall quality and performance of the Odoo Enterprise platform.
Original PR description
This commit adapts tests failing due to a recent fix preventing the use of 'mock...' helpers outside of tests. - Community: https://github.com/odoo/odoo/pull/239237 Forward-Port-Of: odoo/enterprise#101780
This update resolves an issue where a previously revoked portal user could inadvertently become the default public user for a new website. This prevented potential confidentiality risks and ensures that website public user assignments are correctly managed. The fix maintains the ability to reactivate revoked users.
Original PR description
**Steps to reproduce:** - Go to a Contact - Go to the actions dropdown menu of the record - Grant Portal Access - Revoke that Access - Create a new Website in the same Company that Portal Access was…
**Steps to reproduce:**
- Go to a Contact
- Go to the actions dropdown menu of the record
- Grant Portal Access
- Revoke that Access
- Create a new Website in the same Company that Portal Access was granted
- That Contact's user will be set as the Public User for the new Website
- New orders and other default public user behavior will be assigned to this user
- The user will be mentionned in non-logged interactions
**Issue:**
Archived portal user are set as public user when revoked, and the default public user of a website is set on create to the first public user it finds in `_get_public_user`:
```
public_users = self.env.ref('base.group_public').sudo().with_context(active_test=False).users
public_users_for_company = public_users.filtered(lambda user: user.company_id == self)
if public_users_for_company:
return public_users_for_company[0]
```
This seems to be an issue as such user can be reactivated or be assigned to some transactions it has not made (confidentiality issue).
**Fix:**
Not sure of the best way to fix this. We could ensure new website always creates a new public user, or find a better way to use by default the `self.env.ref('base.public_user')` (or its company-specific copies) for the company of the website during creation (or in `_get_public_user`).
For now the fix remove the public group on the revoked portal user, to still be able to reactivate it later on, without mistaking it for the default public user of a company.
Also we can't remove the `with_context(active_test=False)` as default public user always seems to be disabled.
related: https://github.com/odoo/odoo/commit/83e22fd0636748c4fe1058fb93adfad2623fc31b
opw-4760550
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#236014
Forward-Port-Of: odoo/odoo#2337575 changes
Resolved issues and error corrections
This update fixes an issue where increasing the number of people in a POS appointment reservation didn't correctly update the allocated table resources. The fix ensures that changes to reservation size are accurately reflected, preventing incorrect capacity displays and ensuring accurate resource management. This improves the user experience when managing bookings.
Original PR description
Currently, updating a POS appointment reservation from the gantt view to increase the number of people does not update the allocated resources. The booking modification is not saved and the UI…
Currently, updating a POS appointment reservation from the gantt view to increase the number of people does not update the allocated resources. The booking modification is not saved and the UI appears unchanged. Steps to Reproduce: 1) Install Restaurant and Appointments app with a demo. Enable booking for the restaurant 2) Open POS restaurant and go to Booking, switch to Gantt view. 3) Create a reservation for 2 people on a table with capacity 2. 4) Edit the booking to 4 people and add another table with capacity 2 and save. 5) The reservation remains at 2 seats and changes are lost. Root cause: After [this commit](https://github.com/odoo/enterprise/pull/81810/commits/e710cebceab096f48e044b5b0229de743a204864), the field `waiting_list_capacity` was introduced but the write() method was not present to propagate this value to `resource_total_capacity_reserved`, causing incorrect capacity computation in the `_inverse_resource_ids_or_capacity` method at [1]. FIX: Add `write()` to propagate `waiting_list_capacity` into `resource_total_capacity_reserved` to ensure correct recompute and resource update. [1]- https://github.com/odoo/enterprise/blob/763b34029253a786d1e4bf09a780c1fb799f0ba5/appointment/models/calendar_event.py#L265-L266 Before Fix: <img width="1911" height="965" alt="image" src="https://github.com/user-attachments/assets/1470c656-7e8b-42bc-96c5-1fd240489ec0" /> After Fix: <img width="1909" height="961" alt="image" src="https://github.com/user-attachments/assets/ce3b1a46-4e33-42f8-a902-461e05220c23" /> Note: This fix needs to be merged only in versions 18.3 and 18.4. since in version 18.0-18.2 and 19.0 the `resource_ids` is calculated based on `resource_total_capacity_reserved`(for 18.0-18.2) and `total_capacity_reserved`(for 19.0). opw-5354559
This update resolves a bug that prevented users from setting invalid default values for certain fields. Specifically, attempting to set an integer as a default date caused an error. The fix ensures users can only define valid default values, improving data integrity and preventing unexpected system behavior.
Original PR description
Steps:
- Create a user defined defaults value
- Model: res.partner
- Field: date
- Value: 1
- Create a new contact
Actual result:
- invalid field type
- 'int' object is not subscriptable (depends of field type)
Expected result:
- No error
- User is not able to put an invalid value as a default
task-3729963
Forward-Port-Of: odoo/odoo#237265
Forward-Port-Of: odoo/odoo#225991This update resolves an issue where CFDI invoices with global discounts were failing due to incorrect discount allocation. The fix corrects a bug in how discounts are distributed, ensuring invoices can be successfully sent to the PAC (Payment Authorization Center) in Mexican companies.
Original PR description
**PROBLEM** With a Mexican company, when trying to send a CFDI with a global discount, it can happen that after the repartition of the discount we have lines with a negative amount, so we can't send…
**PROBLEM** With a Mexican company, when trying to send a CFDI with a global discount, it can happen that after the repartition of the discount we have lines with a negative amount, so we can't send the CFDI. **STEP TO REPRODUCE** 1. Take a Mexican company 2. create a quotation with, product A = 1$, product B = 100$, global discount of 15% 3. create an invoice using this quotation, confirm it and try sending the CDFI. 4. the following error will appear : "Error when sending the CFDI to the PAC: Failed to distribute some negative lines" **CAUSE** In account, the function `_normalize_target_factor()` takes a list of dictionary `target_factors`, with the keys being invoice lines (the targets) and the keys being weights (the factors). It is used to normalize the weight associated with the lines, to later use them to dispatch things like discounts to those lines. This function also does a sort on the weight, and return a list containing pairs of index and weights. This is useful only in the function `_distribute_delta_amount_smoothly()`, other functions doesn't work well with the sorted returned list: they don't use the index, and dispatch discounts to the wrong lines. https://github.com/odoo/enterprise/pull/101109 adds a test in l10n_mx to reproduce the client use case.
This update resolves an issue where previously revoked portal users could inadvertently become the default public user for new websites. This prevented potential confidentiality risks and ensures that website public user settings are correctly managed. The fix maintains the ability to reactivate these users while preventing misconfiguration.
Original PR description
**Steps to reproduce:** - Go to a Contact - Go to the actions dropdown menu of the record - Grant Portal Access - Revoke that Access - Create a new Website in the same Company that Portal Access was…
**Steps to reproduce:**
- Go to a Contact
- Go to the actions dropdown menu of the record
- Grant Portal Access
- Revoke that Access
- Create a new Website in the same Company that Portal Access was granted
- That Contact's user will be set as the Public User for the new Website
- New orders and other default public user behavior will be assigned to this user
- The user will be mentionned in non-logged interactions
**Issue:**
Archived portal user are set as public user when revoked, and the default public user of a website is set on create to the first public user it finds in `_get_public_user`:
```
public_users = self.env.ref('base.group_public').sudo().with_context(active_test=False).users
public_users_for_company = public_users.filtered(lambda user: user.company_id == self)
if public_users_for_company:
return public_users_for_company[0]
```
This seems to be an issue as such user can be reactivated or be assigned to some transactions it has not made (confidentiality issue).
**Fix:**
Not sure of the best way to fix this. We could ensure new website always creates a new public user, or find a better way to use by default the `self.env.ref('base.public_user')` (or its company-specific copies) for the company of the website during creation (or in `_get_public_user`).
For now the fix remove the public group on the revoked portal user, to still be able to reactivate it later on, without mistaking it for the default public user of a company.
Also we can't remove the `with_context(active_test=False)` as default public user always seems to be disabled.
related: https://github.com/odoo/odoo/commit/83e22fd0636748c4fe1058fb93adfad2623fc31b
opw-4760550
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#236014
Forward-Port-Of: odoo/odoo#233757This update fixes a bug where the 'Other Expenses' account type wasn't reflected in the Balance Sheet report. A new account type was recently added to simplify vendor bill expense tracking. This change ensures all financial data is accurately represented in the Balance Sheet.
Original PR description
In saas-18.3 a new account type was added: "Other Expenses" These accounts are excluded from the account many2one field to make it easier to find relevant expense accounts for vendor bills. Issue: This account type is not included in the Balance Sheet report. see comment in opw-5269456 related to opw-5191111
3 changes
Resolved issues and error corrections
This update fixes an issue where payroll payments were incorrectly linked to the employee's bank account instead of the correct vendor account (like the IRS). The change ensures payments are accurately routed to the appropriate bank account, resolving a payment processing error. Automated tests have been added to verify this fix.
Original PR description
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying…
## Reproducing steps 1. Create a DB with demo data (hr,hr_payroll,accountant modules) 2. Set the bank account of Mitchell Admin (in Personal employee notebook page): create a new one by specifying the account number (here is a random account IT22M8576110068R4A56E760901) and setting it as "trusted") 3. Set the bank account of the Internal Revenue Service (IRS) partner (also set it as trusted, and here is another random account: IT77H400725028682A0R202P050) 4. Create a new Off-Cycle Payslip : a. Payroll -> Payslips -> Payslips -> New Off-Cycle button b. Set Mitchell Admin as the employee of the payslip c. Change the Structure to "United States: Regular Pay" d. Compute Sheets 5. Create payments : a. Go to the Journal Entries linked to the payslip, and Post them b. Go back to the payslip and 'Pay' c. In the new wizard: Click on 'Create Payments' 6. Go back to the journal entries, a new button should've appeared on top of the page for the payments (click it now!) 7. Click on the PAY00001 (it the Federal Income Tax which is made to the Internal Revenue Service (ISR) and notice that the bank account used in payment is the bank account of the employee (should be the ISR account obviously) ## Purpose Modifying `account.payment.register` for fixing `hr.payslip` payments generation so that each payment is assigned the correct `partner_bank_id`. Also, fixing a SEPA payslip payment bug which says that the employee bank account is untrusted even if it isn't. ## Tests Adding `test_bank_account_partner_payment_payslip` test to check that the payment generated for Professional Tax is made to the correct bank account (before this fix, the selected account was always the employee bank account, whatever the vendor specified in the payment). Adding `test_sepa_payslip_partner_bank_id` test to check that the `partner_bank_id` is set after account_register_payment wizard has been initialized and that the action_create_payments (action launched when the user clicks on "Create Payments" button of the `account_register_payment` wizard) doesn't raise any error. This second test is not really specified in the specs, I just stumbled upon some stacktrace when coding this PR and decided to add a test to check the flow of sepa payment. [community#235475](https://github.com/odoo/odoo/pull/235475) [task-4979220](https://www.odoo.com/odoo/action-4043/4979220) Forward-Port-Of: odoo/enterprise#99373
This update fixes an issue where the barcode scanning app on mobile devices displayed stock locations in a list view, which wasn't ideal for small screens. By setting a mobile view preference, the app now prioritizes a more suitable kanban view, improving usability and the overall user experience.
Original PR description
Issue ===== On mobile, we should prioritize kanban views over list views because kanban views are usually more suitable for small device screen. That said, when a product's barcode is scanned in the Barcode app main menu, we show this product's stock locations but we do that with a list view, no matter if the user is on a big screen or a small screen. How to reproduce ================ On mobile device: - Enable location and have a product with a barcode and with quantities in two different locations; - Open Barcode app; - Scan the product's barcode => The product's stock locations are displayed in a list view, which is not very pratical on small device. Fix === The action key `mobile_view_mode` was not set, with this key, we can define what view type we want to prioritize for mobile device. [opw-5180783](https://www.odoo.com/odoo/project/49/tasks/5180783) Forward-Port-Of: odoo/enterprise#101336
This update fixes an issue where scanning a lot in a batch transfer would incorrectly update a related line instead of a line without a lot. The change ensures that lotless lines are properly updated when a lot is scanned, improving the accuracy of inventory tracking during barcode-based transfers. This prevents data inconsistencies and ensures correct stock adjustments.
Original PR description
…f related line is complete ### Steps to reproduce: - In the settings enable Lots & Serials and Batch transfers - On the delivery operation types enable show reserved lots in the barcode tab - Create…
…f related line is complete ### Steps to reproduce: - In the settings enable Lots & Serials and Batch transfers - On the delivery operation types enable show reserved lots in the barcode tab - Create a storable product tracked by lots and put 10 x lot1 in stock - Create and confirm a delivery for 10 units - Create a batch transfer with your delivery - Process your transfer from the barcode app - Scan one unit of LOT1 and put in pack - Toggle sublines select the 0/9 subline without lots nor package - Scan LOT1 #### > The 1/1 LOT1 line with a pack is updated to 2/1 rather than the 0/9 ### Cause of the issue: Since e45249c2f6883d743a4e7d19e736c622e26a3d58 and 27bfb985a29e9f0abe94dec8a76bf6d08560fbc9 an override of the `_findLine` method has been introduced in `BarcodePickingBatchModel` to ensure that scanning a lot referenced by an already existing line of the batch transfer triggers an update of that line rather than an override of the lot of an other line. However, these lines should not priorities a completed line when there is line without a set lot. opw-5340865 Forward-Port-Of: odoo/enterprise#101611
15 changes
New functionality added to Odoo
This update improves the handling of Brazil's NFS-e tax reporting by incorporating ISO alpha-3 country code mappings. It also simplifies international transactions by skipping city validation for customers outside of Brazil. This ensures accurate tax calculations and compliance with Brazilian regulations.
Original PR description
In this commit: --- - Added a mapping to convert country codes to ISO aplha-3 format and included it in the Tax Calculation and NFS-e requests - Also updated the city validation to skip it for international transaction (customers outside Brazil). task-3851670
Enhancements to existing features
This update enhances the email notifications sent after a website is generated, providing a direct link to the newly created website. The email now dynamically adjusts its subject and utilizes the standard Odoo notification template, respecting the user's preferred notification method (inbox or email).
Original PR description
Improved import done email: - Dynamic subject - Uses the mail notification template - Button with url that redirects to the generated website (rather than the default published one). Also used the message_notify to respect the user choice for notification (odoo inbox or email).
This update enhances the user interface for selecting online accounts within Odoo Enterprise. The outdated 'online_account_radio' component has been removed, streamlining the process and improving usability. This change focuses on a better user experience for managing online accounts.
Original PR description
This commit refactor the online account selection widget to have a better ui. Removed the online_account_radio since it's not used anymore. task-5090281
This update enhances the HR Homeworking Calendar module by moving a key field to the Calendar module itself. This allows for better reuse of components and simplifies the overall design, leading to a more streamlined user experience for managing homeworking arrangements. It’s a small, internal improvement focused on code organization.
Original PR description
Moved the badge_selection_icon_mapping_field to the Calendar module, so that it can be reused in hr_homeworking.calendar module Added optional default icon prop Task ID: 5215931 Community PR: https://github.com/odoo/odoo/pull/235440
This pull request improves the Stripe expense card experience by addressing visual issues, adding helpful notifications, and resolving critical bugs related to expense creation, validation, and shipping status updates. These changes enhance usability and ensure accurate expense tracking for users.
Original PR description
- Create Expense at the authorization instead of the capture
- Send a mail when a virtual card is assigned to someone
- Correct text inside card pause dialog
- Improve card look:
- Align date, pin and copy button on the card
- Fix physical card pin number not visible with dark mode
- Fix date horizontal alignment on pending physical cards
- Add Unlimited as placeholder on cards payement limits
task-4860676
Forward-Port-Of: odoo/enterprise#95523Resolved issues and error corrections
This update resolves an issue preventing accountants from accessing invoices due to access rights restrictions within the system. The change allows accountants to process invoices by searching for records in sudo mode, bypassing the need for POS access permissions. This improves usability for a key user group.
Original PR description
The aim of this commit is to allow accountants to open the invoices without getting blocked because they don't own the pos access rights. Context: It seems that the ORM is now checking the access rights over M2M which creates a lot of access rights issues. Before this commit: The computation of `l10n_mx_edi_update_sat_needed` and the method `l10n_mx_edi_cfdi_try_sat` would cause an access right issue. Cause: The method `_get_update_sat_status_domain` could be override in l10n_mx_edi_pos and add a check on `<l10n_mx_edi.document>.pos_order_ids` on which the accountant might not have access. (The same issue would happens to a user processing a stock picking) After this commit: We search the domain in sudo mode and return unsudoed records allowing the user to pursue its task. opw-5263759 opw-5263824 Forward-Port-Of: odoo/enterprise#99590
This update allows HR to now select a PDF template and designated signatories when creating offers for employee versions. Previously, this functionality was unavailable, limiting the customization options for offer documents. This change streamlines the offer creation process and ensures greater control over offer presentation.
Original PR description
Before if you created an offer for an employee version and not a contract template, it was impossible to choose a pdf template or signatories. This commit fixes this issue. Task-5375821
This update improves our internal referral process by logging all emails sent when a job promotion is initiated. Previously, no record was kept of these emails, making it difficult to track and analyze promotion activity. Now, only key email details (subject, body, recipient) are logged for auditing and reporting.
Original PR description
Before: - Once a job is published, a Promote button appears. The steps are: Recruitment > select a job (configuration) > Publish > Promote - After clicking the Promote button and sending the email, no log was being maintained for that job. After: - With this commit, we will log every promote email sent to the employee. - We will log only the subject, the body (skeleton only), and the recipient of the email. Task: 5375111
This update corrects a previous issue where employees working less than 6 months were incorrectly denied PFA (Pension Funds Agreement) eligibility. The change now accurately checks if an employee started their employment at least 6 months ago, ensuring correct PFA rights for all employees regardless of their tenure.
Original PR description
If you worked less than 6 months, you could have the right to the PFA. Instead of verifying that the employee worked for 6 full months, we should check that he started at least 6 months ago. task-5405293 Forward-Port-Of: odoo/enterprise#101721
This update addresses a change in Facebook's data reporting, specifically the deprecation of the audience trend metric. We've temporarily adjusted our calculations to rely on total page follows, ensuring continued accurate reporting while we investigate a full solution. This change primarily impacts how we track page engagement.
Original PR description
Bug === Facebook deprecated some of the endpoints related to statistics https://developers.facebook.com/docs/platforminsights/page/deprecated-metrics We fixed all metric except the audience trend,…
Bug === Facebook deprecated some of the endpoints related to statistics https://developers.facebook.com/docs/platforminsights/page/deprecated-metrics We fixed all metric except the audience trend, because we needed a fix rapidly, and we wasn't sure about unfollow. And indeed, `page_daily_follows` only count for positive value, unlike the old `page_fan_adds` / `page_fan_removes`, and there's no equivalent of `page_fan_removes`... Example of data for a month: ``` page_follows 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 page_daily_follows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 page_follows 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 page_daily_follows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ``` So we now use `page_follows`, so the total value at a given time, and we look for the newest and oldest value (note that if we could do the same for `page_post_engagements`, then we could just make 2 APIs calls for the year stat). Task-5353390 Forward-Port-Of: odoo/enterprise#101625 Forward-Port-Of: odoo/enterprise#100275
This update corrects a technical issue where reverting a payslip incorrectly flagged related payslips as duplicates, leading to confusing warnings. The fix ensures that payslips linked to a reverted payslip are properly identified as 'Related Payslips' instead of duplicates, streamlining the payroll process.
Original PR description
## Steps to Reproduce 1. Create a payslip and validate it. 2. Mark it as Paid. 3. Click on Revert and it will create a new payslips related to the other payslip. ## Issue When reverting a payslip, it is flagged as a "Duplicate". When there is a payslip that has "Related payslips", it should not be considered as a duplicate. ## Fix Duplicate warnings now ignore the original and refund payslips linked to each other (`origin_payslip_id/related_payslip_ids`) are removed from the duplicate recordset. task - [5240436](https://www.odoo.com/odoo/project/1251/tasks/5240436) Forward-Port-Of: odoo/enterprise#99988
This update removes a problematic field from the employee data module, preventing errors during debugging. The issue stemmed from a previous, poorly handled code change. The fix involves removing the unnecessary computed field and adjusting its storage settings.
Original PR description
### Issue: The field `l10n_sa_leaves_count_compensable` is a computed field with no compute method. When in debug mode, trying to look at the fields of an employee results in a traceback because of…
### Issue: The field `l10n_sa_leaves_count_compensable` is a computed field with no compute method. When in debug mode, trying to look at the fields of an employee results in a traceback because of this. ### Cause: This [forward port](https://github.com/odoo/enterprise/commit/4124dc4c13055d39d233d7ea9374b5191afdfcf2#diff-1d84d9d2c9ad02353f40d1b88baa5c66af063880df1e14459befd2d02d66cae5) had a conflict that was badly resolved by re-adding a previously deleted field. The field was replaced by `l10n_sa_remaining_annual_leave_balance` in [this commit](https://github.com/odoo/enterprise/commit/339bc032aa763c62d4dd27b73fc42488b3e1c3aa#diff-1d84d9d2c9ad02353f40d1b88baa5c66af063880df1e14459befd2d02d66cae5). [Failing FWP](https://github.com/odoo/enterprise/commit/b3f276d0d73a24faf322aa2ae8965c3d5aad4a87#diff-1d84d9d2c9ad02353f40d1b88baa5c66af063880df1e14459befd2d02d66cae5) ### Solution: We can no longer delete the field because of the stable policy. The solution is to remove the compute and add `store=False`. Then remove the field in master. opw-5352456 Forward-Port-Of: odoo/enterprise#100756
This update resolves a problem where global discounts weren't correctly applied when splitting restaurant orders. The fix ensures discounts are consistently calculated and applied, regardless of whether the order is split, except during order transfers. This improves the accuracy of pricing and reduces potential errors for restaurant staff.
Original PR description
Steps to reproduce: - Order some products in a pos restaurant - Add a global discount - Split the order Issue: The global discount can be chosen to be splitted. Fix: The first fix is to apply the global discount each time we add a product. The second fix is to hide the discount when splitting, and recalculate the discount on each splitted order afterwards execpt when tranferring an order. task-5189067 Forward-Port-Of: odoo/enterprise#98222
This update resolves a technical issue causing errors during the creation of WPS reports for Saudi Arabia's HR payroll. The problem stemmed from an incorrect function usage, which has now been corrected. This ensures accurate report generation and avoids potential disruptions to payroll processing.
Original PR description
this commit addresses traceback errors occured due to incorrect usage of `_` function. task-5310946 Forward-Port-Of: odoo/enterprise#99789
This update resolves an error that occurred when users tried to link bank statements to invoices. Specifically, the system was failing when dealing with draft invoices that lacked an invoice date. The fix ensures the system correctly compares invoice and statement dates, allowing for accurate reconciliation.
Original PR description
Currently, an error occurs when a user sets the partner on a statement line. **Steps to Reproduce**([video](https://drive.google.com/file/d/1ZQBBh4yjSljeqqL_jT8dh_QJ6LtFZdPb/view)): - Install the…
Currently, an error occurs when a user sets the partner on a statement line.
**Steps to Reproduce**([video](https://drive.google.com/file/d/1ZQBBh4yjSljeqqL_jT8dh_QJ6LtFZdPb/view)):
- Install the `account_accountant` module.
- Go to `Invoices` and create `two invoices` with the `same partner` and the `same total amount` by adding
an `invoice line`.
- Go to the `Dashboard` and click `Last Statement` under the `Bank journal`.
- Create a `new statement line` with the `same amount` as the `invoice amount`.
- Click `Set Partner` and select the `same partner` used in the invoices.
`TypeError: '<=' not supported between instances of 'bool' and 'datetime.date'`
After [this commit], when a user sets the partner on the statement line, the system attempts to automatically reconcile the line. It then searches for a single invoice matching the statement line amount [1] and tries to select the one with the closest prior or equal date. However, draft invoices have not an invoice_date, and when the system attempts to filter on this field, and the error is raised [2].
This commit ensures that the comparison between invoice date and statement date occurs only when the invoice date is present.
[this commit]: https://github.com/odoo/enterprise/pull/98269
[1]- https://github.com/odoo/enterprise/blob/84ccb807852ab6b118466d12c8f02ea4da7fa3db/account_accountant/models/account_bank_statement.py#L585
[2]- https://github.com/odoo/enterprise/blob/84ccb807852ab6b118466d12c8f02ea4da7fa3db/account_accountant/models/account_bank_statement.py#L249
sentry-7063516380
Forward-Port-Of: odoo/enterprise#10057618 changes
Enhancements to existing features
This update allows users to accurately display the account holder's name alongside bank details, even when it differs from the partner's name. Previously, the account holder name was automatically set to the partner's name, which is now corrected to ensure accurate reporting and reconciliation. This change enhances data clarity and reduces potential errors.
Original PR description
Allow changing of the account holder name in case it is different from the partner name which was the computed default. Task-5222712 [Related PR](https://github.com/odoo/enterprise/pull/98572)
Resolved issues and error corrections
This update resolves a bug in the Odoo Studio interface that caused incorrect field choices when switching between different field types. The fix ensures that field selections always reflect the currently chosen field, preventing errors and improving the user experience. This improves the reliability of the Studio tool.
Original PR description
Before this commit when selecting fields in studio caused `getFieldChoices` to read from this.props which could still reference the previously selected field’s relation. when switching from a non-relational field to a relational one, the stale props sometimes provided an incorrect `relation` value This resulted in incorrect choice and errors such as `Invalid model name: undefined` during loadField. After this commit getFieldChoices now uses the updated props and safely guards relation lookups. this ensures that the available choices always correspond to the currently selected field and prevents loading choices from the previous field’s relation and avoids the traceback. task-5241639
This update resolves a technical issue that caused a traceback when reloading the WorkEntries page in Studio. The fix ensures Studio correctly loads the page action, preventing errors and improving stability. This change primarily impacts the Studio user experience.
Original PR description
**Verison:** - saas-18.2 **Steps to reproduce:** - Go to an employee form view. - Click on the WorkEntries smart button. - Open Studio. - Reload page. **Issue:** - A traceback appears after reloading the page in Studio. **Cause:** - The smart button URL uses the model name hr.work.entry, but Studio’s service_action expects a path without dots. Because the action cannot be loaded correctly, the view breaks and triggers the traceback. **Solution:** - Return the proper path instead of the model name so that the action loads correctly. This prevents the error when reloading the page. task-5236317 Forward-Port-Of: odoo/odoo#239335 Forward-Port-Of: odoo/odoo#235662
This update resolves an issue where multiple daily attendance entries were incorrectly merging, resulting in inaccurate duration calculations. The fix ensures that each attendance entry is accurately recorded, preventing overlaps and providing correct work time data. This improves the reliability of employee time tracking.
Original PR description
In this commit, we fixed the merge of multiple attendance work entries on the same day. Currently, when you create multiple attendances on the same day, the work entry duration is considering the last one's duration. Reason: converting a work entry into intervals will be in a full day interval which is wrong, it will consider previous work entries as included ones within the new one. Fix: we need to regenerate the old ones too. Related task: 5405642
This update fixes a technical error preventing the Nilvera E-Invoice module from correctly generating invoices when using bank accounts. The issue stemmed from a mismatch in how the system identifies address fields, specifically when dealing with bank records. This fix ensures invoices can now be successfully sent.
Original PR description
**Steps to reproduce:** * Install the **Türkiye - Nilvera E-Invoice (l10n_tr_nilvera_einvoice)** modules * Configure test mode following the [setup…
**Steps to reproduce:**
* Install the **Türkiye - Nilvera E-Invoice (l10n_tr_nilvera_einvoice)** modules
* Configure test mode following the [setup guide](https://docs.google.com/document/d/1EUzvTBnSm9-VwIfBsX299MHGXIVys-uijnsJ1fpz7vI/edit?tab=t.0).
* Create a bank account for the main company and fill the **Bank** selector (bank identifier dropdown).
* Create and attempt to send a customer invoice via Nilvera.
**Observed behavior:**
* A server error occurs: `KeyError: 'country_id'` in `l10n_tr_nilvera_einvoice/models/account_edi_xml_ubl_tr.py` at line 172 while generating `<cac:PayeeFinancialAccount>`.
* The invoice cannot be sent.
**Cause:**
* `_get_address_node()` determines field names using `vals.get('model', 'res.partner')`.
* When the parent class calls `_get_address_node({**vals, 'partner': bank})` with a `res.bank` record, it does **not** pass a `model` parameter.
* The method falls back to `'res.partner'` and attempts to read `country_id` from a `res.bank` record, which instead uses the field `country`.
* This mismatch triggers a `KeyError`.
**Fix:**
* Detect the appropriate field set by checking `partner._name` rather than relying on `vals.get('model')`.
* Use `country` / `state` when the record is `res.bank`.
* Use `country_id` / `state_id` when the record is `res.partner`.
opw-5380246This update corrects a potential issue in the Chilean VAT (l10n_cl_edi) module where an incorrect sequence number could be generated for VAT documents. Previously, if a specific journal setting wasn't configured, the system might produce sequences starting with 'False'. This fix ensures accurate and reliable sequence generation, preventing reporting errors.
Original PR description
Before this commit, if the journal is not set to using the document (l10n_latam_use_documents), the method _get_last_sequence could return a sequence that starts with False. opw-5404813 Forward-Port-Of: odoo/enterprise#101824
This PR addresses several issues across various Odoo modules, including website editing, account management, MRP, and mail functionality. It fixes visual inconsistencies, corrects calculation errors, and improves performance, ultimately enhancing the user experience and data accuracy.
Original PR description
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 display issue in the SA EDI version of vendor bills. When a bill's currency doesn't match the company's local currency, the amounts shown in the currency conversion section were incorrectly appearing as negative. The fix ensures accurate currency calculations and proper bill formatting.
Original PR description
**Steps to reproduce:** - Create a vendor bill with currency not matching the currency of an SA company - Print the bill in the SA EDI specific format (is not shown on preview) or export as PDF **Issue:** Amounts displayed in the currency conversion section of the bill incorrectly show negative values for subtotal and total. **Solution:** The view affecting the bill in question referred to `o.amount_untaxed_signed` and `o.amount_total_signed` where either unsigned `o.amount_untaxed` and `o.amount_total` or `abs(o.amount_[...]_signed)` should be used instead, as in other localizations. opw-5253213 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236654
This update resolves an issue where a previously revoked portal user could inadvertently become the default public user for a new website. This prevented potential confidentiality risks and ensured data integrity by retaining the user's original status. The fix maintains the portal group on the revoked user, allowing for future reactivation without causing default user conflicts.
Original PR description
**Steps to reproduce:** - Go to a Contact - Go to the actions dropdown menu of the record - Grant Portal Access - Revoke that Access - Create a new Website in the same Company that Portal Access was…
**Steps to reproduce:**
- Go to a Contact
- Go to the actions dropdown menu of the record
- Grant Portal Access
- Revoke that Access
- Create a new Website in the same Company that Portal Access was granted
- That Contact's user will be set as the Public User for the new Website
- New orders and other default public user behavior will be assigned to this user
- The user will be mentionned in non-logged interactions
**Issue:**
Archived portal user are set as public user when revoked, and the default public user of a website is set on create to the first public user it finds in `_get_public_user`:
```
public_users = self.env.ref('base.group_public').sudo().with_context(active_test=False).users
public_users_for_company = public_users.filtered(lambda user: user.company_id == self)
if public_users_for_company:
return public_users_for_company[0]
```
This seems to be an issue as such user can be reactivated or be assigned to some transactions it has not made (confidentiality issue).
**Fix:**
Not sure of the best way to fix this. We could ensure new website always creates a new public user, or find a better way to use by default the `self.env.ref('base.public_user')` (or its company-specific copies) for the company of the website during creation (or in `_get_public_user`).
For now the fix remove the public group on the revoked portal user, to still be able to reactivate it later on, without mistaking it for the default public user of a company.
Also we can't remove the `with_context(active_test=False)` as default public user always seems to be disabled.
related: https://github.com/odoo/odoo/commit/83e22fd0636748c4fe1058fb93adfad2623fc31b
opw-4760550
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#236014
Forward-Port-Of: odoo/odoo#233757This update resolves an issue where top-up events would fail when a company's archived account was used. The team has simplified the reconciliation process, now skipping it as it's considered a 'nice to have'. This ensures top-ups function correctly even with archived accounts.
Original PR description
Before this commit: Webhook 'topup.succeeded' events would fail if the company `transfer_account_id` field is set to an archived account at the reconciliation step After this commit: As the reconciliation is a "nice to have", we skip the reconciliation step Steps to reproduce: - Install `hr_expense_stripe_demo` - Fill the KYC of doom - Archive the account set on the company `transfer_account_id` field - Create a top-up - Nothing happens, error 550 logged on IAP test
This update fixes a technical issue that prevented product catalog search options from being properly translated into different languages. By wrapping labels with the '_t' function, the system now supports localization, ensuring consistent and accurate translations across all Odoo languages. This improves the user experience for international customers.
Original PR description
When adding the search options in the catalog view[^1], the labels were not made translatable. This commit wraps the labels with the _t function to ensure they can be translated into different languages. [^1]: https://github.com/odoo/odoo/commit/96dc626f8d489817c944420178c22dba5c916799
This update resolves an issue where a user's live chat agent name was unintentionally revealed in messages. The change ensures that when mentioning internal users in live chat, the system now uses their live chat username instead, enhancing privacy and security. This update impacts the mail module.
Original PR description
Before this commit, when mentioning an internal user in live chat it would show their name in the message body. This leads to the agent's name being leaked when a live chat username is set. This commit fixes the issue by using the user's live chat username (when available and in the context of live chats) in the generated mention element. This commit also changes `mail_message@_to_store_defaults` to send, when available, the `user_livechat_username` of the recipients of a message. task-5384305
This update fixes a technical issue related to how audit status information is calculated in financial reports. The previous calculation used incorrect settings, leading to inaccurate reporting. This change ensures that audit status data is correctly processed across various localized versions of Odoo Enterprise.
Original PR description
When computing allow_account_audit_status_on_lines, we used the wrong field_name and default_value. Removed all the localized value as this fix should have been the one done in the first place. task-5106852
This update resolves an issue where the Gantt chart would crash when event start or end dates were cleared. The fix ensures the Gantt calculation only runs when a valid date range exists, preventing errors caused by comparing dates with empty values. This improves stability and usability of event scheduling.
Original PR description
When removing the start or end date on an Event, the system raises a traceback during Gantt information computation. **Steps to Reproduce:** 1. Install `website_event_track_gantt` module. 2. Create a new Event. 3. Add at least one **Track** with a track **Date** and **Duration**. 4. In the Event form, clear the Start or End Date field. **Error:** `TypeError: '<' not supported between instances of 'datetime.datetime' and 'bool'` **Cause:** When the event start or end date is removed, those fields become False. During computation, the system attempts to compare these False values with the track dates (which are real datetimes), resulting in an invalid datetime-boolean comparison, causing the error. **Fix:** This commit ensures the Gantt calculation only executes when the event has a valid date range, avoiding comparisons that include missing values. no id Forward-Port-Of: odoo/enterprise#101541
This update adds a field to the salary configuration to allow users to specify the correct account holder name. This is crucial for payment security in Belgium, as incorrect account holder details can lead to manual payment confirmations. The change also includes fixes for testing and addresses issues found in the automated testing environment.
Original PR description
Law is now more secure and you need to have the correct name on the bank account holder otherwise payment need to be manually confirmed everytime. Therefore a field is added to the salary config to allow the user to set his account holder name separately from his actual name in case it is different. Task-5222712 [Related PR](https://github.com/odoo/odoo/pull/233965)
This update adds an index to the `sale.order.project_id` field, significantly speeding up the loading time of the project settings page. Previously, the system was performing a slow scan of the database, but this change allows for faster data retrieval and improved responsiveness.
Original PR description
Description ----------- Following odoo/odoo@238a41e35280256382f6509182b9e900fb4f7aba, the domain for `sale.order.line` in `_get_sale_order_items_query` was modified to search based on the relevant…
Description ----------- Following odoo/odoo@238a41e35280256382f6509182b9e900fb4f7aba, the domain for `sale.order.line` in `_get_sale_order_items_query` was modified to search based on the relevant `order_id` `id` or `project_id`. `project_id` is not indexed, leading to a heavy non-selective scan on the primary key for databases with many `sale. order` records. There is poor selectivity with the filter on `sale. order.line` resulting in a heavy join between `sale.order` and `sale.order.line`. This commit adds the missing index, allowing for `Bitmap Heap Scan` on both indexes and leveraging the selectivity of the project being currently opened. Benchmark --------- On a database with 3.5M `sale.order`, 12M `sale.order.line`, opening the "Settings" page of a project with a few sale lines associated with it took: | | Before | After | |--------------|--------|-------| | Timing (hot) | 9.1s | 5ms | Reference --------- opw-5280364 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239338 Forward-Port-Of: odoo/odoo#238995
This update resolves an issue where the color picker test was failing intermittently due to timing problems. The fix ensures the test waits for all steps to complete, preventing unpredictable results and improving the reliability of the website customization process. This enhances the overall quality and stability of the website builder.
Original PR description
__Behavior before commit:__ Since `edit` writes one character after the other, using it on a color picker to write an RGBA color calls `make_scss_customization` when the input value reaches the RGB color. Then, another call is made when the entire color is written (because they are both valid colors). However usually the test finished before the steps for the second call were reached because the `Deferred` was only waiting for the first call. __Fix:__ Wait for all steps to avoid nondeterministic behavior. Runbot error: https://runbot.odoo.com/odoo/runbot.build.error/234621 Forward-Port-Of: odoo/odoo#239441
This update resolves an issue preventing the local overlay feature in the HTML editor from functioning correctly. The fix ensures that the overlay is displayed as intended, improving the user experience when editing HTML content within Odoo. This enhancement ensures consistent and reliable functionality for users.
Original PR description
task-5380409
23 changes
Enhancements to existing features
This update enhances the formatting of invoices generated for the Co-dian region in Odoo. Specifically, it standardizes the way floating-point numbers are formatted within the account_edi_common module, ensuring accurate and compliant invoice generation. This change improves the reliability of financial reports and tax filings for Co-dian customers.
Resolved issues and error corrections
This update corrects a potential issue in the Chilean VAT (l10n_cl_edi) module where an incorrect sequence number could be generated if a specific journal setting wasn't properly configured. This prevented errors when creating VAT documents and ensured accurate VAT processing. The change improves the reliability of the module.
Original PR description
Before this commit, if the journal is not set to using the document (l10n_latam_use_documents), the method _get_last_sequence could return a sequence that starts with False. opw-5404813
This update resolves an issue preventing users from loading demo data in the Appraisal module when creating a new company. The fix uses elevated permissions during demo data loading to bypass company-specific access restrictions, allowing users to successfully load the sample data.
Original PR description
Currently, an error occurs when a user attempts to load demo data for a newly created company in the Appraisal module. **Steps to Reproduce:** 1. Install `hr_appraisal_skills` without demo data. 2.…
Currently, an error occurs when a user attempts to load demo data for a newly created company in the Appraisal module.
**Steps to Reproduce:**
1. Install `hr_appraisal_skills` without demo data.
2. Create a new company and switch to it.
3. Appraisals > Click "Load sample data".
**Traceback:**
```
AccessError
Uh-oh! Looks like you have stumbled upon some top-secret records.
Sorry, Sengsourigna Phonkaseumsouk (id=2) doesn't have 'read' access to:
- Employee, Emma Granger (hr.employee: 3, company=TPX Solutions)
Blame the following rules:
- Employee multi company rule
If you really, really need access, perhaps you can win over your friendly administrator with a batch of freshly baked cookies.
This seems to be a multi-company issue, you might be able to access the record by switching to the company: TPX Solutions.
ParseError
while parsing /home/odoo/src/enterprise/19.0/hr_appraisal_skills/demo/scenarios/scenario_appraisal_demo.xml:4, somewhere inside <function model="hr.appraisal" name="_copy_skills_when_confirmed" eval="[ref('hr_appraisal.hr_appraisal_2')]"/>
ValueError
ParseError('while parsing /home/odoo/src/enterprise/19.0/hr_appraisal_skills/demo/scenarios/scenario_appraisal_demo.xml:4, somewhere inside\n<function model="hr.appraisal" name="_copy_skills_when_confirmed" eval="[ref(\'hr_appraisal.hr_appraisal_2\')]"/>') while evaluating 'action = model._load_demo_data()'
````
**Cause:**
The demo data loading process attempts to access employee records without the required permissions. Since the user belongs to a different company, the multi-company security rules prevent reading those employees.
**Fix:**
This commit resolves the issue by using sudo during demo data loading to ensure the required access rights are granted.
sentry-7032880299This update fixes an issue where flexible employee leave durations were incorrectly calculated due to timezone differences. The change ensures accurate leave duration calculations by using request_date_from and request_date_to, resolving a bug that resulted in incorrect hour counts.
Original PR description
### Steps to reproduce: - Create an employee with Flexible working schedule - Set the timezone for this employee very far from yours - Create an Unpaid leave with Custom Hours for this employee - Set the hours of the leave from 8 to 21 - Notice the duration is just 8 hours ### Cause: When calculating the duration of the flexible employee leave we check if the date_from and the date_to has the same date and if so we get the difference between the hour_to - hour_from but sometime when the tz is different when we convert it to UTC the dates overlap in two days so the condition sets to false so we get the working hours of the employee. ### Fix: Using the request_date_from and request_date_to in this condition where it will always be accurate in terms of days opw-5118689
This pull request addresses several issues related to how taxes are handled during the export of BIS3 files. Specifically, it separates the BIS3 export from the UBL hierarchy, introduces new tax helpers for more flexible tax management, and clarifies the treatment of fixed taxes as allowances or exemptions. These changes improve accuracy and reduce potential errors in tax calculations.
Original PR description
**[IMP] account: Add new tax helpers for EDI** (backport) task_id: 5096249 **[FIX] account_edi_ubl_cii: Fix management of fixed taxes** (backport) This commit contains 2 things: - an helper to…
**[IMP] account: Add new tax helpers for EDI** (backport) task_id: 5096249 **[FIX] account_edi_ubl_cii: Fix management of fixed taxes** (backport) This commit contains 2 things: - an helper to extract any tax_data and move it to another base_line - the usage of this helper in UBL to turn emptying taxes into additional base_lines == Add helpers to turn tax_data into new base_lines easily == With this helper, you can now exclude any tax from any base line and turn them into new base lines. Also, I changed a bit the smooth distribution of rounding because the math.ceil is sometimes too greedy and make the whole results to be less accurate. == Make a different behavior between recycling contribution taxes / emptying taxes == In UBL, all fixed taxes are treated as allowances/charges. In this commit, we make a clear distinction between recycling contribution taxes that are treated as allowances/charges and emptying taxes that are exempted of tax and are treated as addition invoice lines in the document. == Fix a small issue with aggregate_function passed to reduce_base_lines_with_grouping_function == The aggregator wasn't called when setting the 'target_base_line' at the very first time. task_id: 5182783 **[FIX] account_edi_ubl_cii: Reword export BIS3** - Separate the BIS3 from the annoying dependency between all the UBL files. You are not supposed to generate an UBL 2.0 & 2.1 UBL files. Those are templates with all the options you have to build your format on top of it. However, since we used them as a hierarchy and since most of the code and implementation are inside UBL 2.0, "fixing" any use case for one single implementation has impacts in all others. In order to fix issues about ways amounts are computed in BIS3, we first split BIS3 to be independant from UBL 2.0 / UBL 2.1 but using new generic helpers that could be used for any single format. The future goal will be to make all formats independant but that part is already big enough and we are in a hurry. "To be continued in a next PR" - Reword the test suite for exported files to be more explicit about which test is testing what exactly. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that manually set currency rates for foreign currency invoices are preserved when the invoice is posted. Previously, the system automatically recalculated rates, leading to potential discrepancies. This fix maintains the user's intended rate, improving accuracy and reducing errors in financial reporting.
Original PR description
When creating a customer invoice in a foreign currency, a manually edited currency rate was overridden at posting time with the rate from the currency table. This fix ensures that any manually entered rate is preserved during posting. The problem was that when posting the invoice_date field changes and the function compute_invoice_rate were called. Solution check if it is manually inserted and do not compute the invoice_rate again task-5391774 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 fixes an issue where background colors were lost when copying tables from the Knowledge editor to other Odoo applications. The change ensures that the correct formatting is preserved during copy and paste operations, improving the user experience when working with tables.
Original PR description
To make it possible to properly copy DOM elements across editors, the `application/vnd.odoo.odoo-editor` mimetype was introduced in the `ClipboardPlugin`. However, this was not used inside the `HtmlViewer`. Because of this, some content formatting could be lost when copying elements from an `HtmlViewer` to an editor. This commit solves this by also invoking the code that fills the clipboard in `ClipboardPlugin` when content is copied in an `HtmlViewer`. Steps to reproduce: - Insert a table in Knowledge - Set a background color on a few cells - Use the "lock" feature of Knowledge (inside a dropdown the menu on the right) - Select the entire table - Copy/paste it in a project task => The background colors in the cells were lost task-4017841
This update resolves an issue where the scheduled 'Payroll: Generate pdfs' action failed to produce PDFs when processing multiple payslips. The fix addresses a technical problem with how the system identified the correct partner record, ensuring all payslips generate the expected PDF documents. This improves the reliability of payroll processing.
Original PR description
### Issue: When running the scheduled action "Payroll: Generate pdfs" for several payslips, nothing is generated and a traceback can be seen in the logs. ### Steps to reproduce: - Disable scheduled…
### Issue: When running the scheduled action "Payroll: Generate pdfs" for several payslips, nothing is generated and a traceback can be seen in the logs. ### Steps to reproduce: - Disable scheduled action: "Payroll: Generate pdfs" (to avoid side effect in next step) - Refuse all time off for "Anita Oliver" (to avoid side effect in next step) - Create a user for the employee "Anita Oliver" - Link the employee and the user - Create 2 payslips - 1 for "Mitchell Admin" - 1 for "Anita Oliver" - Compute sheet and confirm both payslips - Run scheduled action: "Payroll: Generate pdfs" - Nothing happens ### Cause: The traceback is raised on the line `self._get_document_partner().id` because `_get_document_partner()` can return a recordset. ### Solution: Call `ids` instead of `id`. ### Note: Calling `_get_document_partner()` on a recordset [here](https://github.com/odoo/enterprise/blob/a0729c8d42ca93016b23e331d8f38c1f4fa88f12/hr_payroll/models/hr_payslip.py#L444) seems unexpected as, if only one payslip in the recordset has `self.employee_id.user_id.partner_id` evaluating to `True`, then it will return only this partner, completely ignoring the other part checking `self.employee_id.work_contact_id`. The final code works fine as `_check_create_documents()` is called agion individually [here](https://github.com/odoo/enterprise/blob/a0729c8d42ca93016b23e331d8f38c1f4fa88f12/documents/models/ir_attachment.py#L86). opw-5213979
This update corrects a printing issue where Sale Order PDFs using the DIN5008 document layout displayed customer addresses twice. The fix prevents this duplication by ensuring addresses are only added once, specifically when the 'Customer Addresses' setting is disabled. This ensures consistent and accurate reporting for our German clients.
Original PR description
## Issue: When DIN5008 is selected as the document layout, printing a Sale Order may show the customer address twice ## Cause: The address is first added by `external_layout_din5008`, then again by `report_saleorder_document` This duplication only makes sense when the partner address differs from the invoice or delivery address If the Customer Addresses setting is disabled, displaying it multiple times is unnecessary ## Steps to reproduce: - Install a company using DIN 5008 (e.g., l10n_de) - Select the DE company and go to Settings - Disable `Customer addresses` and ensure the document layout is set to DIN 5008 - Create a Quotation with any customer and product - Print the PDF → the address appears twice before the fix opw-5176593
This update fixes an issue where the BR EDI status field wasn't correctly reflecting invoice cancellation after a cancellation request was submitted. The change ensures the status is accurately set to 'Cancelled' in the system, streamlining the e-invoice process for Brazilian businesses. This prevents discrepancies in reporting and compliance.
Original PR description
**Steps to reproduce:** * Install the **Accounting** and **l10n_br_edi** modules. * Create and post a Brazilian customer invoice using an **Avatax fiscal position** * [Guide to setup EDI for…
**Steps to reproduce:** * Install the **Accounting** and **l10n_br_edi** modules. * Create and post a Brazilian customer invoice using an **Avatax fiscal position** * [Guide to setup EDI for l10n_br](https://docs.google.com/document/d/1CSUKpnyhty5WBqUDBE-7dGvu0qxaC5vQ0loz0fYNg04/edit?tab=t.0) * Confirm the invoice and **send it to e-invoice (Brazil)**. * Confirm the **Brazil E-Invoice Status** shows **'Accepted'**. * Click **Request Cancellation**, enter a cancellation reason, and submit the request. **Observed behavior:** * The invoice moves to **Cancelled** state. * The cancellation XML is generated and attached in the chatter. * SEFAZ returns a successful cancellation response. * However, the **BR EDI Status** becomes **empty**, instead of reflecting **'Cancelled'**. **Cause:** * In the wizard `l10n_br_edi.invoice.update`, both `_finalize_update()` and `_submit_services()` assign `l10n_br_last_edi_status = 'cancelled'` **before** calling `button_cancel()`. * `button_cancel()` internally triggers `button_draft()` for posted invoices. * The Brazil EDI override of `button_draft()` resets `l10n_br_last_edi_status = False`. * This clears the status that was just set, leaving the field blank. **Fix:** * move `l10n_br_last_edi_status = "cancelled"` to `button_cancel()` method. opw-5378542
This update resolves an issue in Firefox where scheduling multiple messages would cause the application to freeze. The problem stemmed from an incorrect datetime sorting algorithm within the chatter module, leading to an infinite loop. The fix ensures consistent sorting across browsers, preventing the freeze and improving stability.
Original PR description
**Steps to reproduce:** - (Firefox only) - Go to any record which uses a chatter (e.g. Contact) - Send message > Full composer > click the schedule message icon (lower right corner) - Schedule the…
**Steps to reproduce:**
- (Firefox only)
- Go to any record which uses a chatter (e.g. Contact)
- Send message > Full composer > click the schedule message icon (lower right corner)
- Schedule the message in the future and click send
- You should see now a post in the chatter indicating that the message will be sent
- Now click Send message and repeat the above steps again to schedule a second message
- Whole page will be freezed
- Reloading doesn't help
**Issue:**
Infinite loop in reactive callback on firefox.
The code gets stuck in
```js
for (const callback of [...callbacks]) {
clearReactivesForCallback(callback);
callback();
}
```
because of
```js
const sortProxy2 = reactive(recordProxy, function sortObserver() {
self.requestSort(record, fieldName);
});
this.fieldsSortProxy2.set(fieldName, sortProxy2);
```
which loops over `store._.ADD_QUEUE("sort", record, fieldName);`
(Forcing the `requestSort` only change the infinite loop into a recursion error)
The recomputation seems to be caused by a bad sorting here:
```js
this.scheduledMessages = Record.many("ScheduledMessage", {
sort: (a, b) => {
if (a.scheduled_date === b.scheduled_date) {
return a.id - b.id;
}
return a.scheduled_date < b.scheduled_date ? -1 : 1;
},
```
In the case both datetimes are equal the first condition doesn't properly catches it:
```
> a.scheduled_date - b.scheduled_date
> 0
> a.scheduled_date === b.scheduled_date
> false
> a.scheduled_date < b.scheduled_date
> false
> a.scheduled_date > b.scheduled_date
> false
```
Which make the ordering change on each sort iteration:
```
> Array [ "ScheduledMessage,14", "ScheduledMessage,13" ]
> recordsFullProxy.sort(func);
> Array [ "ScheduledMessage,13", "ScheduledMessage,14" ]
> recordsFullProxy.sort(func);
> Array [ "ScheduledMessage,14", "ScheduledMessage,13" ]
```
Chromium based browsers probably use a different sorting algorithm than Firefox, which seems to prevent the issue.
**Fix:**
Use `compareDatetime` to ensure the ordering is constant for the same datetime values.
opw-5367371This update fixes inaccurate tooltip text and displays for subscription products. Previously, the tooltip wording was incorrect and product cards showed both recurring and sales prices. Now, tooltips accurately reflect the period-based pricing and product cards display only the recurring price, improving clarity and accuracy for subscription users.
Original PR description
Version - 18.0 Steps to Reproduce: Issue 1: Incorrect tooltip text 1. Go to Products → Products in subscription app. 2. Open a product page and select goods product type 3. observe product_tooltip…
Version
- 18.0
Steps to Reproduce:
Issue 1: Incorrect tooltip text
1. Go to Products → Products in subscription app.
2. Open a product page and select goods product type
3. observe product_tooltip show incorrect wording:
* "Based on order" showed end of the period.
* "Based on delivered" showed beginning of the period.
Issue 2: Product card shows both recurring and sales price
1. Go to Products → Products in subscription app.
2. Observe that the product card displays both recurring price and sales price
After this PR:
- Tooltip now correctly states:
* for "based on order" invoice_policy -> beginning of period
* for "based on delivery" invoice_policy -> end of period
- Product cards show only the recurring price when applicable.
task-5156390
<img width="1002" height="436" alt="image" src="https://github.com/user-attachments/assets/39f00555-e37a-44a5-8786-d7f8d6882de7" />
<img width="968" height="262" alt="image" src="https://github.com/user-attachments/assets/0d6d5c2d-d5ab-4376-bc03-dba243abce8b" />This update resolves an issue where branch users couldn't see matching entries in the reconciliation screen. The fix ensures that the system correctly retrieves accounts based on user access permissions, allowing accurate reconciliation for branch operations. This improves the usability of the accounting module for branch-specific transactions.
Original PR description
**Steps to reproduce:** - Install Accounting - Create a branch company - Switch to the branch - Create a Bank journal for the branch - Create a Sales journal for the branch (You can duplicate the journals from the parent company) - Make sure that the accounts configured on the journals are linked the branch - Grant only access to the branch to a user - Connect with that user - Create an invoice - In the bank journal, create a statement line matching the amount of the invoice - Select the statement line **Issue:** In the "Matching Existing Entries" tab, there is no entry. **Cause:** When retrieving the accounts required for the domain to fetch these entries, no account can be retrieved because the user doesn't have access to the parent company. opw-5181909 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that a 'partner ID' is always required when creating SEPA payments in Odoo. Previously, missing this information could cause errors during batch payment creation, leading to processing disruptions. This change improves payment stability and reliability for SEPA transactions.
Original PR description
When doing a payment with SEPA as the payment method, and then create a batch payment out of it. It could happen that the partner_id of the payment was not set. That would cause a traceback because in the _get_CdtTrfTxInf we do a browse on the partner to use it later on. But since the partner is False, we have an empty record set. task-5213880
This fix resolves an issue where users connected to a POS session couldn't access the backend if they weren't the initial session opener. Previously, the system only recognized the original user. Now, connected users can access the backend, improving workflow for employees working through the POS.
Original PR description
Currently a user that connected to a pos user cannot go backend if he was not the person who opened the session the first time. Steps to reproduce: ------------------- * Modify settings of the shop…
Currently a user that connected to a pos user cannot go backend if he was not the person who opened the session the first time. Steps to reproduce: ------------------- * Modify settings of the shop to use employee feature * Make sure admin and demo can access the shop, set them advenced employee for example. * Logged as Mitchell Admin, open the pos (It should have been closed before) * Use Mitchel admin employee * Complete cash control * Go backend * Log out * Log back in with Marc Demo * Enter the shop (it was already "opened" by Admin) * Use Marc demo employee * Now try to see the backend button > Observation: Backend button is not available Why the fix: ------------ Quoting this commit: https://github.com/odoo/odoo/commit/61df2871e1aac0144d26022a2a49c75ea9ecad4a > Now, the only employees that can go back to the backend are those binded to the user connected. However, `this.pos.session.user_id` only reflects the user who opened the pos the first time, in our case Mitchell Admin. It does not represent the connected user. opw-5276950
This update fixes an issue where the Partena export file incorrectly used the active company's code when generating exports for inactive companies. The change ensures the correct Partena code is included in the CSV file, resolving a potential data discrepancy for Partena reporting. Tests have been added to verify this fix.
Original PR description
### Issue: In multicompany, when we generate the Partena export file of the 'not active' company, the partena code of the active company is inputted in the file. ### Steps to reproduce: - Install…
### Issue: In multicompany, when we generate the Partena export file of the 'not active' company, the partena code of the active company is inputted in the file. ### Steps to reproduce: - Install 'l10n_be_hr_payroll_partena' and switch to a Belgian company - Make sure the company has a "Partena Affiliation Number" - Create an employee for this company, with a "Partena code" - Create a contract for this employee, set it a running - Create a new Belgian company with a different "Partena Affiliation Number" - Activate both Belgian companies, but set the second one as active - Payroll > Reporting > Export work entries to Partena - Create a new one, populate it with the employee just created - Click "Generate Export File" ### Cause: When getting the data for the CSV file, we use `self.env.company` which is the active company. So when this company is not the one of the export record, we input the wrong code values. ### Solution: Use `self.company_id` instead of `self.env.company_id`. Also adds the test class with basic tests. opw-5345786
This update ensures that coupon emails sent to customers use the localized date format (e.g., yyyy-MM-dd) based on their language settings. Previously, emails displayed a technical date format, causing confusion. This change improves the customer experience by presenting dates in a familiar and understandable way.
Original PR description
Steps to reproduce: 1. Install `loyalty` and `sale_management` 2. Activate another language with another date format, eg. English (AU) 3. Set that language on a contact 4. Sales > Product > Discount…
Steps to reproduce: 1. Install `loyalty` and `sale_management` 2. Activate another language with another date format, eg. English (AU) 3. Set that language on a contact 4. Sales > Product > Discount & loyalty 5. Create a record with program type coupons 6. Generate a coupon for that AU contact with an expiration date Issue: The coupon email received by the customer shows the expiration date using the yyyy-MM-dd format, and the attachment shows the same technical format instead of the customer’s localized date format. Cause: We are not using a formatted date according to the customer before: Customer with English AU language <img width="601" height="563" alt="image" src="https://github.com/user-attachments/assets/faea2840-aca6-4850-bfc9-b0d24da65a3b" /> <img width="1510" height="883" alt="image" src="https://github.com/user-attachments/assets/b0ebc0cc-6243-450d-ad12-cecda4858e26" /> After: <img width="603" height="543" alt="image" src="https://github.com/user-attachments/assets/5be2332b-3237-4ce5-8122-0766cd274650" /> <img width="1482" height="886" alt="image" src="https://github.com/user-attachments/assets/99d31b4c-33fa-4f92-9970-56720181911e" /> opw-5247621
This update resolves an issue introduced during an attempt to support mixed payment types (IBAN, Bankgiro, etc.) in batch payment exports. The previous changes contained incorrect logic that caused errors in the XML format. This commit reverts the faulty custom logic and focuses solely on generating the necessary zip file, ensuring accurate payment export functionality.
Original PR description
Here https://github.com/odoo/enterprise/pull/95463, we add the possibility to export
batch payments with mixed IBAN and Bankgiro/Plusgiro/BBAN payments, but this introduced
few bug in the xml format.
The reason is, we were using new custom logics and not the main one. The problem is
the custom logics is wrong, not the main one.
This commit remove most of the custom logics we added and use all the main one.
This has been done by:
1 - Reverting the original commit
2 - Adding only the zip file generation, passing a context key to know if we are
with bban or iban payments.
opw-5181340This update corrects a bug that prevented multiple gift cards from being created correctly when sold in a single POS order. Previously, only one gift card with the total amount was generated. The fix restores a key field in the kanban view, ensuring accurate gift card creation and splitting, improving the gift card purchasing experience.
Original PR description
This fix addresses an issue where selling multiple gift cards in a single POS order results in only one gift card being created with the total amount, instead of multiple gift cards with the correct…
This fix addresses an issue where selling multiple gift cards in a single POS order results in only one gift card being created with the total amount, instead of multiple gift cards with the correct individual amounts. Step to reproduce: - Create a new gift card and enable the option to sell this card in the POS - Open the POS and try to sell multiple gift cards in the same order - Validate the order - Check the generated gift cards, only one gift card will be created with the total amount instead of multiple gift cards with the correct individual amounts This issue occurs because the field `reward_point_split` is missing from the kanban view of loyalty rules. So, when creating a new gift card, this field value, which should be True for gift cards, is not returned by the onchange method, and since nothing triggers a new computation unless the program type is changed, the field remains False. This fix simply restores this field in the kanban view (like before https://github.com/odoo/odoo/pull/172561) so that its value is correctly taken into account when creating a new gift card. opw-5103652
This update corrects a previous error that prevented users from saving XML files within the Odoo Studio. Specifically, the system would throw an error when an XML encoding declaration was included. The fix ensures a clearer error message is displayed, guiding users to correctly format their XML files.
Original PR description
Currently, an error occurs when a user includes an XML encoding declaration in the studio XML editor. **Steps to produce:** - Install the `web_studio` module and enable `developer mode` - Open `Apps` > `studio` > `view` > `</> xml` - Declare encoding as: `<?xml version='1.0' encoding='utf-8'?>` and click `save` **Error:** `ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.` **Root cause:** At [1], an error is raised when the XML declaration contains an `encoding` attribute, as encoding declarations are invalid in Unicode strings. **Fix:** This commit ensures that a `UserError` is raised, improving the error message clarity. A similar fix was applied in https://github.com/odoo/odoo/pull/205324. [1]: https://github.com/odoo/odoo/blob/8a22b6ca09e1da3ccba3540bc4851a5174e035cc/odoo/tools/translate.py#L316 sentry-6981234548
This update resolves an issue where removing a combo name and then clicking 'Edit Configuration' on an order line would trigger an error. The fix ensures that the 'Edit Configuration' option is only displayed when a product template is associated with the combo, improving usability and preventing unexpected errors.
Original PR description
Currently, when a user adds a combo to an order line, and remove the name of combo and click on Edit Configuration (pencil icon) error is encountered. Steps to replicate: - Install `sale_management`…
Currently, when a user adds a combo to an order line, and remove the name of combo and click on Edit Configuration (pencil icon) error is encountered. Steps to replicate: - Install `sale_management` with demo and create a new SO. - Add a combo product and remove the combo name and click Edit Configuration (pencil icon). Error: `TypeError: SaleProductConfiguratorController.sale_combo_configurator_get_data() missing 1 required positional argument: 'product_template_id'` Cause: - When a user clicks on Edit configuration, the client-side JavaScript makes an RPC call to the server, targeting the `sale_combo_configurator_get_data()` which expects `product_template_id` at [1] and since it is removed from order line the error is encountered. Solution: - Changed the content of method `isCombo()` to use the product_template_id to make sure the Edit Configuration is only visible when product template is present. Similar PR for reference: https://github.com/odoo/odoo/pull/217464 [1]: https://github.com/odoo/odoo/blob/fa4307b9758800f26c9ee87cf3698fd60bfd1ab5/addons/sale/controllers/combo_configurator.py#L12-L14 No ID --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug where import errors were not shown during batch imports. Now, if an import fails due to incorrect data (like a misspelled name), users will receive an error message, allowing them to correct the data and complete the import successfully. This improves data accuracy and reliability.
Original PR description
Steps to reproduce ================== - Go to contact, - Import the following file ```csv id,name,active __import__.res_partner_SV_test_01,Name 1,TRUE __import__.res_partner_SV_test_02,Name 2,TRUE __import__.res_partner_SV_test_03,Name 3,TRUE __import__.res_partner_SV_test_04,Name 4,TRUE __import__.res_partner_SV_test_05,Name 5,incorrect value __import__.res_partner_SV_test_06,Name 6,TRUE __import__.res_partner_SV_test_07,Name 7,TRUE __import__.res_partner_SV_test_08,Name 8,TRUE ``` - Set the batch size to 4 - Click on the import button => Only 4 records have been imported and no error is displayed Cause of the issue ================== Errors were only checked in test mode opw-5242285 Forward-Port-Of: odoo/odoo#239109
This update fixes an issue where extra prices associated with multi-checkbox attributes on rental products weren't being accurately reflected in the cart and product configurator. The fix ensures that customers see the correct total price, including any applicable extra charges, when selecting options for rental products. This improves transparency and accuracy for rental transactions.
Original PR description
uprade pr: https://github.com/odoo/upgrade/pull/8648 **Steps to reproduce:** 1. Install `eCommerce` and `Rental` modules. 2. Create a rental product. 3. Create a new attribute with two values with…
uprade pr: https://github.com/odoo/upgrade/pull/8648 **Steps to reproduce:** 1. Install `eCommerce` and `Rental` modules. 2. Create a rental product. 3. Create a new attribute with two values with extra price. Set display type to multi-checkbox. 4. Add attribute and its values to the product. 5. Activate rental for the product and configure rental pricing. 6. Open the product page on the eCommerce store. 7. Select values from both attributes including multi-checkbox options. **Observed behavior:** * Multi-checkbox attribute values can be selected, but their extra prices are ignored in the cart subtotal and product configurator price display. **Root cause:** * The rental pricing logic bypassed the standard price computation that includes extra prices from no_variant attributes. In `_get_pricelist_price()`, the rental price was computed using rental-specific rules without adding extra prices from `product_no_variant_attribute_value_ids`. Similarly, in the product configurator (`_get_combination_info_variant()`), price_extra from no_variant attributes was not added to the rental price. The template also hid extra price badges for rental products. **Solution:** 1. In `sale_order_line._get_pricelist_price()`, add extra prices from no_variant attributes after computing the rental price. 2. In `product_template._get_combination_info_variant()`, add `price_extra` to `current_price` for rental products. 3. Remove the template override that hid extra price badges for rental products, allowing customers to see extra prices in the product configurator. opw-4937869
4 changes
Resolved issues and error corrections
This update ensures that quantities tracked with serial numbers in Odoo's stock management system remain whole units. Previously, breaking down serial numbers could lead to inaccurate tracking; now, quantities are rounded to the nearest whole number, maintaining data integrity and preventing discrepancies in stock levels.
Original PR description
Main Changes:
Enforce the quantity set on a move or move line with serial tracking to be parts of Whole numbers (in the product UoM).
Before:
It is possible to break a quantity tracked by a serial number
After:
When the user break a quantity tracked by a serial number, we round this quantity as a Whole number in the respective product UoM
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where very long text inputs in the Web Studio application would overflow and cause display problems. Now, long text fields are automatically truncated, ensuring a clean and usable experience for users. This prevents data loss and improves the overall stability of the Web Studio interface.
Original PR description
**Before this commit:** Long input text overflowed and was not truncated. **After this commit:** Long input text is now properly truncated, preventing overflow. task-5240113
This update resolves an issue where a previous odoo version would crash when a Many2one field contained an empty record. The change ensures the system gracefully handles empty records by returning 'False' instead of raising an error, preventing service disruptions.
Original PR description
In OCA we develop a module that assigns dynamic attributes to a product. In odoo 16.0 and prevous 14.0 the module is running smoothly with odoo. In this version convert_to_read method is introduced…
In OCA we develop a module that assigns dynamic attributes to a product. In odoo 16.0 and prevous 14.0 the module is running smoothly with odoo. In this version convert_to_read method is introduced and it deals with use_display_name and value, it assumes value record is always has a value Aluthough use_display_name can be False or value record can be empty. In that case I retun False instead of causing the server to raise error because it assumes value has id and it is just an empty recordset.
Description of the issue/feature this PR addresses:
Current behavior before PR:
========================================================================================
2025-02-19 20:15:58,724 46176 ERROR pim_17_1 odoo.http: Exception during request handling.
Traceback (most recent call last):
File "/home/kobros/Workspace/odoo17/odoo/odoo/http.py", line 2206, in __call__
response = request._serve_db()
^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/http.py", line 1782, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/service/model.py", line 133, in retrying
result = func()
^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/http.py", line 1809, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/http.py", line 2013, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/addons/base/models/ir_http.py", line 221, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/http.py", line 757, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/addons/web/controllers/dataset.py", line 24, in call_kw
return self._call_kw(model, method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/addons/web/controllers/dataset.py", line 20, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/api.py", line 468, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/api.py", line 453, in _call_kw_multi
result = method(recs, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/addons/web/models/models.py", line 86, in web_read
values_list: List[Dict] = self.read(fields_to_read, load=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/models.py", line 3557, in read
return self._read_format(fnames=fields, load=load)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/models.py", line 3770, in _read_format
vals[name] = convert(record[name], record, use_display_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kobros/Workspace/odoo17/odoo/odoo/fields.py", line 3110, in convert_to_read
return value.id
^^^^^^^^
Attri
buteError: 'mail.thread' object has no attribute 'id'
========================================================================================
Desired behavior after PR is merged:
The method can just retun False if no condition is met.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update ensures that Thai VAT numbers entered into the system are valid. The system now checks that all Thai VAT numbers consist of exactly 13 digits, aligning with Thai regulations. This improves data accuracy and prevents incorrect VAT number entries.
Original PR description
**Description of the issue/feature this PR addresses:** This PR adds a validation method `check_vat_th()` to verify Thai VAT numbers. In Thailand, a VAT number must consist of exactly 13 numeric digits. **Desired behavior after PR is merged:** For partners with country set to Thailand, the system will only allow VAT numbers that are exactly 13 digits long. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr