Daily updates from Odoo
Navigate
Branch
Friday, January 23, 2026
351 changes
15 changes
Enhancements to existing features
This update enhances the livechat exit confirmation dialog to provide agents with clearer context. It now displays the visitor's name and the last message from the conversation, reducing the risk of accidentally closing the wrong chat, especially with dynamic livechat lists.
Original PR description
Previously, the confirmation dialog shown when leaving a livechat session was too generic and did not provide enough context to help agents ensure they were closing the correct conversation. As a…
Previously, the confirmation dialog shown when leaving a livechat session was too generic and did not provide enough context to help agents ensure they were closing the correct conversation. As a result, agents could accidentally leave the wrong chat, especially when the livechat list is reordered due to new incoming messages. This PR improves the dialog to make the action clearer and safer: - Displays the visitor’s name in the confirmation title. - Shows the most recent message from the conversation in the dialog body. - Helps agents verify they are leaving the intended conversation. task-5355106 Before this PR: <img width="593" height="138" alt="image" src="https://github.com/user-attachments/assets/363eeab9-0306-47cc-8f4f-4035862f7e29" /> After this PR: <img width="1135" height="277" alt="image" src="https://github.com/user-attachments/assets/6a7b7aea-d3bf-4b52-be39-001448ba7afc" /> Before vs After (Chat Window) <table> <tr> <td> <img width="256" height="422" src="https://github.com/user-attachments/assets/b895b831-e11d-4aee-8f35-cd79f5c77aaf" /> </td> <td> <img width="256" height="422" src="https://github.com/user-attachments/assets/d31c061d-6a6e-42cb-ae60-12a5329cd4d4" /> </td> </tr> </table> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies product imports for the ecommerce platform by introducing an 'Auto' mode. This mode automatically detects product information using public APIs and metadata, streamlining the connection process and reducing manual setup. An error message is also added for empty URLs.
Original PR description
Added the 'Auto' option for ecommerce platform in order to have a default that searches for all public APIs and metadata. Linked to: https://github.com/odoo/website-scraper/pull/420
Resolved issues and error corrections
This update fixes an issue where PDF quotes weren't correctly identifying form fields within complex sales structures (Hierarchy objects). Now, the system accurately detects and includes these fields, ensuring accurate and complete quotes for all sales scenarios. This enhancement improves the reliability of our sales documentation.
Original PR description
- For Hierarchy objects, we have to check '/T' in '/Parent' instead directly within '/Annot' like flat fields. Desired behavior after PR is merged: - Support form fields with Hierarchy objects. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238323
This update fixes an issue where LATAM invoices with numeric sequence prefixes would incorrectly restart the invoice sequence, leading to duplicate document numbers. The change allows for correct sequence generation by temporarily disabling sequence filtering for LATAM invoices, ensuring unique document numbers are always assigned.
Original PR description
**Issue:** When invoices in a journal enabled to "Use Documents" for LATAM legal invoicing have a sequence prefix with numbers, the next invoice will restart the sequence and try to use already-used…
**Issue:** When invoices in a journal enabled to "Use Documents" for LATAM legal invoicing have a sequence prefix with numbers, the next invoice will restart the sequence and try to use already-used sequences. **Steps to Reproduce:** - Install l10n_pe_edi - Change to PE Company - Duplicate the Customer Invoice journal, give it shortcode "01A" - Create an invoice in dupe journal, set customer to "Comercial Constructora los Patitos S.A.", set product and tax, Document Type = (01) Factura - Confirm the invoice, it will have name "F F01-00000001" - Duplicate the invoice -> The new invoice has the same sequence number, and the document number is visible Expected: Invoice is called "Draft" (/), document number is not visible, and upon confirming the invoice, it will have the name "F F01-00000002" **Cause:** - LATAM invoices do not follow the standard formats in sequence_mixin.py, so _deduce_sequence_number_reset will always return "never" - However, the result of this method is used in _get_last_sequence_domain, and assumes that the sequence follows the corresponding format to "never" (_sequence_fixed_regex) - This isn't the case if the prefix has numbers, it will be captured in the _sequence_yearly_regex - anti-regex is used to filter sequences that aren't _sequence_fixed_regex, but this causes prefixes with numbers to never be found, and always restart the sequence **Solution:** - Add context value "no_anti_regex" to skip sequence exclusion - If the invoice is LATAM, call _get_last_sequence_domain with context "no_anti_regex" = True so no sequences are excluded. - Because LATAM invoices are always in a fixed format, we don't need to filter out sequences in other formats opw-5111844 Forward-Port-Of: odoo/odoo#235000
This update fixes an issue where invoices generated for LATAM legal invoicing with numeric sequence prefixes would incorrectly restart sequences. The change adds a simple context setting to bypass sequence filtering, ensuring invoices are correctly numbered according to LATAM standards. This prevents duplicate invoice numbers and ensures accurate record-keeping.
Original PR description
**Issue:** When invoices in a journal enabled to "Use Documents" for LATAM legal invoicing have a sequence prefix with numbers, the next invoice will restart the sequence and try to use already-used…
**Issue:** When invoices in a journal enabled to "Use Documents" for LATAM legal invoicing have a sequence prefix with numbers, the next invoice will restart the sequence and try to use already-used sequences. **Steps to Reproduce:** - Install l10n_pe_edi - Change to PE Company - Duplicate the Customer Invoice journal, give it shortcode "01A" - Create an invoice in dupe journal, set customer to "Comercial Constructora los Patitos S.A.", set product and tax, Document Type = (01) Factura - Confirm the invoice, it will have name "F F01-00000001" - Duplicate the invoice -> The new invoice has the same sequence number, and the document number is visible Expected: Invoice is called "Draft" (/), document number is not visible, and upon confirming the invoice, it will have the name "F F01-00000002" **Cause:** - LATAM invoices do not follow the standard formats in sequence_mixin.py, so _deduce_sequence_number_reset will always return "never" - However, the result of this method is used in _get_last_sequence_domain, and assumes that the sequence follows the corresponding format to "never" (_sequence_fixed_regex) - This isn't the case if the prefix has numbers, it will be captured in the _sequence_yearly_regex - anti-regex is used to filter sequences that aren't _sequence_fixed_regex, but this causes prefixes with numbers to never be found, and always restart the sequence **Solution:** - Add context value "no_anti_regex" to skip sequence exclusion - If the invoice is LATAM, call _get_last_sequence_domain with context "no_anti_regex" = True so no sequences are excluded. - Because LATAM invoices are always in a fixed format, we don't need to filter out sequences in other formats opw-5111844 Forward-Port-Of: odoo/enterprise#101620
This update resolves an issue where fiscal data for Chinese invoices wasn't appearing on credit note PDFs. The fix ensures that the necessary data is now correctly included, improving the accuracy of financial reports for our Chinese customers. This was triggered by a correction in the underlying template logic.
Original PR description
The fiscal data is not displayed in the credit note pdf. This is because we're relaying on a div that is conditionnally displayed in the inherited template. opw-5467583
This update corrects a problem where the avatar card didn't accurately display the user's local time when viewing from different time zones. The fix ensures that the avatar card correctly reflects the user's timezone, improving the user experience across different locations. This was a minor bug impacting how users perceive time-sensitive information.
Original PR description
The `Avatar card shows local timezone` ensure partner local time is shown in the avatar card when the user that consults it has a different tz. This test also ensures that nothing is shown when timezone are the same. However, the assertion expects to find the node containing the text in the DOM while it's not rendered when both tz are the same. This commit fixes the issue. runbot-238383 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves several issues within the timesheet assistant, primarily related to accurately recording time against projects and tasks. The team has also improved the download functionality for the timesheet calendar and addressed overlapping event issues, ensuring smoother operation and a more reliable experience.
Original PR description
This PR fixes a few bugs with the timesheet assistant, most notably that recording time on records linked to projects and tasks was causing a traceback when opening the assistant. It also reworks the ActivityWatch download screen, and adds a working download link for Windows. Support for other platforms is yet to come. Task-5435618
This update fixes a bug that prevented the dashboard from accurately counting high-priority maintenance requests. The fix ensures that critical requests are correctly identified and displayed, allowing users to prioritize maintenance tasks effectively. This improves visibility and operational efficiency.
Original PR description
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce:…
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce: ========================= - Install the maintenance module. - Create a maintenance request and set the Priority to High (3-starred) in the form view. - Open the dashboard. - Observe that the high-priority request count is not displayed. - The count always remains 0, even when high-priority requests exist. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/94866), the logic was mistakenly changed. The priority field is defined as a Selection field, but while computing the count, the comparison was done against an integer(3, not '3') instead of the actual string value. Since the stored value is '3' (string), the condition is always evaluated to False, resulting in a count of 0. With This Commit: ========================= Ensure that high-priority maintenance requests are correctly counted and displayed on the dashboard when they exist. This provides better visibility of critical requests and helps users prioritise maintenance work effectively. Forward-Port-Of: odoo/odoo#244987
This update fixes an issue where role mentions would disappear when editing messages in Odoo. The fix ensures that role mentions are correctly preserved during the editing process, improving communication and collaboration within the system. This resolves a previous bug that prevented users from accurately referencing team members in their messages.
Original PR description
**Current behavior before PR:** Editing a message with a role mention would cause the mention to be lost. **Desired behavior after PR is merged:** Role mentions are now preserved when editing a message. task-4702960 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245080 Forward-Port-Of: odoo/odoo#218992
This update fixes an issue where keyboard navigation within the website builder's image cropping tool was unreliable. Now, users can properly validate or dismiss the cropper using keyboard shortcuts (Enter/Escape), improving the user experience and accessibility. This ensures a smoother workflow for editing website images.
Original PR description
Steps to reproduce: - Select an image in the website builder. - Open the cropping tools. - Press Enter. - Try to discard the cropper. Before this commit, focus stayed on the toolbar crop button so `Enter` opened another cropper, `Escape` closed the sidebar, and the cropper buttons were not reachable via keyboard. After this commit, the cropper grabs focus and handles `Enter/Escape` itself so keyboard interactions validate or dismiss the cropper. task-5432043 Forward-Port-Of: odoo/odoo#244484 Forward-Port-Of: odoo/odoo#240910
This update prevents duplicate 'Applicant created' messages appearing in the recruitment chatter when a new applicant is added. The previous system was creating the same log entry multiple times, leading to a cluttered view. This change ensures a cleaner and more accurate record of applicant creation events.
Original PR description
Steps to reproduce: 1. Create a new applicant in recruitment. 2. Open the applicant’s chatter. 3. See multiple “Applicant created” messages for the same creation. Bug cause: The applicant creation flow posts the `mt_applicant_new` subtype more than once (create + extra write/track), and the frontend renders the subtype description, so each duplicate post shows “Applicant created” again. Solution: - Post the `mt_applicant_new` subtype only once during applicant creation. - Avoid re-posting it in subsequent writes/tracking so chatter shows a single creation log. Task Id: 5454691 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 test bank statement imports created actual records in the database, even when the test failed. The change ensures that test imports don't trigger reconciliation processes, preventing unintended data creation. This improves the reliability of the test environment.
Original PR description
**Steps to reproduce:** - Install Accounting - Go to Accounting dashboard 1) - On "Bank" journal card, select "Import File" option in dropdown menu - Upload a file containing a lot of statements…
**Steps to reproduce:**
- Install Accounting
- Go to Accounting dashboard
1) - On "Bank" journal card, select "Import File" option in dropdown menu
- Upload a file containing a lot of statements (e.g. more than 170)
- Test the import with "Test" button
2) - Open "Bank" journal
- Select "Import records" in the cog menu
- Upload a file containing a lot of statements (e.g. more than 170)
- Test the import with "Test" button
3) - Open "Bank" journal
- Click on "Upload" button
- Upload a file containing a lot of statements (e.g. more than 170)
- Test the import with "Test" button
**Issue:**
The issue happens when the test import fails.
Even if it was a test, all the records are created in the database.
**Cause:**
During a test import the records should not be reconciled after creation.
However, by default, "auto_statement_processing" property is True and trigger the reconciliation.
When an error is raised during the test import, a rollback is made on a previous savepoint.
But a commit can be done in "_cron_try_auto_reconcile_statement_lines" method, which results in the records being created for real.
**Solution:**
Set "auto_statement_processing" property to False for Test import.
For use case 1) and 2), we make sure that we follow the same flow than use case 3).
opw-5436937
Forward-Port-Of: odoo/enterprise#104954This update fixes an issue where link styles within the HTML Editor were not consistently inheriting font sizes. Now, links automatically inherit the font size from their parent elements, creating a more visually aligned and user-friendly experience. This change prepares for a future update that will remove a specific styling variable, simplifying the design.
Original PR description
Ensure that a simple link can inherit from an ancestor `font-size` defined using the Editor toolbar, overriding the `mass_mailing` Design Tab `--link-font-size` special variable. That variable will be removed in the future, because it is more natural that a link font-size is aligned with its container. task-5868086 Forward-Port-Of: odoo/odoo#245225
This update ensures that admin users retain their intended default options when reviewing courses, regardless of edits or deletions made by other users. This prevents unintended changes to review settings and maintains a consistent experience for administrators. The change was previously addressed in another PR but has been re-implemented to avoid code duplication.
Original PR description
*: website_slides The default values for the admin user should not be changed by editing or deleting others' messages in courses. task-5326273 Forward-Port-Of: odoo/odoo#245127 Forward-Port-Of: odoo/odoo#236475
3 changes
Resolved issues and error corrections
This update fixes a bug that prevented the dashboard from accurately counting high-priority maintenance requests. The fix ensures that critical maintenance tasks are correctly identified and displayed, allowing users to prioritize maintenance efforts effectively. This improves visibility and operational efficiency.
Original PR description
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce:…
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce: ========================= - Install the maintenance module. - Create a maintenance request and set the Priority to High (3-starred) in the form view. - Open the dashboard. - Observe that the high-priority request count is not displayed. - The count always remains 0, even when high-priority requests exist. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/94866), the logic was mistakenly changed. The priority field is defined as a Selection field, but while computing the count, the comparison was done against an integer(3, not '3') instead of the actual string value. Since the stored value is '3' (string), the condition is always evaluated to False, resulting in a count of 0. With This Commit: ========================= Ensure that high-priority maintenance requests are correctly counted and displayed on the dashboard when they exist. This provides better visibility of critical requests and helps users prioritise maintenance work effectively. Forward-Port-Of: odoo/odoo#244987
This update optimizes how Odoo sends notifications, specifically when the system is under heavy load. By using a faster JSON serialization library, ‘orjson’, the system processes notifications more efficiently, reducing delays and improving overall responsiveness. This results in a smoother user experience.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load. Forward-Port-Of: odoo/odoo#245072 Forward-Port-Of: odoo/odoo#241601
This update ensures that the live chat answer selection dropdown only displays answers relevant to the current chatbot script, regardless of whether a search term is entered. Previously, the dropdown showed all answers, leading to confusion. This change improves the user experience and accuracy of live chat interactions.
Original PR description
**Description of the issue/feature this PR addresses:** In the `triggering_answer_ids` searchable dropdown, when no value is entered, the `_search_display_name` method of `chatbot_script_answer` is…
**Description of the issue/feature this PR addresses:**
In the `triggering_answer_ids` searchable dropdown, when no value is entered, the `_search_display_name` method of `chatbot_script_answer` is not called. Instead, the ORM falls back to the field’s default domain and returns all `chatbot.script.answer` records, including those from other scripts. When a value is entered, `_search_display_name` is triggered and the results are filtered correctly.
This behavior changed after PR #201587, where the `operator_optimization` step started executing before `determine_domain`. Since `determine_domain` is the step that triggers `_search_display_name`, it no longer gets called when the domain `('name', 'ilike', '')` is stripped by `operator_optimization`. Therefore, filtering only works when a non-empty filter value is provided.
**Current behavior before PR:**
All `chatbot.script.answer` records are shown in the `triggering_answer_ids` dropdown when no search value is entered, even if they don’t belong to the current chatbot script.
**Desired behavior after PR is merged:**
The `triggering_answer_ids` dropdown only shows answers belonging to the current chatbot script, regardless of whether a search value is entered.
task-[4968490](https://www.odoo.com/odoo/project/1519/tasks/4968490)
Forward-Port-Of: odoo/odoo#2281925 changes
Resolved issues and error corrections
This update resolves an issue where extra invoicing information related to electronic delivery (EDI) was hidden on the ecommerce platform. The fix ensures that this important data is now visible, streamlining the invoicing process for users. This improves compliance and accuracy in order processing.
Original PR description
The extra invoicing info step for EDI was unpublished and hidden on ecommerce. This commit fixes that. Task-5493138 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug that prevented the dashboard from accurately counting high-priority maintenance requests. The fix ensures that critical maintenance tasks are correctly identified and displayed, improving visibility and helping users prioritize maintenance effectively. This improves the reliability of the maintenance dashboard.
Original PR description
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce:…
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce: ========================= - Install the maintenance module. - Create a maintenance request and set the Priority to High (3-starred) in the form view. - Open the dashboard. - Observe that the high-priority request count is not displayed. - The count always remains 0, even when high-priority requests exist. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/94866), the logic was mistakenly changed. The priority field is defined as a Selection field, but while computing the count, the comparison was done against an integer(3, not '3') instead of the actual string value. Since the stored value is '3' (string), the condition is always evaluated to False, resulting in a count of 0. With This Commit: ========================= Ensure that high-priority maintenance requests are correctly counted and displayed on the dashboard when they exist. This provides better visibility of critical requests and helps users prioritise maintenance work effectively. Forward-Port-Of: odoo/odoo#244987
This update ensures that new partners created during shared sign requests automatically use the signer's name instead of their email address. This provides a more accurate and user-friendly experience when managing signers within the system. Previously, the system defaulted to using email as the partner name, which could lead to confusion.
Original PR description
Version: - saas-18.2 Steps to reproduce: - Create a shared sign request. - Open the shared signing link and complete the signature process. - During signing, a new partner gets created for the signer if not already exists. Before: - When the user signs the shared sign request and a new partner is created, the partner name is not set and email is used as name. After: - Now, when a user signs a shared sign request and a new partner is created, the system automatically sets the partner name using the signer name. task-5776339 Forward-Port-Of: odoo/enterprise#104869
This update optimizes how Odoo sends notifications, specifically addressing performance bottlenecks under heavy server load. By using a faster JSON serialization library (orjson), the system processes notifications more efficiently, reducing delays and improving overall responsiveness. This results in a smoother user experience.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load. Forward-Port-Of: odoo/odoo#245072 Forward-Port-Of: odoo/odoo#241601
This update corrects a timezone discrepancy that was preventing invoices sent to ZATCA (Saudi Arabia's tax authority) from being processed correctly. The fix ensures the invoice time is accurately reflected in the Asia/Riyadh timezone, as required by ZATCA regulations. This resolves a potential issue with invoice processing and compliance.
Original PR description
The time information added to the date of the invoice post for ZATCA in iso format which adds +03:00. However ZATCA expects the time to be sent as is in Asia/Riyadh timezone. - Set up a ZATCA company and onboard a journal - To simulate the timezone issue, replace the hour value with 23h in the following line: vals['l10n_sa_confirmation_datetime'] = datetime.combine(move.invoice_date, fields.Datetime.now().time()). (use .replace(hour=23))) - Create, confirm, and send an invoice to ZATCA opw-5373067 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244761 Forward-Port-Of: odoo/odoo#243961
5 changes
Resolved issues and error corrections
This update fixes an issue where the dashboard wasn't accurately counting high-priority maintenance requests. The fix ensures that critical requests are correctly identified and displayed, improving visibility and allowing users to prioritize maintenance effectively. This enhances the reliability of the maintenance dashboard.
Original PR description
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce:…
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce: ========================= - Install the maintenance module. - Create a maintenance request and set the Priority to High (3-starred) in the form view. - Open the dashboard. - Observe that the high-priority request count is not displayed. - The count always remains 0, even when high-priority requests exist. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/94866), the logic was mistakenly changed. The priority field is defined as a Selection field, but while computing the count, the comparison was done against an integer(3, not '3') instead of the actual string value. Since the stored value is '3' (string), the condition is always evaluated to False, resulting in a count of 0. With This Commit: ========================= Ensure that high-priority maintenance requests are correctly counted and displayed on the dashboard when they exist. This provides better visibility of critical requests and helps users prioritise maintenance work effectively. Forward-Port-Of: odoo/odoo#244987
This update optimizes how Odoo sends notifications, specifically when the system is under heavy load. By using a faster JSON encoding library (orjson), the system processes notifications more efficiently, reducing delays and improving overall responsiveness. This results in a smoother user experience.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load. Forward-Port-Of: odoo/odoo#245072 Forward-Port-Of: odoo/odoo#241601
This update corrects a timezone discrepancy impacting invoices sent to ZATCA in Saudi Arabia. Previously, the system added a +03:00 offset, which ZATCA requires to be transmitted in the Asia/Riyadh timezone. This fix ensures invoices are formatted correctly for ZATCA compliance, preventing potential processing delays or errors.
Original PR description
The time information added to the date of the invoice post for ZATCA in iso format which adds +03:00. However ZATCA expects the time to be sent as is in Asia/Riyadh timezone. - Set up a ZATCA company and onboard a journal - To simulate the timezone issue, replace the hour value with 23h in the following line: vals['l10n_sa_confirmation_datetime'] = datetime.combine(move.invoice_date, fields.Datetime.now().time()). (use .replace(hour=23))) - Create, confirm, and send an invoice to ZATCA opw-5373067 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244761 Forward-Port-Of: odoo/odoo#243961
This update removes the outdated 'Por Definir' payment method as the default for invoices, sale orders, and POS orders in the MX localization module. This change corrects a fiscal inconsistency, particularly when using the PUE payment policy, ensuring accurate reporting and compliance.
Original PR description
### Issue: The payment method `99 – Por Definir` was used as the default value for invoices, sale orders, and POS orders This leads to fiscal inconsistencies, especially when invoices use the `PUE`…
### Issue: The payment method `99 – Por Definir` was used as the default value for invoices, sale orders, and POS orders This leads to fiscal inconsistencies, especially when invoices use the `PUE` payment policy, where this payment method is invalid ### Cause: In the `_compute_l10n_mx_edi_payment_method_id` methods, the default value was always set to `Por Definir` ### Fix: After discussion with the PO (MIAL), the chosen solution is to archive the payment method `99 – Por Definir`and remove it as a default value All valid cases should already be handled explicitly, making it clear to the user that something is missing when the data is blank ### Steps to reproduce: - Install `l10n_mx_edi` and switch to the MX company - Create an invoice with today’s invoice date - The payment policy is set to PUE - Before the fix, the payment method is set to `Por Definir` For Sale Order and POS Order tests, it's the default value as soon as you create an order opw-5406038 Forward-Port-Of: odoo/enterprise#105058 Forward-Port-Of: odoo/enterprise#104164
This update fixes a display issue in the appointment calendar for Ukrainian and Polish users. Previously, month names were incorrectly formatted in the genitive case. The fix ensures month names are displayed correctly in the nominative case, aligning with standard calendar conventions and improving user experience for these languages.
Original PR description
In the appointment calendar, the "Month Year" (e.g. January 2026) is displayed at the top of the calendar selector as is standard for calendars. Unfortunately in some languages, the word month word…
In the appointment calendar, the "Month Year" (e.g. January 2026) is displayed at the top of the calendar selector as is standard for calendars. Unfortunately in some languages, the word month word used depends on grammatical situation. Steps to reproduce: - activate Ukrainian (or Polish) language - Preview (i.e. the website view) of any appointment - Change the preview into Ukrainian (or Polish) Expected result: Calendar month at top of calendar is shown in the nominative case: e.g. January 2026 = січень 2026 (in Ukrainian) Actual result: Calendar month is shown in the genitive case (e.g. "of January", as in "the 12th of January): e.g. January 2026 = січня 2026 (in Ukrainian) Fix is to switch from the "MMMM Y" format (i.e. month based on grammar context) to "LLLL Y" (i.e. stand alone month) which will use the correct month case. Ref: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-month Note that for most languages this won't make a difference since there is usually only 1 way of writing a month. opw-5474705 picture diff (for January 2026): before fix: <img width="1168" height="468" alt="image" src="https://github.com/user-attachments/assets/36754439-e664-40f3-9c5b-7c9c76cd7cca" /> after fix: <img width="1215" height="492" alt="image" src="https://github.com/user-attachments/assets/82f0665e-fe70-4b9f-b1d4-f420b52db38f" /> Forward-Port-Of: odoo/enterprise#104942
22 changes
New functionality added to Odoo
This update adds PAN and UAN fields to the employee information section within the Odoo Enterprise salary configuration tool. This change is specifically designed to improve the accuracy of statutory reporting for Indian employees, ensuring compliance with local regulations.
Original PR description
- added PAN and UAN fields to the Personal Information model. - now fields appear under the Personal Information section of the Salary Configurator. - This applies specifically to the Indian Employee Pay structure and helps capture employee statutory details during salary configuration. task-5452379
This update introduces a new dashboard for administrators to quickly monitor eCommerce sales performance, including key metrics like sales, average cart value, and conversion rates. The dashboard provides a centralized view, streamlining sales analysis and enabling data-driven decision-making. It also includes batch confirmation of sale orders directly from the list view.
Original PR description
This commit brings back the eCommerce dashboard for admins, providing a quick overview of eCommerce sales performance. - Adds the dashboard in list view. - Implements custom search filters for relevant card data. - Adds a dropdown with predefined time periods to view sales, average cart value, and conversion rate. - Adds a new view for eCommerce orders as some extesions of main `sale` has no relevence in eCommerce context. design task-5177259 task-5153059 See Also: - https://github.com/odoo/enterprise/pull/98246 Co-authored and Designed by: Laetitia Daubechies (ldau) <ldau@odoo.com> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enhancements to existing features
This update allows users to select and personalize the design of their completion certificates. Previously, certificate styles were fixed, but now users can choose from available options and update designs through document layouts, improving the user experience and offering greater flexibility.
Original PR description
Before: - Users could not choose the completion certificate style. - Certificate design was fixed and could not be changed. After: - Users can now select the certificate style they like. - Certificate design can be updated from document layout. Impact: - More flexibility for users to personalize certificates. - Better user experience and improved customization. task-5423843
This update enhances the connection between Odoo's planning and field service modules. Specifically, a key field has been reintroduced to the planning.slot data structure, enabling more accurate management of invention contracts and streamlining workflows between teams. This improves the overall efficiency of scheduling and resource allocation.
Original PR description
This commit adds the task_id in planning.slot to prepare the integration between planning and field service to correctly manage the invention contract. task-5259217
This update allows users to directly rearrange their favorite articles within the knowledge base, eliminating the need to navigate to other sections. New restrictions have been implemented to prevent incorrect hierarchy changes, ensuring data integrity and usability. The changes also include updated tours to guide users through the new functionality.
Original PR description
Before this commit, it was only possible to resequence favorites (child and roots). This commit enables to allow changing the heirarchy directly from the favorite section to avoid scrolling down to the workspace and other sections. Also, there are three restrictions while dragging: 1. Cannot remove parent and make new root of the children. 2. Cannot make a readonly article a children. 3. Cannot make an article children of a readonly article. Tours are also modified to verify the behaviour. Task-4830559
This update refines how work entry data is created, ensuring only relevant details are included. This change addresses a need across various Odoo localizations, streamlining data and improving efficiency. It focuses on filtering work entries based on their type, ensuring accurate reporting and management.
Original PR description
This commits adds an optional domain when creating work entries to only include the work details that are `is_work` or that don't have a work_entry_type_id, this is needed by a lot of localizations task-5076624 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update aligns the subscription sale order view with the new eCommerce sale order view. This ensures a consistent and streamlined experience for customers purchasing subscriptions through the online store. The change improves the usability and presentation of subscription options within the website.
Original PR description
This commit replicates the existing subscription sale order view and adjusts it for the newly created sale order view for the eCommerce context. See Also: - https://github.com/odoo/odoo/pull/230760 task-5153059
This update enhances the way users search for property types within the Odoo web interface. The change replaces a dropdown menu with a search-enabled select menu, allowing for faster and more intuitive property type lookups. This improvement streamlines the user experience and improves efficiency.
Original PR description
This commit replaces the property definition type dropdown by a select menu. It allows searching the property type in the input. The select menu now highlights the searched text in the option labels and supports odoomark. task-5226604
This update changes the way Odoo generates language URLs from underscores to hyphens (e.g., en-US). This aligns with modern web standards, boosting SEO performance and ensuring consistent URL usage across the system. This change improves the overall user experience and search engine optimization.
Original PR description
Current behavior before PR: - The url_code stored for a language used the underscore format (en_US, fr_BE, etc.). - This format is not SEO-friendly and goes against modern conventions which prefer hyphens (e.g., en-US, fr-BE). Desired behavior after PR is merged: - The url_code is now automatically generated using a hyphenated format (en-US, fr-BE) instead of using an underscore. - This url_code can now be used consistently anywhere in the system for building URLs or SEO paths. Task - 4953805 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update centralizes the logic for controlling button visibility in the MRP and Repair modules, reducing redundancy and ensuring consistency across the Community and Enterprise versions of Odoo. By standardizing visibility rules, this change simplifies future updates and maintenance, improving overall system stability.
Original PR description
Introduce computed boolean fields to represent the shared visibility conditions for the `Produce` and `Produce All` buttons in MRP and the `End Repair` button in Repair. Enterprise modules now reuse these fields instead of duplicating the logic inside the XML `invisible` attributes. This reduces code duplication, avoids inconsistencies between Community and Enterprise, and makes future overrides simpler and safer. Task ID: 4898373
Resolved issues and error corrections
This update simplifies the HTML code for buttons across several Odoo modules. By removing unnecessary 'role=button' attributes, we've improved the accessibility of the application for users with assistive technologies. This aligns with web standards and ensures a better user experience for everyone.
Original PR description
The `<button>` HTML element has by default the "role", well, "button". No need to specify it again. Reference: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/button_role 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 removes redundant accessibility settings from button elements within Odoo. The HTML standard already defines buttons with the 'button' role, so specifying it again was unnecessary. This change ensures better accessibility and aligns with web standards, improving the user experience for all Odoo users.
Original PR description
The `<button>` HTML element has by default the "role", well, "button". No need to specify it again. Reference: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/button_role
This pull request resolves a bug preventing the tour test for overtime ruleset functionality from running correctly. The fix ensures the test passes, allowing users to properly navigate and understand the overtime ruleset within the HR payroll module. This improves the reliability of the tour testing process.
Original PR description
https://runbot.odoo.com/odoo/runbot.build.error/237877
This update enforces that binary fields in Odoo must store data as bytes, addressing a previous workaround that allowed storing mutable data. This change improves data integrity and prevents unexpected behavior when fields are validated. It impacts various modules where this workaround was utilized.
Original PR description
Description of the issue/feature this PR addresses:
The field is used to sometimes some mutable data because the `convert_to_cache` does not force a particular type. That hack is used in multiple places where instead json files (or another form of cache) could be used.
Current behavior before PR:
```py
res.binary_field = val = {}
res.binary_field["ok"] = 4
assert "ok" in val
```
Desired behavior after PR is merged:
```py
res.binary_field = {} # fail because not bytes (or like bytes)
```
https://github.com/odoo/enterprise/pull/99567
task-4251301
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue where fields.Binary was being used incorrectly, leading to potential data storage inefficiencies. The change ensures fields.Binary is used appropriately for storing binary data, improving data management and reducing storage costs. This impacts several Odoo modules related to exports and data handling.
Original PR description
odoo/odoo#235832
This update fixes an error in how future time off balances are calculated for employees using hourly time off types. Previously, the system incorrectly added hours instead of the expected accrual. The change updates the system to correctly convert accruals from days to hours based on employee schedules, ensuring accurate balance forecasts.
Original PR description
Steps to Reproduce: Create an accrual plan that accrues 2 days monthly, credited at the start of the month. Create a Time Off Type with the Unit of Measure set to Hours. Create an allocation request…
Steps to Reproduce: Create an accrual plan that accrues 2 days monthly, credited at the start of the month. Create a Time Off Type with the Unit of Measure set to Hours. Create an allocation request using the above Time Off Type and Accrual Plan. Open the Time Off dashboard: a. The current available balance is displayed in hours and is correctly computed based on the employee’s working schedule. b. However, when checking the balance for a future date, the system incorrectly adds 2 hours instead of 16 hours (i.e., 2 days converted to hours based on the working schedule). Bug cause: The system incorrectly identified the unit of measure because it was still referencing the request_unit field, which defaults to 'day'. Following a recent refactor where request_unit was replaced by unit_of_measure to define Time Off Type units, this specific logic flow was left unupdated, causing it to be calculated in days instead of hours. Solution: Updated the future leaves calculation logic to use unit_of_measure instead of request_unit. This ensures that when a Time Off Type is configured in hours, accruals defined in days are correctly converted based on the employee's working schedule. Task: 5498292 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where snippet images weren't appearing on the website. The fix corrects the file paths for two key image snippets, ensuring they are correctly displayed to users. This improves the visual quality of the website.
Original PR description
The images in snippets were not displayed due to incorrect source paths. This commit fixes the paths for `s_cta_mockups` and `s_cta_mobile` snippets. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes an outdated workaround for cursor styles, simplifying the codebase and ensuring consistent styling across Odoo. The change improves performance and reduces potential compatibility issues as `cursor: grab` is now standard in modern browsers.
Original PR description
*: account, html_builder, html_editor, point_of_sale The `o-grab-cursor` mixin was originally introduced to handle cross-browser compatibility for the `grab` cursor style. Since `cursor: grab` is now widely supported by all modern browsers, the mixin is no longer necessary. This commit removes the mixin definition and replaces all its usages with the standard CSS property.
This update simplifies the Gantt chart's cursor style by removing an older compatibility fix. Modern browsers now support the standard 'grab' cursor, making the previous workaround unnecessary. This change improves the user experience and reduces code complexity.
Original PR description
The `o-grab-cursor` mixin was originally introduced to handle cross-browser compatibility for the `grab` cursor style. Since `cursor: grab` is now widely supported by all modern browsers, the mixin is no longer necessary. This commit removes the mixin definition and replaces all its usages with the standard CSS property. See https://github.com/odoo/odoo/pull/245027
This update ensures that all work details are now included in payroll reports for the Belgian and Hong Kong localization versions of Odoo. This change aligns with a recent update to the core Odoo platform, simplifying reporting and providing a more complete view of employee work history.
Original PR description
Based on odoo/odoo#235425, This commit removes the now-redundant override of `resource.calendar` and since the Belgian Localization is the only one that expects all work entries regardless if the work entry type is a leave or not. This commit also overrides the hook that allows us to remove the filter added on work details. task-5076624
Features or functions removed from Odoo
This update simplifies the way Discuss messages are tracked, removing a redundant feature that impacted reliability and user privacy. The change improves the accuracy of message history and streamlines the 'Seen' indicator, providing a clearer visual representation of message status.
Original PR description
enterprise: https://github.com/odoo/enterprise/pull/104332 upgrade: https://github.com/odoo/upgrade/pull/9269 * = im_livechat, test_discuss_full This commit removes the fetched feature of Discuss…
enterprise: https://github.com/odoo/enterprise/pull/104332 upgrade: https://github.com/odoo/upgrade/pull/9269 * = im_livechat, test_discuss_full This commit removes the fetched feature of Discuss messages, for the following reasons: 1. Redundancy: The original purpose of confirming server receipt is now better handled by the "pending" message state (spinner/opacity). Once a message is no longer pending, it is effectively "sent". 2. Reliability & Privacy: The previous implementation relied on a single bus notification, which when lost would lead to an inconsistent state. Fixing this reliability (by broadcasting status on connection) would negatively impact performance and, more critically, leak the presence of users who wish to appear "Offline". 3. Data Modeling: The model only tracks the last fetched ID, which is an inaccurate representation of message history if gaps exist. This commit also simplifies the "Seen" indicator to reflect this change: - single gray check: Some people have seen. - double purple checks: Seen by all channel members. task-5177299
This update simplifies the display of WhatsApp messages by removing a redundant 'fetched' indicator. This change improves reliability and privacy by preventing inaccurate tracking of user status and ensures users can appear offline. The 'Seen' indicator has also been updated for clarity.
Original PR description
community: https://github.com/odoo/odoo/pull/243853 upgrade: https://github.com/odoo/upgrade/pull/9269 This commit removes the fetched feature of Discuss messages, for the following reasons: 1.…
community: https://github.com/odoo/odoo/pull/243853 upgrade: https://github.com/odoo/upgrade/pull/9269 This commit removes the fetched feature of Discuss messages, for the following reasons: 1. Redundancy: The original purpose of confirming server receipt is now better handled by the "pending" message state (spinner/opacity). Once a message is no longer pending, it is effectively "sent". 2. Reliability & Privacy: The previous implementation relied on a single bus notification, which when lost would lead to an inconsistent state. Fixing this reliability (by broadcasting status on connection) would negatively impact performance and, more critically, leak the presence of users who wish to appear "Offline". 3. Data Modeling: The model only tracks the last fetched ID, which is an inaccurate representation of message history if gaps exist. This commit also simplifies the "Seen" indicator to reflect this change: - single gray check: Some people have seen. - double purple checks: Seen by all channel members. task-5177299
36 changes
New functionality added to Odoo
This update incorporates the latest Romanian VAT regulations, specifically the addition of 11% and 21% tax rates. The changes ensure Odoo correctly handles these new rates when calculating fiscal positions, maintaining accurate accounting and tax reporting for Romanian businesses.
Original PR description
The new 11% and 21% taxes introduced with the updated Romanian VAT law were added with this commit https://github.com/odoo/odoo/commit/2026212d0f7ffc217be3c6a2ff2abe5288c18afb , but some tax mappings were missing. This commit completes the setup by adding the required tax mappings, ensuring the new rates work correctly with fiscal positions. task-5480159 Forward-Port-Of: odoo/odoo#244745 Forward-Port-Of: odoo/odoo#243452
Resolved issues and error corrections
This update fixes an issue where keyboard navigation within the website builder's image cropping tool was unreliable. Now, pressing 'Enter' correctly validates or dismisses the cropper, and 'Escape' properly closes the sidebar. This provides a smoother and more accessible experience for users editing images.
Original PR description
Steps to reproduce: - Select an image in the website builder. - Open the cropping tools. - Press Enter. - Try to discard the cropper. Before this commit, focus stayed on the toolbar crop button so `Enter` opened another cropper, `Escape` closed the sidebar, and the cropper buttons were not reachable via keyboard. After this commit, the cropper grabs focus and handles `Enter/Escape` itself so keyboard interactions validate or dismiss the cropper. task-5432043 Forward-Port-Of: odoo/odoo#240910
This update fixes an issue where rental products displayed on the ecommerce site incorrectly showed an outdated quantity when 'continue selling' was enabled. The fix ensures the available quantity accurately reflects the rental period selected, improving the customer experience and preventing overselling of rental units. This was achieved by updating the calculation of available quantity.
Original PR description
**Issue**: The displayed available quantity on the ecommerce product page is incorrect for rental products when "continue selling" is enabled. **Steps to reproduce**: - Create a rental product…
**Issue**: The displayed available quantity on the ecommerce product page is incorrect for rental products when "continue selling" is enabled. **Steps to reproduce**: - Create a rental product tracked in stock with a quantity of 5 - Enable "continue selling" and "show available quantity below 10" - Go to the ecommerce page of this product - Rent 3 units for a given period, confirm and pay - Return to the ecommerce product page -> Whatever the selected renting period, the displayed quantity is always 2 **Cause**: The website displays `free_qty`: https://github.com/odoo/enterprise/blob/41c729e22c5fd1abb690f8335e933f793be0b319/website_sale_stock_renting/static/src/xml/website_sale_stock_renting_product_availability.xml#L15 `free_qty` is computed in: https://github.com/odoo-dev/odoo/blob/0935829ddaecd7b2b6eec9157f8f790b546d06ff/addons/website_sale_stock/models/product_template.py#L36 which leads to: https://github.com/odoo/enterprise/blob/41c729e22c5fd1abb690f8335e933f793be0b319/website_sale_stock_renting/models/website.py#L10 and ultimately relies on: https://github.com/odoo/odoo/blob/37bf1703c7478a3010b71cd60bbb43b3295a605b/addons/stock/models/product.py#L213 This computation does not take the selected renting period into account. There is a period-aware computation here: https://github.com/odoo/enterprise/blob/41c729e22c5fd1abb690f8335e933f793be0b319/website_sale_stock_renting/models/website.py#L15C17-L21C1 but it is only triggered when `product.allow_out_of_stock_order` is False (i.e. when "continue selling" is disabled). opw-[5354163](https://www.odoo.com/web#id=5354163&view_type=form&model=project.task) Forward-Port-Of: odoo/enterprise#104686 Forward-Port-Of: odoo/enterprise#103333
A test within the Documents module was failing due to an issue with redirect URLs. The fix ensures that test URLs are consistently relative, resolving the problem and maintaining test stability. This ensures the Documents module continues to function correctly.
Original PR description
Bug === On some runs, the redirect URL is absolute and not relative, (eg: `http://127.0.0.1:8069/web/signup?db=...`) and so the test needs to be adapted. Task-5857520 Forward-Port-Of: odoo/enterprise#105027
This update prevents excessive email notifications to managers when employees submit expenses. Previously, managers received emails for every state change, which was causing a flood of messages. Now, managers only receive a weekly email summarizing pending expenses awaiting their approval, streamlining the approval process and reducing inbox clutter.
Original PR description
When an employee submits an expense and assigns a manager, an approval activity is scheduled. However, email notifications are now disabled to avoid spamming the assigned managers. * Prevent notifying the expense manager when expense state changes. * Email 'Next expense is waiting your approval' is scheduled to be sent to the manager once a week if the manager has any expenses left to approve. task-4676396 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244995 Forward-Port-Of: odoo/odoo#210614
This update ensures that administrator users retain their default rating options within courses, preventing accidental changes made by other users. The change avoids duplicated fixes and streamlines the portal_rating module, improving stability and reducing potential conflicts. This protects the integrity of course ratings for administrators.
Original PR description
*: website_slides The default values for the admin user should not be changed by editing or deleting others' messages in courses. task-5326273 Forward-Port-Of: odoo/odoo#244782 Forward-Port-Of: odoo/odoo#236475
This update resolves a visual glitch on mobile websites where a horizontal scrollbar briefly appeared when the header returned to its original position after scrolling. The fix ensures the header's styling is correctly synchronized, preventing this momentary display issue. This improves the overall user experience, particularly on RTL websites.
Original PR description
There was an horizontal scrollbar that would appear for a short time after scrolling back to the top of the page. This would occur because the header would still have the "transform" property but the class "o_header_affixed" was already removed. To fix the issue, the header transform is now applied using dynamicContent, to synchronize the style and class correctly. This requires the standard header to have "transition: none" applied after it is scrolled since "translate(0, -100%)" would trigger an animation when hiding the header. task-5155878 Forward-Port-Of: odoo/odoo#241980
This update resolves a critical issue where Odoo servers could crash due to errors in module descriptions (particularly those using Markdown). The fix ensures Odoo gracefully handles invalid formatting, preventing unexpected shutdowns during module installation or updates. This improves stability and reduces the risk of downtime.
Original PR description
Modules containing valid Markdown in their description or README.md could cause Odoo to crash during startup or module updates if the content confused the reStructuredText (RST) parser. ### Steps to…
Modules containing valid Markdown in their description or README.md could cause Odoo to crash during startup or module updates if the content confused the reStructuredText (RST) parser.
### Steps to reproduce
1. Create a module with a manifest like this:
```py
{
'name': 'base',
'description': """
....
""",
}
```
2. Start the Odoo server or attempt to install or update update the module.
3. The server crashes:
```
docutils.utils.SystemMessage: (SEVERE/4) Unexpected section title or transition.
```
### Cause
The crash occurs during the execution of the `_get_desc` method in the `ir.module.module` model, which computes the `description_html` field.
When Odoo processes a module, it checks for a pre-rendered HTML description at `static/description/index.html`. If this file is missing, the `_get_desc` method attempts to generate HTML from the module's `description` field (often populated from the `README.md` file) by calling the `docutils.core.publish_string` function.
The **docutils** library is designed specifically for **reStructuredText (RST)**. If the input text contains structural patterns that violate RST rules—such as inconsistent header levels or "transitions" in invalid contexts—docutils flags a severe error and raises a `docutils.utils.SystemMessage` exception.
### Fix
This commit handles these exceptions and falls back to a raw text rendering. It also improves the logic by removing the restriction that prevented non-application modules from rendering their description via RST.
opw-5424131
Forward-Port-Of: odoo/odoo#243517This update fixes an issue where the company tolerance time wasn't being calculated accurately when an employee had multiple attendances on the same day. Previously, overtime was incorrectly computed, leading to inaccurate time tracking. This change ensures the tolerance time is applied correctly, preventing unnecessary overtime calculations.
Original PR description
_ ## Short functional explanation of the error When an employee enters multiple attendances for a single day, the company tolerance time isn't computed correctly. ## Reproduction Steps 1. Go to…
_ ## Short functional explanation of the error When an employee enters multiple attendances for a single day, the company tolerance time isn't computed correctly. ## Reproduction Steps 1. Go to attendances. 2. Click on configuration and scroll down to the Extra Hours section. Set a Tolerance Time in Favor of Company of 15 minutes. 3. Create 2 attendances for the same employee: one attendance from 8 to 15 for example, and a second one from 16 to 18:12. ### Expected behavior As the overtime entered is 12 minutes, which is inferior to the company tolerance time of 15 minutes, no extra time should be computed. ### Unexpected behavior 12 minutes of overtime are computed. ## Origin of the issue Let's say we enter 2 different shifts for the same day. Our work day should be 8 hours, and the sum of both shifts reaches 8 hours or more. We shouldn't have any overtime. However, in the code, the overtime is negative. This is compensated by, in our case, the post-work time: in our case, our overtime duration will be equal to -1, but our post-work time will be equal to 1.2. Both cancel each other, and in the end we obtain 0.2 of overtime, which corresponds to our 10 minutes overtime. However, in this code: https://github.com/odoo/odoo/blob/afcbd98594c9f7007f03a343ea40ea122b955459/addons/hr_attendance/models/hr_attendance.py#L374-L380 it isn't computed that way: because post-work time is 1.2, which is above our company tolerance time of 15 minutes (0.25 in the code), we will always be in the case where we exceed the tolerance time. Hence, we have to "flatten" the overtime duration and the post-work time before reaching that piece of code. note: the same bug exists for the employee tolerance time, which is corrected in this commit. note: the issue doesn't persist in 19.0, forwarding the tests. __ opw-5136861 --- Forward-Port-Of: odoo/odoo#244186 Forward-Port-Of: odoo/odoo#242517
This update adds a 'View' button to the package history list, allowing users to directly access the details of each package created during a receiving process. Previously, users couldn't easily open the package records from this list, which has now been corrected to align with the data structure. This improves tracking and management of stock packages.
Original PR description
Steps to reproduce: - Enable packages - Do a reception with a product and put it in a pack - Open the 'Packages' stat button - View button is at the end of every line, to open the package - Go back to the picking and validate it - Open the 'Packages' stat button again Issue: There isn't any 'View' button, so we can't open the package records from here. It was done somewhat on purpose, as it's a list of `stock.package.history` and not `stock.package`, so we wouldn't open the right record. But we can simply add a button that opens the linked package instead. opw-5436847 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix resolves an issue where mentioning portal users from different companies within Odoo caused an access error. The problem stemmed from how user read access was determined based on the currently active company. The update corrects a data storage issue that was triggering this error, ensuring portal users can be mentioned regardless of the company context.
Original PR description
* = test_discuss_full Before this commit, mentioning a portal user from another company would result in an access error. Steps to reproduce: 1. Install `hr_holidays` module. 2 Have a portal user in company A. 3. Switch the active company to company B. 4. In any chatter, try to mention said portal user. This happens because portal user read access depends on the current active company (see `res_users_rule`). The access error happens since [1], which added user information to the partner's default Store fields. [1] https://github.com/odoo/odoo/pull/212173 task-5499827
This fix ensures the sitemap generated for eCommerce categories accurately reflects only active products. Previously, it incorrectly included archived products, leading to inaccurate sitemap listings. The update adjusts the access rules to prioritize public categories with active products, resolving this issue.
Original PR description
To reproduce:
- Connect as "admin"
- Go to "Website / eCommerce / Products / eCommerce Category"
- Create a new category "Test With Archived Products"
- Go to "Website / eCommerce / Products"
- Create a product:
- name it "Test Archived"
- in "Sales" tab, under "eCommerce Shop" section, set category to:
"Test With Archived Products"
- then archive the product
- Clear the sitemap attachment and go to /sitemap.xml
The sitemap has an entry for "Test With Archived Products" but it should should not be visible as there are only archived products for that category.
Since odoo/odoo@d3fd767b0568, access rules domain are always optimized with `active_test=False`, so ensure we only return public category that have active products.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves a technical issue that could cause Odoo upgrades to fail when using manual one2many fields. Specifically, it addresses a 'KeyError' that occurred during the upgrade process when certain inverse fields weren't properly configured. This change ensures smoother and more reliable Odoo upgrades, particularly for customizations using manual one2many relationships.
Original PR description
When ``setup`` a manual one2many field, if its ``inverse_name`` field hasn't been ``setup`` and is also a manual field which might be ``pop`` when ``setup``, the one2many field can be ``setup`` successfully. But when computing ``setup_inverses`` when ``init_models``, the ``inverse_name`` will cause a ``KeyError``. ``invf = registry[self.comodel_name]._fields[self.inverse_name]`` Reproduce: see https://github.com/odoo/odoo/pull/240085 This commit simply checks the ``setup`` for the inverse field of the one2many field. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves issues related to employee data access for Stripe cardholders, aligning with Stripe's requirements for identity verification. It also corrects inaccuracies in card limit calculations, ensuring expenses are accurately tracked without overly restrictive time-based limitations.
Original PR description
[FIX] hr_expense_stripe: Fix access rights Fix access rights to some employee fields in the cardholder creation. Allowing the expense card manager to read some employee private fields as stripe requires some identity checks Improve activate card access rights checks when activating a card [FIX] hr_expense_stripe: Fix card limits Fix the limits computation for the cards, only looking at expenses paid with said card without unintended granularity. Also fixing the short time intervals that were considered as an all time limit
This update fixes an issue where invoice costs weren't accurately calculated, particularly when linked to stock movements. Now, the system correctly uses the standard price and FIFO method based on the actual stock valuation, ensuring more precise cost reporting for invoices. Related tests have been re-enabled to verify the fix.
Original PR description
This commit makes the cogs computation correct again. In case the invoice has some linked stock move, the cogs price unit will be the standard price in 'standard' and 'avco'. The fifo computation will be the based on the stack. Computing cogs value will ignore the potential owner_id set in the stock move related to the invoice being posted when computing the cogs price unit in `_get_price_unit()`. This commit looks up related stock move of the invoice for all cost method to compute the cost based on the valued stock move line. This commit also re-enable the anglosaxon tests related to outgoing flow opw: 5266208 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an error that occurred when users attempted to create invoices with payment methods sharing the same code, a requirement by Mexican regulations (CFDI). The fix ensures data integrity by making payment method codes read-only and implementing a unique code constraint, preventing future conflicts.
Original PR description
Currently, an error occurs when a user tries to post an invoice using a payment method that shares the same code as another payment method. Steps to replicate: - Install `l10n_mx_edi` and…
Currently, an error occurs when a user tries to post an invoice using a payment method that shares the same code as another payment method.
Steps to replicate:
- Install `l10n_mx_edi` and `accountant` with demo and switch to `ZAPATERIA URTADO ÑERI` (Mexican company).
- Go to `Accounting > Configuration > Payment Way Codes (MX)`.
- Open `Efectivo` and change its code to `02`.
- Create a new Invoice, select `Efectivo` in the Payment Way.
- Add a customer and a move line, then confirm the invoice and send it (make sure CFDI is checked).
Error:
```
File '/home/odoo/src/enterprise/19.0/l10n_mx_edi/models/account_move.py', line 424, in _l10n_mx_edi_get_extra_invoice_report_values
cfdi_infos['payment_way'] = f'{payment_way} - {payment_method.name}'
File '/home/odoo/src/odoo/19.0/odoo/orm/fields.py', line 1659, in __get__
record.ensure_one()
File '/home/odoo/src/odoo/19.0/odoo/orm/models.py', line 5934, in ensure_one
raise ValueError('Expected singleton: %s' % self)
ValueError: Expected singleton: l10n_mx_edi.payment.method(1, 22)
```
Cause:
- Issue originated through this [PR] that gave access to write on the model.
- As the user made the codes of two payment methods same, the [search] returned two records and while accessing `payment_method.name` on two records it results into this error.
Solution:
- Made the fields read-only via XML to prevent users from changing the payment method codes established by the Mexican government.
- Added limit to the search query to prevent multiple records. (for existing DBs that might have changed payment method codes).
- Removed unlink rights on the `l10n_mx_edi.payment.method` model.
- Added a SQL constraint to allow only unique values for the code.
[PR]: https://github.com/odoo/enterprise/pull/38046
[search]: https://github.com/odoo/enterprise/blob/18117c6a9fbf270ace1c551616828a85713d5225/l10n_mx_edi/models/account_move.py#L423
sentry-7171030995
Forward-Port-Of: odoo/enterprise#104914
Forward-Port-Of: odoo/enterprise#103944This update resolves a problem where users accessing documents through shared links initially didn't see subfolders correctly. The fix ensures that subfolder access is properly updated when a user views a shared folder, eliminating the need for a manual refresh to view all content.
Original PR description
**Steps to reproduce:** - Create a portal user - Go to the documents app - Click on the marketing folder - Share the marketing folder through a link (Anyone with a link = viewer + discoverable) -…
**Steps to reproduce:** - Create a portal user - Go to the documents app - Click on the marketing folder - Share the marketing folder through a link (Anyone with a link = viewer + discoverable) - Copy the share link - Login with the portal user in an incognito window - Paste the share link in an incognito browser - Click on "brand 1" folder, result nothing is showing while there should be a folder and a picture - Click on "brand 2" - Click back on "brand 1" and now the folder and picture are visible - If you click on a subfolder of "brand 1" you also get an error **Issue:** Discoverable subfolders accessed using `accessToken` are not available on the first read of a user and this happens for each level of the hierarchy (refresh is needed each time). When using sharing link to display folders with a user, the subfolder document access is created on `/documents/touch/` using `_from_access_token`. But on the js side the call is delayed (with debounce) and occurs after the `web_search_read`. This means that subfolders are only accessible after a refresh or by switching back and forth between folders. Also, even after the folder is displayed, if there are other subfolders in it, going deeper in the hierarchy won't work as well without a refresh due to the `search_panel_select_range` missing the new folder. **Fix:** Not sure on the best way to fix this, the issue will always be related to performance. Current fix checks if a reload is needed by sending a flag in the `/documents/touch/<access_token>` request result when a new document access was created. opw-5156297 Forward-Port-Of: odoo/enterprise#104585 Forward-Port-Of: odoo/enterprise#99820
This update resolves an issue where multiple 'Applicant created' messages were appearing in the applicant's chatter log when a new applicant was created. The fix ensures that the log entry is only created once, improving the clarity and accuracy of applicant communication within the system. This prevents confusion and streamlines the recruitment process.
Original PR description
Steps to reproduce: 1. Create a new applicant in recruitment. 2. Open the applicant’s chatter. 3. See multiple “Applicant created” messages for the same creation. Bug cause: The applicant creation flow posts the `mt_applicant_new` subtype more than once (create + extra write/track), and the frontend renders the subtype description, so each duplicate post shows “Applicant created” again. Solution: - Post the `mt_applicant_new` subtype only once during applicant creation. - Avoid re-posting it in subsequent writes/tracking so chatter shows a single creation log. Task Id: 5454691
This update corrects a display issue in the applicant recruitment reports module. Incorrect stage names were appearing in chatter messages, preventing users from seeing the 'Stage changed' label. The fix ensures accurate stage name display and proper tracking of applicant stage transitions.
Original PR description
…records in hr_recruitment_reports demo data Steps to reproduce: 1. Load demo data for hr_recruitment_reports module 2. Check applicant records in chatter 3. Observe that stage change messages don't…
…records in hr_recruitment_reports demo data Steps to reproduce: 1. Load demo data for hr_recruitment_reports module 2. Check applicant records in chatter 3. Observe that stage change messages don't show "Stage changed" label 4. Review mail.tracking.value records for applicant stage changes 5. Observe incorrect stage name "Initial Qualification" instead of "Qualification" Bug cause: mail.message records for applicant stage changes were missing the subtype_id field, which defaults to an incorrect subtype (mt_note instead of mt_applicant_stage_changed). This caused the messages to be treated as internal notes rather than stage change notifications. Additionally, mail.tracking.value records used "Initial Qualification" as the old_value_char or new_value_char, which doesn't match the actual stage name defined in hr_recruitment module. The correct stage name is simply "Qualification" (ref: hr_recruitment.stage_job1). Solution: - Add subtype_id field with reference to hr_recruitment.mt_applicant_stage_changed to all mail.message records that track applicant stage transitions - This ensures stage change events are properly identified and displayed in chatter with the correct "Stage changed" label - Update old_value_char and new_value_char fields in mail.tracking.value records to use the correct stage name "Qualification" instead of "Initial Qualification" - Ensures consistency with actual stage names and proper display in applicant chatter history Affected records: 20 mail.message records in hr_recruitment_reports_demo.xml Task Id:5454691
This update resolves an issue where creating two companies with Sri Lankan settings resulted in a company inconsistency error. The problem stemmed from a duplicate tax ID format (using periods) in the system's tax configuration file. Removing the periods ensures correct company identification and prevents this error.
Original PR description
**STEP TO REPRODUCE** 1. create a company, and set country to Sri Lanka. 2. create a 2nd company, and do the same. 3. There is a company inconsistencies error. **CAUSE** There is 2 taxes defined in `account.tax-lk.csv` with `.` in their id. This messes up with the function `company_xmlid()`: we end up loading the `account.tax` record of the 1st company when saving the 2nd company. opw-5473952
This update addresses a potential issue where quality checks wouldn't display a helpful message if no IoT device was connected. Now, a notification appears, guiding users to configure a device and ensuring a smoother quality check process. This improves user experience and prevents confusion.
Original PR description
We now display a notification when no device is configured for a measure quality check. opw-5409775
This update fixes an issue where quote PDFs weren't correctly recognizing form fields when dealing with products organized in a hierarchy. The change ensures that the system accurately detects and includes all relevant product details, particularly for complex product structures, leading to more complete and accurate quotes. This improves the overall sales process and reduces errors.
Original PR description
- For Hierarchy objects, we have to check '/T' in '/Parent' instead directly within '/Annot' like flat fields. Desired behavior after PR is merged: - Support form fields with Hierarchy objects. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238323
This update automatically updates the IoT box's database when a new version is released. Previously, manual restarts were required, which was inconvenient. Now, the IoT box checks for changes and restarts itself to ensure it's always running the latest database version, improving stability and efficiency.
Original PR description
Before this commit, when the DB was upgraded to a new version, the IoT box had to be manually restarted so that it would checkout and align with the new version. After this commit, we check the DB branch whenever we receive a `bundle_changed` message on the websocket. If it has changed then the IoT will restart and checkout the new version. task-5463520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242284 Forward-Port-Of: odoo/odoo#242195
This update resolves a potential issue where Microsoft calendar synchronization could fail in slower environments. The change increases the timeout for Graph requests, preventing delays and ensuring smoother synchronization of appointments. This improves the overall reliability of the Microsoft calendar integration.
Original PR description
Microsoft calendar sync can fail in slower environments due to a fixed 3s timeout for Graph requests triggered after commit. See community changes for details. Forward-Port-Of: odoo/enterprise#105062 Forward-Port-Of: odoo/enterprise#104916
This update resolves a technical issue that prevented the system from accurately calculating the number of documents associated with a partner during the upgrade process. The fix ensures that the system correctly identifies a single partner record, preventing a ValueError and ensuring accurate document counts.
Original PR description
When trying to compute the document count during the upgrade, we encountered a ValueError because multiple records were found for a partner. The system expected a singleton ``` File…
When trying to compute the document count
during the upgrade, we encountered a ValueError
because multiple records were found for a partner. The system expected a singleton
```
File "/home/odoo/src/enterprise/19.0/documents_hr/models/hr_employee.py", line 34, in _compute_document_count
('partner_id', '=', self.work_contact_id.id)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields_misc.py", line 112, in __get__
raise ValueError("Expected singleton: %s" % record)
ValueError: Expected singleton: res.partner(11393, 11612, 13026, 13085, 13066, 11674, 13007, 11240, 11420, 13086, 2687, 8998, 10309, 8195, 8468, 6439, 8151, 6580, 7928, 10301, 11058, 10515, 5274, 9243, 8141, 8435, 8889, 7761, 7733, 8443, 8545, 9252, 8457, 9980, 5495, 11424, 6458, 10558, 11070, 8924, 11731, 11528, 11615, 11766, 13021, 13080, 11758, 11742, 9306, 8826, 11004, 9393, 8879, 9317, 11652, 13075, 11744, 11160, 11644, 11763, 11416, 11618, 11732, 7931, 3846, 8442, 10299, 7916, 8429, 8057, 11061, 9342, 6435, 6553, 6512)
```This update fixes an issue where refund and payment batches weren't always merging correctly, leading to duplicate payment records. The change ensures that outbound (bills) and inbound (refunds) payments to the same bank and partner are combined into a single payment, streamlining financial reporting. This improves accuracy and reduces manual effort.
Original PR description
When we register payments for a list of journal entries, the `account.payment.register` wizard computes batches and sometimes merge them together. For instance, this allows to create a single payment if there is an outbound (a bill to pay) and an inbound (a refund to receive) payment to the same bank for the same partner. Instead of creating two payments of -1000 and +500, we only create one of -500. Currently, this mechanism does not always work. That's because the `batch_key` used to decide whether to merge or not refers to a value that is not updated in the loop. Related ticket: opw-5401372 Forward-Port-Of: odoo/odoo#242863
This update corrects a technical issue where order documents weren't being properly updated in the Mexican tax reporting system (l10n_mx_edi). By forcing a write-date update, the system now reliably identifies and processes documents for accurate reporting. This resolves a previous limitation in the update process.
Original PR description
Before the commit 8b118a7, the search of the documents to update has been limited and ordered. With the actual domain the records to update will be most of the time the same because is not being updated. To fix this issue we force to update it. OPW-5368047 Forward-Port-Of: odoo/enterprise#103272
This update fixes a potential issue where Microsoft calendar synchronization could fail due to a fixed 3-second timeout when communicating with Microsoft's services. Now, administrators can adjust a system setting to increase this timeout to 5 seconds, preventing synchronization failures and avoiding the creation of duplicate calendar events. This enhances the reliability of calendar syncing, particularly in environments with slower network speeds.
Original PR description
**Description of the issue/feature this PR addresses:** Microsoft calendar synchronization may fail in environments with slower Microsoft Graph responses or large calendars because Graph API calls…
**Description of the issue/feature this PR addresses:** Microsoft calendar synchronization may fail in environments with slower Microsoft Graph responses or large calendars because Graph API calls triggered after commit use a fixed 3-second timeout. This can lead to repeated synchronization failures even though the operation would succeed with slightly more time. Additionally, when creating events, the Microsoft Graph request may time out after the event is successfully created on Microsoft’s side but before the response containing the event ID is returned. In this case, Odoo does not store the ID of the event and may create the same event again during the next sync, resulting in duplicate events. **Current behavior before PR:** Microsoft Graph requests (insert, update, delete) are executed with a hardcoded 3-second timeout. If the Graph API response takes longer: • the synchronization fails, • and in the case of event creation, Odoo may not receive the Microsoft event ID even though the event was created remotely, which can lead to duplicate events in Odoo. **Desired behavior after PR is merged:** The Microsoft Graph request timeout is configurable via the optional system parameter `microsoft_calendar.graph_timeout`. If the parameter is not set, the behavior remains unchanged (default 3 seconds). Administrators can increase the timeout to allow successful synchronization in slower environments or with large datasets, reducing synchronization failures and avoiding duplicate event creation caused by missing Microsoft IDs. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245022 Forward-Port-Of: odoo/odoo#241921
This update fixes an issue where a single error during invoice imports would halt the entire process, leading to duplicate invoices. The change ensures that the import process continues smoothly even if an invoice encounters an unexpected problem, improving data accuracy and efficiency. This resolves a critical bug impacting invoice import reliability.
Original PR description
When you import a batch of invoice and one of them gets an unexpected Exception, the others are created but we stop the method. It's a problem with crons that don't expect to be interrupted in the middle. It creates duplicates as we fail on the same invoice each time. Of course, we should avoid all Exceptions when we can, but we should not loop on the same error. opw-5503069 part of task-5499871 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244543
This update fixes an issue where the floating order name displayed during direct sales in the restaurant POS was incorrectly showing the POS reference instead of the tracking number. Now, the order name accurately reflects the tracking number, ensuring accurate order identification and tracking for customers. This improves the overall customer experience and operational efficiency.
Original PR description
Before this commit, when making a direct sale, the floating order name was the pos reference instead of the tracking number. This is now fixed. task-id: 5470874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242359
This update resolves an issue where 'Website: Editor and Designer' users couldn't save Unsplash images after editing website content. The fix ensures the user creating the attachment has the necessary permissions, preventing security warnings and saving functionality failures. This improves the usability of the website editor for all user roles.
Original PR description
Scenario: - Setup Unsplash and install website - Set a user as "Website: Editor and Designer" - Login as that user and go to any website page with a qweb view - Go to edit mode and drop Text-Image in…
Scenario: - Setup Unsplash and install website - Set a user as "Website: Editor and Designer" - Login as that user and go to any website page with a qweb view - Go to edit mode and drop Text-Image in a view - Replace the image with an unsplash image and then save Result: the save fails without any message shown, and there is a security access WARNING in the logs. Note: a similar scenario can be done for a restricted editor that is editing a HTML field it has write access to. Issue: to save a model with res_id 0, we need to either be admin (base.group_system) or the record creator. Since 9c9c58a5a10101532cbf046d21d4a63c2b7d2838 to bypass the mimetype neutering of happening, we create the attachment as SUPERUSER. Then when we modify the attachment url (for unsplash images), we have no access right to the attachment since we are not the creator. Fix: create the attachment with the current user, and only use SUPERUSER to set the mimetype if it was neutered (ie. the user doesn't have write access right to ir.ui.view, which in normal use case should only happen for "Restricted Editor"). This way the image is created by the user that uploaded it and not SUPERUSER. opw-4850611 opw-5387258 opw-5489219 Forward-Port-Of: odoo/odoo#245085 Forward-Port-Of: odoo/odoo#219472
This update resolves a slow printing issue caused by a previous system where printer checks would block all printing operations. By creating individual connections for each printer driver, the system now avoids delays and ensures faster printing performance. This improves the overall user experience.
Original PR description
Before this commit, the `printer_interface_L` and `printer_driver_L` shared a single `cups.Connection` instance guarded with a `Lock`. This meant that while the interface for checking for new printers (which can take 10-15 seconds), all printers were being blocked from printing until it was finished. After this commit, each driver creates its own `cups.Connection` and `Lock`. This means they should never block each other, and prevents long pauses when trying to print. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245012
This update resolves an issue where the website tour test would fail after changing the header template to 'Sidebar'. The fix ensures the WebsiteBuilder component fully remounts before the tour continues, preventing it from resetting to the initial edit state. This improves the reliability of our website test suite.
Original PR description
When changing the header template to 'Sidebar', the loading screen disappears but the WebsiteBuilder component remounts asynchronously. If the tour proceeds to the theme tab before the remount completes, the builder resets to the Edit tab (its initial state), breaking the test flow. We wait for the builder to remount, and add `.editor_enable` class to the body of the iframe, so then nothing disrupts the flow. runbot-234504 Forward-Port-Of: odoo/odoo#243518
This update resolves an issue where users would encounter errors when uploading corrupted or encrypted PDF files for quotation document headers and footers. The fix ensures the system gracefully handles unreadable PDFs, preventing disruptions to the sales process. This improves the reliability of quote generation.
Original PR description
Currently, an error occurs when uploading `encrypted or incomplete` PDF files (missing EOF marker) while creating a quotation document header or footer. **Steps to reproduce:** - Install the…
Currently, an error occurs when uploading `encrypted or incomplete` PDF files (missing EOF marker) while creating a quotation document header or footer. **Steps to reproduce:** - Install the `sale_pdf_quote_builder` module. - Navigate to: Sales > Configuration > Headers/Footers. - Upload encrypted file [1], or incomplete file [2]. **Error:** `PyPDF2.errors.DependencyError: PyCryptodome is required for AES algorithm` `PyPDF2.errors.PdfReadError: EOF marker not found` **Root cause:** At [3], `_get_form_fields_from_pdf` and `_ensure_document_not_encrypted` directly call `pdf.PdfFileReader`, when it fails to read or decrypt the file, Python raises an error. **Fix:** This commit prevents errors when users upload unreadable or encrypted PDF files. [1]: https://drive.google.com/file/d/1moSlwXHkqcV6_7zHBNhLMLi-9Ye_xDGJ/view?usp=sharing [2]: https://drive.google.com/file/d/16O4LLH8dL0RWmbOx4HrcooFUyesWaVi-/view?usp=sharing [3]: https://github.com/odoo/odoo/blob/694f1d0fb03b56dd41a59eb676e56622634cc91b/addons/sale_pdf_quote_builder/utils.py#L11 sentry-6928220164 opw-5227601 Forward-Port-Of: odoo/odoo#245167 Forward-Port-Of: odoo/odoo#230712
This update fixes a bug that prevented the dashboard from accurately displaying high-priority maintenance requests. The issue stemmed from a misinterpretation of the priority field's data type, leading to an incorrect count. Now, high-priority requests are correctly identified and displayed, improving maintenance prioritization.
Original PR description
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce:…
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce: ========================= - Install the maintenance module. - Create a maintenance request and set the Priority to High (3-starred) in the form view. - Open the dashboard. - Observe that the high-priority request count is not displayed. - The count always remains 0, even when high-priority requests exist. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/94866), the logic was mistakenly changed. The priority field is defined as a Selection field, but while computing the count, the comparison was done against an integer(3, not '3') instead of the actual string value. Since the stored value is '3' (string), the condition is always evaluated to False, resulting in a count of 0. With This Commit: ========================= Ensure that high-priority maintenance requests are correctly counted and displayed on the dashboard when they exist. This provides better visibility of critical requests and helps users prioritise maintenance work effectively. Forward-Port-Of: odoo/odoo#244987
This update fixes an issue where product prices in the Point of Sale system were being incorrectly calculated due to a double currency conversion. The fix ensures prices are accurately displayed regardless of the company's and Point of Sale configuration's currency settings. This improves the reliability of sales transactions.
Original PR description
**Steps to reproduce:** - Have a company that has USD as currency - Make a PoS config that has another currency in the sales journal, such as AED - Open that PoS - Click on a product, then go the the Info tab - Some of the displayed prices will be wrong, as they are multiplied by the exchange rate twice **Why the fix:** If the config's currency is different from the company's currency, we convert the templates' list_price to match the config's currency. This is done in those lines https://github.com/odoo/odoo/blob/b64bdf67dcf273a7e666928ffa6df37b45566f2b/addons/point_of_sale/models/product_template.py#L277-L278 The current problem with this is that this function is called twice, thus multiplying the list_price twice and making it wrong. We can prevent this by checking if it has already been converted before multiplying the template's list_price. opw-5226656 Forward-Port-Of: odoo/odoo#241517
4 changes
Enhancements to existing features
This update enhances the Invoicing & Banks role's access to critical accounting reports like General Ledger and Profit & Loss. Previously restricted, the role now has read-only access, improving reporting capabilities and providing better insights for financial analysis.
Original PR description
Before: The Invoicing & Banks role did not have access to important accounting reports such as General Ledger, Trial Balance, and Profit & Loss. After: The role now inherits read-only privileges, allowing access to all essential accounting reports. Task-5418541
Resolved issues and error corrections
This update fixes a calculation error in the VAT sales reports for Vietnam (l10n_vn). Previously, 8% VAT transactions were being excluded from the total sales base, leading to inaccurate reporting. This change adds a missing tag to the report formula, ensuring accurate calculation of the taxable sales base.
Original PR description
`VAT_SALES` report line aggregates total untaxed amount from its children lines. Previously, the formula for this line was missing `VAT_SALES_8.amount_untaxed`. As a result, the base amount for 8% VAT transactions was excluded from the total sales base calculation. This commit adds the missing tag to the `VAT_SALES` formula to ensure the total taxable base is calculated correctly. task-5836154
This update fixes a bug that prevented the dashboard from accurately counting high-priority maintenance requests. The fix ensures that critical requests are correctly identified and displayed, improving visibility and enabling users to prioritize maintenance effectively. This improves the reliability of the maintenance module.
Original PR description
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce:…
Issue before this commit: ========================= The high-priority maintenance request count (todo_request_count_high_priority) was not calculated correctly. Steps to Reproduce: ========================= - Install the maintenance module. - Create a maintenance request and set the Priority to High (3-starred) in the form view. - Open the dashboard. - Observe that the high-priority request count is not displayed. - The count always remains 0, even when high-priority requests exist. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/94866), the logic was mistakenly changed. The priority field is defined as a Selection field, but while computing the count, the comparison was done against an integer(3, not '3') instead of the actual string value. Since the stored value is '3' (string), the condition is always evaluated to False, resulting in a count of 0. With This Commit: ========================= Ensure that high-priority maintenance requests are correctly counted and displayed on the dashboard when they exist. This provides better visibility of critical requests and helps users prioritise maintenance work effectively. Forward-Port-Of: odoo/odoo#244987
This update fixes an issue where the system incorrectly prevented saving BOMs with byproducts having different cost shares based on product color attributes (e.g., white vs. black). The change ensures that the total cost share for a BOM's byproducts can exceed 100% when using different color variants, resolving a user-reported error and improving flexibility in product costing.
Original PR description
### Steps to reproduce: - In the settings enable By-Products - Create a product with an color attribute and 2 values: white, black - Create a bom for that products and add 2 by product lines: - 1 x…
### Steps to reproduce:
- In the settings enable By-Products
- Create a product with an color attribute and 2 values: white, black
- Create a bom for that products and add 2 by product lines:
- 1 x comp1 with a cost_share of 50% specific to the white att-value
- 1 x comp2 with a cost_share of 70% specific to the Black att-value
> Try to save and you will raise a UserError: The total cost share for a BoM's by-products cannot exceed 100.
### Expected behavior:
The error should not be raised as the total cost_share is 50% for the white variant and 70% for the black one but none of them exceeds the 100% cost share.
### Cause of the Issue:
Currently the constraint does not take attribute values into accounts and simply sums the value of the cost share of all by-product lines: https://github.com/odoo/odoo/blob/bcc1397c7d694dbe61ecbd44d0320b9518df84cb/addons/mrp/models/mrp_bom.py#L201-L202
### Fix:
Just as for the total cost_share on kit products, we rely on the exclusion util and check for each existing product variant if the cost share set up is valid:
https://github.com/odoo/odoo/blob/7e81c528ae350aab4432207f5655dcfadf6ec627/addons/purchase_mrp/models/mrp_bom.py#L20-L23 see 3832793e3ce61aff0c7cf4673de84645a3469b3a
opw-5499773
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr10 changes
Enhancements to existing features
This update streamlines CRM email templates by removing unnecessary fields. This change ensures more data is captured in chatter, particularly without requiring a system upgrade, and prevents duplicate information from being sent. It’s a small improvement to data accuracy and efficiency.
Original PR description
- Remove newly added fields that can be replaced by existing keys present in `iap_mail.enrich_company` template to ensure we get more data in chatter without upgrade and avoid duplicate entries IAP PR: https://github.com/odoo/iap-apps/pull/1390
Resolved issues and error corrections
This update fixes a potential issue in the Point of Sale reporting system where rounding errors could incorrectly identify small cash differences as non-zero. This meant the system might remove legitimate cash transactions, leading to inaccurate reporting. The change ensures accurate cash difference calculations by accounting for rounding, improving the reliability of financial reports.
Original PR description
Before this commit, when calculating the cash difference in the report, the code did not account for currency rounding. This could lead to situations where a very small cash difference, due to rounding errors, was not recognized as zero, resulting in the unintended removal of cash moves. opw-5489958 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where zero-percent taxes (NT/EXEMPT) were incorrectly filtered during downpayment creation in the Arabic localization. Previously, these taxes weren't accurately reflected, leading to incorrect calculations. This change ensures that all taxes, including zero-percent NT/EXEMPT amounts, are properly accounted for in downpayment transactions.
Original PR description
Taxes 0% NT and 0% EXEMPT should not be fixed taxes. This is causing issue in some cases such as downpayments, where those taxes needs to be present, but fixed taxes are filtered at the creation of the downpayment. opw-5815953
This update resolves an issue where using certain reserved words (like 'constructor') as customer names caused errors in reporting. The change prevents the system from incorrectly interpreting these names, ensuring customer data can be accurately displayed and processed. This improves the reliability of customer reporting.
Original PR description
Steps:
- Have a customer named "constructor" (or any valid json prototype key value)
- Install `sale_management`
- Create a sale order with "constructor"
- Open Reporting -> Customers
- Traceback `Caused by: TypeError: groupedDataPoints[key].push is not a function`
This problem occurs because we use the client name directly in an object, and “constructor” already exists in all objects but is not initialized correctly, which raises a traceback.
One solution is to use `let object = Object.create(null)` instead of `let object = {}`, which prevents inheritance of `Object.prototype` properties.
https://github.com/odoo/odoo/blob/5e74f04ff35ed3efa25be295567be41f42024692/addons/web/static/src/views/graph/graph_model.js#L451-L457
opw-5474691This update fixes an issue where the account online synchronization link stopped working due to the short lifespan of access tokens. We've implemented a new consent token system – a unique, secure identifier linked to the user – to ensure reliable consent management and continued synchronization functionality.
Original PR description
In this commit:bf5b7d0 we introduce a message on the account_online_link to be able to manage the consent. (one needed fix in this commit:https://github.com/odoo/enterprise/commit/1c84804fd3f0c0d1d23916b9f6a388616f66ac7e) This commit will change the way we manage the consent since the access token is in fact available only for 30 min, so the link in the chatter would not work. We decided to have a consent token which is a uuid4 encoded in base64 (url safe) and link it to the odoofin user. task-5187621
This update resolves an issue where customer invoices sent via Peppol were generating duplicate attachments, leading to a cluttered user experience. The change ensures that attachments are updated instead of created anew, preventing this duplication and streamlining the invoice process. This improves the clarity and efficiency of invoice management.
Original PR description
When sending a customer invoice via Peppol, the system creates duplicate attachments (4 instead of 2 expected), cluttering the chatter and the attachment sidebar. This commit: - Implements a search-and-update logic for attachments to ensure idempotency (updates existing instead of creating duplicates). task-5438951 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241130
A recent upgrade process experienced errors when using the l10n_id module, specifically during tax migration. This fix resolves a problem where the migration script incorrectly created multiple 'base' lines, leading to an error. This ensures smoother and more reliable upgrades for Odoo users with the Belarusian accounting module.
Original PR description
Encountered an issue during upgrade from v16 with existing l10n_id installed on the DB. The script will try to force create the tax and create extra `repartition_line_ids` which is causing multiple "base" line to be added and trigger the `ValidationError`. Upgrade request: [3442445](https://upgrade.odoo.com/odoo/request/3442445) Upgrade task: [5314508]( https://www.odoo.com/odoo/70/tasks/5314508) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the failure location wasn't correctly populated when completing quality checks through the smart button. Previously, the system defaulted to a fixed location, regardless of the user's selection. This change ensures users can accurately specify the failure location during quality check completion, improving data accuracy and reporting.
Original PR description
Steps to reproduce the bug: - Create a storable product “P1”. - Create a quality point with the following configuration: Measure on: Quantity Product: P1 Operation Type: OP1 Failure Location: WH/Stock/Shelf 1 - Create a reception for one unit of P1. - Mark it as "To Do". Problem: When you click on the quality check and then fail it, a wizard opens allowing you to select the quantity to fail and the failure location: https://github.com/odoo/enterprise/blob/17.0/quality_control/wizard/quality_check_wizard.py#L78-L81 However, if you access the quality check from the smart button and complete the quality check, the wizard is not displayed, and the failure location is forced to WH/Stock. Opw-4350512
This update resolves an issue where planning work orders linked across different manufacturing order (MO) groups resulted in a validation error. The fix ensures that work orders are correctly planned even when blocked by work orders from other MOs, preventing a date calculation failure. This improves the reliability of production planning.
Original PR description
Steps to reproduce the issue: - Create a storable product “P1” with the following BoM: -Operation: OP1 - Create a MO to produce one unit of P1. - Duplicate this MO. - Confirm both MOs. - Plan both…
Steps to reproduce the issue:
- Create a storable product “P1” with the following BoM:
-Operation: OP1
- Create a MO to produce one unit of P1.
- Duplicate this MO.
- Confirm both MOs.
- Plan both MOs.
- Navigate to the Work Orders Planning page:
- Move the work order of the second MO to the next day.
- Block the work order of the first MO by the work order of the second MO.
- Go back to the MO list:
- Unplan both MOs.
- Attempt to replan the first MO.
Problem:
A validation error is triggered:
“The operation cannot be completed:
Create/update: a mandatory field is not set.
Model: Production Order (mrp.production)
Field: Start (date_start)"
When trying to plan the work order, we’ll checks if it is blocked by
another work order and skips planning if this is the case. Since the
work order is blocked by one from another MO, it remains unplanned:
https://github.com/odoo/odoo/blob/17.0/addons/mrp/models/mrp_production.py#L1510-L1512
As a result, the work order remains unplanned and does not have a
"leave_id" set. Consequently, the calculation for the "date_start" and
"date_finished" on the MO fails because the min function returns False.
This leads to an attempt to write a False value to the MO’s "date_start"
field:
https://github.com/odoo/odoo/blob/17.0/addons/mrp/models/mrp_production.py#L1518-L1521
opw-4393415This update corrects an inconsistency in stock level reports for subcontracting. Previously, only internal warehouse locations were considered when calculating available quantities. Now, the system will accurately reflect stock levels across all locations, including those used for subcontracting, leading to more reliable reporting and decision-making.
Original PR description
**Description of the issue/feature this PR addresses:** It is skipped because currently only internal location as part of a warehouse are being taken into consideration. **Current behavior before PR:** Inconsistent behavior when trying to retrieve stock levels in reports at a certain time (product views) **Desired behavior after PR is merged:** Now quantity available take these locations into consideration. Info: @wt-io-at --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr