Daily updates from Odoo
Friday, January 23, 2026
55 changes · saas-19.1
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
This update resolves an error that occurred when using 'Lots & Serial Numbers' with the POS module. The fix integrates features from the 'product_expiry' module to correctly handle lot expiration dates, ensuring accurate POS transactions. This improves the reliability of the POS system.
Original PR description
Installing POS with Lots & Serial Numbers enabled raises an error when selecting a product that uses lots. **Steps to Reproduce:** - Install POS (with demo data). - Activate "Lots & Serial Numbers". - Open Furniture Shop > Select "Drawer". **Error:** `AttributeError - 'stock.lot' object has no attribute 'expiration_date'` **Cause:** The POS module directly accesses `expiration_date` on `stock.lot`, but this field is defined in the `product_expiry` module. **Fix:** This commit adds a bridge module between `point_of_sale` and `product_expiry`. And update the result, only when the expiry feature is enabled. Upgrade PR: https://github.com/odoo/upgrade/pull/9321 sentry-7203789966
This update resolves an issue where the invite input field automatically gained focus, disrupting other dialogs like the call permission dialog. Now, the input only focuses when it's active and the user is interacting with the system. The code has also been reorganized for better testing.
Original PR description
**Current behavior before PR:** - The invite input always tried to autofocus, in turn stealing focus from dialogs like the call-permission dialog. **Desired behavior after PR is merged:** - Autofocus only when the input exists and the context is active. - Moved `mockPermissionsPrompt` to `mail_test_helpers`. **Part of task-**[5227387](https://www.odoo.com/odoo/project/1519/tasks/5227387) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236248
This update improves the speed at which scale readings are delivered, particularly in Point of Sale (PoS). By directly returning the scale result upon the initial action, the system now provides weight data immediately when the 'get weight' button is pressed. This enhances the user experience and efficiency.
Original PR description
In order to get the first scale weight faster, we now return the result directly on the action call. This also fixes the get weight button in PoS as it will now actually provide the weight.
A recent test for our live chat feature was intermittently failing due to a timing issue during high load. This change increases the test's waiting period to ensure it correctly identifies the expected behavior. This improves the reliability of our live chat testing process.
Original PR description
The `Only two quick actions are shown` live chat test awaits the first posted message because to avoid conflict with the reaction being added afterwards. To do so, the test uses the `waitForSteps` helper. However, during high load, 200ms might be too short to receive the notification, leading to the test failing. This commit increases the timeout. runbot-237587 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 a technical issue that could cause Odoo upgrades to fail when setting up manual one-to-many fields. The fix ensures that Odoo properly checks if the related inverse field is set up before processing, preventing a 'KeyError' and ensuring smoother upgrades. This improves the stability and reliability of Odoo installations.
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 Forward-Port-Of: odoo/odoo#245240
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 fixes an issue where employee appraisals weren't automatically selecting the correct company template when the employee lacked a department. The fix ensures that appraisals consistently use the appropriate template based on the employee's company, improving appraisal accuracy and consistency. This resolves a previous bug impacting appraisal setup.
Original PR description
### Issue: When having a template with a company but no department, it's not selected by new appraisal. ### Steps to reproduce: - Have an employee whose appraisal date is today. - Have only one…
### Issue: When having a template with a company but no department, it's not selected by new appraisal. ### Steps to reproduce: - Have an employee whose appraisal date is today. - Have only one template, with the company of the employee but no department - Run the cron "Appraisal: Run employee appraisal" - Open the Appraisals app - Click on the newly created appraisal - It doesn't have the template ### Cause: - In `_compute_appraisal_template()`, only the department of the appraisal is used to compute the template. But `_create_new_appraisal()` doesn't include the department in `appraisal_values` to create the appraisal. So `appraisal.department_id` is `False` and the template from the department is ignored. - Another issue is if the employee has no department, then the appraisal also has no department. Then no template is selected by the search domain. ### Solution: - Include `department_id` in `appraisal_values` - Modify the search domain to include the case where the appraisal has no department opw-5477450 Forward-Port-Of: odoo/enterprise#104470
This update corrects a technical error in the Odoo Enterprise payroll system. Specifically, a call to a function was being made in the wrong module, causing a failure in document generation. The fix involves restructuring the code to ensure the correct function is called, improving the stability of payroll processing.
Original PR description
Issue: `_check_create_documents` is called in 'hr_payroll' but only defined in 'documents_hr_payroll' Solution: Create a new method that will be redefined in 'documents_hr_payroll' to call `_check_create_documents` opw-5213979 Forward-Port-Of: odoo/enterprise#105099 Forward-Port-Of: odoo/enterprise#104282
This update fixes a display issue in the appointment calendar for Ukrainian and Polish users. Previously, month names were shown in the genitive case, which is incorrect. The fix ensures month names are displayed in the nominative case, aligning with standard calendar conventions and grammatical rules.
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
This update ensures stock valuations accurately reflect the warehouse where products are stored. Previously, the system incorrectly calculated values based on global stock levels, leading to discrepancies when products were located in different warehouses. This fix correctly applies warehouse-specific valuations, ensuring accurate inventory reporting.
Original PR description
### Steps to reproduce: - In the settings enable Lots and Serial Numbers and Multi-steps routes - Create a storable product P Tracked by lots with an avco perpetual valuation cateory and enable the…
### Steps to reproduce: - In the settings enable Lots and Serial Numbers and Multi-steps routes - Create a storable product P Tracked by lots with an avco perpetual valuation cateory and enable the valuation by Lot/Serial in its inventory tab - Inventory > Configuration > Warehouse Management > Warehouses - Create a new warehouse: WH2 - Create and confirm a PO for 10 units LOT001 for $20 in WH1 - Create and confirm a PO for 5 units LOT002 for $50 in WH2 - Inventory > Reporting > Stock > The product total value is correctly set to 450 with a unit cost of $30 - Click on Warehouse 2 for the related report #### > The total Value did not change and the product unit cost is set to $90 ### Expected behavior: The unit cost should be $50 and the total value should be 250$ for this warehouse. #### Cause of the issue: The total value of the product is computed in the `_compute_value`, which is supposed to rely on the contextual warehouse to determine the unit cost and total value of the product: https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L139-L141 https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L152-L168 While `qty_valued` relies on this context key because of the `qty_available` which is it self context dependent: https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock/models/product.py#L147-L151 and is used in standard, AVCO, and FIFO valuation, it is not used for `lot_valuated` products: https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L154-L155 https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L232-L237 https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/stock_lot.py#L21-L40 ### Solution: There are several issues to be addressed here. To begin with, in order for the valuation to be warehouse-dependent, it is necessary for the `total_value` of the `stock.lot` model to be `warehouse_id` context-dependent and to rely on the qty_available of the lot in each warehouse, rather than the global internal lot.product_qty, which is not: https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock/models/stock_lot.py#L210-L215 Additionally, since it is possible for a lot to have a null `lot.product_qty` but have 10 units in WH1 and -10 units in WH2, it is necessary not to exclude lots with a null `product_qty` from the lot valuation (at least when the warehouse_id is in the context): https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L232-L237 Furthermore, the quantity used in _run_avco here is not correct (both cases are now covered by our tests): https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L302-L312 To begin with, both conditions are incorrectly dependent on the contextual `warehouse_id` because of `qty_available`. They should not be, because `_run_avco` is supposed to provide a non-warehouse context-dependent value that is then proportionally re-evaluated via `qty_valued` in the `_compute_value`: https://github.com/odoo/odoo/blob/944d7c8d5d6bf97cba71644b615e081e4fff6595/addons/stock_account/models/product.py#L165-L166 In addition, the first condition does not rely on the lot at all (and it should for lot-valuated products). And the scond one rely on the lot via the `lot.product_qty` which is incorrect as this qty is not dependent on the date (as it is just the sum of qty on quants. For uniformity, we therefore change both conditions to rely on `qty_available` with the contextual lot. Note that it would be equivalent to rely on the `lot.product_qty` if the lot if to_date is not provided. Finally, for the `total_value` computation of each lot itself, we change the logic to follow the same behavior as for non-lot valuated products (but where we consider each specific lot similarly to a separate product). That is: - If the qty_valued is null, its valuation should also be null. - In AVCO and FIFO computations, we rely on the global value (full available quantity) and then weight it by the percentage present in stock. - If the total available quantity is null, we return the `standard_price * qty_valued` and avoid unnecessary computations. opw-5469786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244688
This update ensures that the demo data used in the product expiry tests is specific to the test environment, rather than relying on the main Odoo demo data. This resolves a test failure and provides more reliable results for developers working on this module. It's a minor fix that improves the stability of the testing process.
Original PR description
Use test specific data instead of relying on demo data. Runbot Error : [232852](https://runbot.odoo.com/odoo/runbot.build.error/232852?debug=1) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229730
This update optimizes the Odoo database by removing unnecessary default settings in the Spanish accounting module (l10n_es_edi_facturae). This reduces data storage and improves performance, particularly for businesses with multiple companies using different localization settings. The change ensures correct handling of user-defined values, maintaining data integrity.
Original PR description
On multi-company databases, having the defaults value on `account.move` selection fields unnecessary bloat the database for other companies with different fiscal package (localization). Moreover those two selection fields (`l10n_es_payment_means` and `l10n_es_edi_facturae_reason_code`) are not required, meaning the user can still set the value to `False` and we must be sure to handle that case anyway. opw-4397651 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242539
This update resolves an issue where rapid receipt printing via USB printers occasionally caused errors. The fix prevents multiple threads from accessing the printer simultaneously, ensuring reliable ESC/POS printing. This improves the overall stability of receipt generation.
Original PR description
When printing many receipts quickly using a USB printer, this error was occasinally occuring: ``` WARNING ? odoo.addons.iot_drivers.iot_handlers.drivers.printer_driver_base: Failed to query ESC/POS…
When printing many receipts quickly using a USB printer, this error was occasinally occuring: ``` WARNING ? odoo.addons.iot_drivers.iot_handlers.drivers.printer_driver_base: Failed to query ESC/POS status ERROR ? root: Could not set configuration: [Errno 16] Resource busy ``` This would cause `python-escpos` to be disabled and fallback to just CUPS printing. The issue was caused by two threads trying to access the printer at the same time, which could happen in two ways: - IoT thread with `python-escpos` and CUPS try to access the printer at the same time. - Two IoT threads with `python-escpos` try to access the printer at the same time (this can happen if two receipt actions are received at the same time). Both of these scenarios should now prevented: - Now, if we are using `python-escpos`, we also use it to print the receipt as well as checking the status. CUPS is never used so there should be no interference from it. - We now have an `escpos_lock` (per printer, not global) that is acquired when accessing the printer via `python-escpos`. This ensures that different threads cannot both try to access the printer at the same time. task-5490942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244370 Forward-Port-Of: odoo/odoo#244031
This update resolves a frustrating issue where the website builder would sometimes freeze while waiting for user input in dialog boxes. The change introduces a timeout mechanism to prevent indefinite waits, ensuring a smoother and more reliable experience for users adding languages or making other customizations. This improves overall website builder usability.
Original PR description
Commit 6df83abb35c95ab42e55d9a08cf6c411efa64b3e added a timeout on operations, as an heuristic to detect when an operation is stuck. This timeout may be triggered when the action opens a dialog and wait for user choice. This commit sets `canTimeout = false` on actions that open a dialog and wait for user choice in the `apply` method. Steps to reproduce: - Open website builder - Click on "Theme" tab - Click "Add a language" - Wait a bit - Bug: It show the error message "A technical issue occurred..." task-5867364 Forward-Port-Of: odoo/odoo#245217
This update fixes a bug that prevented portal users from another company from being mentioned in chat conversations. The issue stemmed from how access permissions were handled based on the currently active company. The fix ensures that portal users can be mentioned regardless of the company they belong to, improving collaboration across integrated accounts.
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 Forward-Port-Of: odoo/odoo#245224
This update resolves an issue preventing Point of Sale functionality within the l10n_ar_edi module for Arabic VAT. The fix ensures that users can correctly process sales transactions utilizing the Arabic VAT reporting requirements. This improves the usability and compliance of the module for businesses operating in Argentina.
Original PR description
Tarea: 62909 Forward-Port-Of: odoo/enterprise#105104
This update resolves an issue where the extra invoicing information required for EDI transactions was hidden from users on the Odoo ecommerce platform. The change ensures that all necessary invoicing details are now correctly displayed, streamlining the sales process for customers using EDI. This improves the user experience and compliance.
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 Forward-Port-Of: odoo/odoo#245179
This update aligns a small icon used in the Odoo Enterprise SaaS subscription visuals with established design guidelines. Ensuring consistency in our branding materials strengthens our overall professional image and user experience. This is a minor visual improvement.
Original PR description
This `network_light.svg` wasn't quite aligned with Milky picto's design guidelines. In this PR the pictogram has been tweaked in order for it to follow the guidelines. task-5126719 Forward-Port-Of: odoo/enterprise#104356 Forward-Port-Of: odoo/enterprise#95895
This update resolves an issue preventing proper employee filtering within the l10n_ch_hr_payroll module. By using 'sudo' for filtering, the system now reliably processes payroll data regardless of the user's specific role (Payroll or Assistant). This ensures consistent and accurate payroll processing.
Original PR description
We perform the filtering with sudo so that it can be done even in cases where the user is not a Payroll/Assistant. This is primarily to fix the following runbot error, but in general to avoid blocking errors where they shouldn't happen. Runbot Error: 237851
This update restricts who can validate payslips within the Odoo Enterprise system. Previously, users with the Payroll Assistant role could validate payslips, which has now been limited to Officers and Managers only. This change enhances security and ensures appropriate access controls for payroll processes.
Original PR description
Cause: Currently a user with payroll Assistant role can validate payslips After the fix: Only officers and managers should have the ability to validate payslips Task-5376223
This update fixes a bug that prevented users from successfully uploading attachments to expense records. The issue stemmed from a restriction in how Odoo handles attachment records, specifically when an attachment wasn't linked to an expense. The fix ensures attachments are correctly associated with expenses, improving the user experience.
Original PR description
Currently, an exception occurs when a user tries to open expenses or upload an attachment on expenses after following the steps described below. - Create an attachment with an `image/PDF` file and set the resource model as `hr.expense` - Go to expense > Create a new expense and upload the same `image/PDF` file This issue occurs because when a user creates an attachment without specifying a `res_id`, it defaults to `0`. In the previous version, `0` was allowed in the record set. However, after the changes introduced in [1], `falsy` values like `0` are strictly disallowed in the record set. This commit fixes the issue by reading only the `read_group` attachments that have a valid `res_id`, effectively ignoring attachments without a `res_id`. [1]: https://github.com/odoo/odoo/commit/4290724a4c8c57fba4f4d3d688d38f65dadcc38f sentry-7201563878
This update resolves an issue where incorrect data IDs within Odoo could trigger errors. The fix adds a filter to ensure all IDs used for browsing `ir.model.data` are valid, preventing potential disruptions to the system. This improves stability and reliability.
Original PR description
Since https://github.com/odoo/odoo/pull/227477, using falsy ids ids illegal This commit adds an additional filter to the domain used to browse `ir.model.data` to compute the following fields:…
Since https://github.com/odoo/odoo/pull/227477, using falsy ids ids illegal
This commit adds an additional filter to the domain used to browse `ir.model.data` to compute the following fields: `(menus|views|reports)_by_module` in order to avoid selecting any that would contain a falsy `res_id` and thus cause the above-mentioned assertion to fail.
One way to reproduce this in a new trial:
- Create a new trial with several modules: `account`, `crm`, `project`, `sales`
- Install `web_studio`
- Uninstall `base_automation`
- Traceback
```
File “/home/odoo/src/odoo/saas-19.1/odoo/orm/models.py”, line 5200, in browse
assert all(ids) or all(isinstance(x, NewId) or x for x in ids), “Invalid falsy real id”
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Invalid falsy real id
```
This is due to an `ir.model.data` containing a falsy res_id in the internal code of `saas_trial` (`installed-17`)
This fix will avoid any additional traceback like this one.
opw-5865316This update resolves an issue where chat windows were overlapping the website editor panel, causing a disrupted user experience. The fix adjusts the chat window's starting position dynamically within the website editor context, ensuring a cleaner and more functional design.
Original PR description
Before this commit, chat windows were overlapping website editor panel. This happens because chat windows had a hard-code starting position of 15px starting from the right of the screen, which is applied in all contexts. This commit turns `BUBBLE_START` into computed field, so that this is patched when in website editor to offset it next to website editor panel, as to not overlap it. Before / After <img width="1918" height="604" alt="Screenshot 2026-01-16 at 18 11 50" src="https://github.com/user-attachments/assets/25051548-0c6e-4aea-97a1-459558601636" /> <img width="1920" height="605" alt="Screenshot 2026-01-16 at 18 21 53" src="https://github.com/user-attachments/assets/191c1323-380d-4328-b9c5-cf76deeb1d6a" />
This update resolves a minor UI issue related to the ActivityWatch timesheet download screen within the Enterprise version of Odoo. The fix ensures a smoother and more reliable user experience when downloading timesheet data. This improves the usability of a key reporting feature.
Original PR description
This PR fixes some minor stuff that didn't make it into the previous PR.
A technical error preventing mail template creation was fixed. The issue stemmed from a validation process unaware of rental order functionality, causing a template creation failure. The fix involved moving a necessary method to the `sale_renting` module to ensure compatibility.
Original PR description
The mail template `mail_template_sale_cart_recovery` creation fails in some cases if there is a rental order in the database. Indeed, during a template creation, the first record of the corresponding model is used to validate the template validity. In this case, the template is only meant for e-commerce orders and there won't be any e-commerce rental order without `website_sale_renting` but the validation is not aware of functional specificities, leading to a traceback because the method `_get_rental_pricing_description` doesn't exist when only `sale_renting` and `website_sale` are installed. To avoid this error, we move the method to `sale_renting`, even though there is no real life flows where this was breaking (except templates validation ofc). Was fixed first with c3f5dafa23a8b1fd36eaedd83a575b717e5e9377 but moved back into `website_sale_renting` by mistake with fd1d7f91e7e60a20a5401201ff89a7e875faad82
This update fixes a warning message appearing in Point of Sale when expiration dates are disabled. The issue stemmed from a missing field in the product data, preventing accurate lot number retrieval. The fix ensures the system correctly handles this scenario, improving the user experience.
Original PR description
Steps to reproduce: = - Install only `point_of_sale` with demo data. - Ensure `Settings->Inventory->Traceability->Expiration Dates` is unchecked. - Open POS. - Click a product that uses lots. Issue: = - PoS always shows the warning “The existing serial/lot numbers could not be retrieved. Continue without checking the validity of serial/lot numbers?” even though lots are available. - Terminal error:`AttributeError: 'stock.lot' object has no attribute 'expiration_date'` Reason: = - When *Expiration Dates* is unchecked and the `product_expiry` module is not installed, the `expiration_date` field is not available (it is defined in `product_expiry` module by inheriting `stock.quant` model). Fix: = - Check field existence using the model’s _fields registry before accessing `expiration_date`, to prevent traceback. runbot-234958, 234959, 234960, 234961, 234964
This update resolves issues related to access rights for employee data when using Stripe expense cards. It allows expense card managers to access necessary employee information required by Stripe, while also correcting issues with card limit calculations and time interval restrictions to ensure accurate expense tracking.
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 Forward-Port-Of: odoo/enterprise#105149
This update resolves an issue where enlarging icons in the bills list view also disrupted the layout of the invoicing dashboard. The fix utilizes a new setting to display larger icons only when needed, ensuring a consistent and professional appearance for users.
Original PR description
As a part of task-5258726 the icons of no-content help in bills list view were enlarged. The icons used there were also used in the module dashboard, so enlarging them messed the dashboard styling. This commit fixes this issue by using a prop `largeIcons` on the `BillGuide` componenet to make it with large icons when needed only (in the bills list view no content help). task-5801970 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245209
This update resolves an issue where the website's cookie consent settings weren't being saved correctly after changing the 'I agree' button style to 'Default'. The fix ensures that the user's consent is properly recorded when this style change is applied, maintaining consistent cookie consent management.
Original PR description
Steps to reproduce: =================== 1. Enable the Cookies Bar in website settings. 2. Go to the website and enter Edit mode. 3. Select the Cookie Bar and change the button "I agree" style shape…
Steps to reproduce: =================== 1. Enable the Cookies Bar in website settings. 2. Go to the website and enter Edit mode. 3. Select the Cookie Bar and change the button "I agree" style shape to "Default" (this applies the `.btn-primary` class). & Save 4. Accept the cookies & refresh -> The cookie bar appears again because the consent was not saved. Cause: ====== The `CookiesBar` widget inherits from the generic `Popup` widget. The `Popup` class defines a default behavior for elements with the `.btn-primary` class: clicking them triggers `onBtnPrimaryClick`, which closes the popup. By default, the cookie bar button uses `.btn-outline-primary`, avoiding this behavior. However, when the user changes the style to "Default", the button receives the `.btn-primary` class. Consequently, the parent `Popup` handler is triggered. It closes the modal prematurely, interrupting the `CookiesBar`'s specific logic (specifically `onAcceptClick`),So onHideModal won't be called inside the function, and as a result, the user's consent cookie is never written. Solution: ========= Override the event to avoid side effects on hide. opw-5484578 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244875 Forward-Port-Of: odoo/odoo#243562
This update fixes a potential discrepancy in tax reporting within the Point of Sale module. Previously, the total tax base amounts in reports could slightly differ from the sum of individual line items due to rounding. This change ensures more accurate tax calculations and reporting, improving the reliability of financial data.
Original PR description
Before this commit, the total base amounts of taxes might be different from summing the base amounts of each line, due to rounding issues. opw-5408201 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244280
This update fixes a potential issue in the Point of Sale reporting where rounding errors could incorrectly identify small cash differences as non-zero. Previously, the system didn't account for currency rounding, leading to inaccurate cash difference calculations and unintended removal of transactions. This ensures more precise reporting of cash flow.
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 Forward-Port-Of: odoo/odoo#245251
This update resolves an issue where printers would become unavailable for extended periods after disconnecting, leading to user errors and double printing. The change introduces a counter to prevent unnecessary removal of printers from the system, ensuring printers are reliably available and jobs are processed correctly.
Original PR description
On the iot box we check the number of printers connected rarely to avoid spamming the network. This leads to some situations where if a printer is disconnected it becomes unusable for the next 2…
On the iot box we check the number of printers connected rarely to avoid spamming the network. This leads to some situations where if a printer is disconnected it becomes unusable for the next 2 minutes or even more if it disconnects again just before the next get_devices call in the interface. The printers are often not listed by cups for short time which currently leads to them being deleted from our list of connected devices on the iot box. However in reality the printer reconnects faster than 2 minutes and often becomes available again within a couple of seconds. Currently if you print something on it you will get an error when checking the job status but the job will still be queud and printed whenever it reconnects. The user in pos can then press "retry" which will lead to a double printing. This PR adds a counter for the printer disconnections and only removes the printer from our list if it wasn't detected 3 times in a row by cups. Now since not deleted from cups the print job is queud and whenever the printer reconnects it's printed. The user will not get an error anymore which will avoid double printing and the printer will remain available unless it's really disconnected Forward-Port-Of: odoo/odoo#244759 Forward-Port-Of: odoo/odoo#244076
This update addresses a technical issue preventing Odoo from correctly importing a standard exception within the Requests library. The fix involves installing a specific version of Requests and adding a necessary import statement. This resolves an error that was caused by a recent change in the Requests library itself, ensuring Odoo continues to function smoothly.
Original PR description
Installing `requests==2.25.1` and using the following line of code:
from requests.exceptions import JSONDecodeError
It raises the following error:
ImportError: cannot import name 'JSONDecodeError' from 'requests.exceptions' (python3.10/site-packages/requests/exceptions.py)
It was removed from the following commit in the `requests` package:
https://github.com/psf/requests/commit/db575eeedcfdb03bf31285afd3033e301df8b685
This change fixes this error importing the original exception from `json` package
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#245075This update prevents excessive email notifications to managers when employees submit expenses. Previously, managers received emails for every state change, which was causing spam. Now, a weekly email is only sent if a manager has outstanding expenses awaiting approval, streamlining the approval process and reducing unnecessary communication.
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 fixes a situation where quality checks wouldn't display a helpful message if no IoT device was connected. Now, users will receive a notification when a quality check requires an IoT device and one isn't configured, preventing confusion and ensuring accurate data collection.
Original PR description
We now display a notification when no device is configured for a measure quality check. opw-5409775 Forward-Port-Of: odoo/enterprise#105207
This update improves the product information displayed in the Point of Sale system. It now includes the product's internal code (default_code) in the product name shown in the product info popup, making it easier for staff to identify and track products. This change enhances clarity and efficiency within the sales process.
Original PR description
This commit adds the default_code (internal reference) to the display name of the product in the product info popup. opw-5493827 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244068
This update resolves a bug that prevented website tour tests from running correctly when the header template was changed to 'Sidebar'. The fix ensures the Website Builder remounts properly before the tour continues, preventing the builder from resetting to its initial state and disrupting the test flow.
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#245271 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 prevents the system from crashing when encountering these files, ensuring a smoother user experience when creating quotes.
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#245264 Forward-Port-Of: odoo/odoo#230712
This update resolves an issue where internal users without sales permissions would encounter errors when accessing their sales orders through the /my page. The change mirrors a previous fix, ensuring a smoother experience for all users within the Odoo system. This improves stability and prevents potential disruptions to sales workflows.
Original PR description
Avoid error when internal user (no sale permissions) see Orders at /my Similar to https://github.com/odoo/odoo/commit/5ebab949a06ec338cc28e912317a74bbfb3fe6ac @Tecnativa TT60025 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245039
This update resolves an issue preventing dropshipping orders with average cost products from being processed correctly. Previously, users with limited access rights were blocked from updating product prices during the picking process. The fix adds necessary permissions to allow these operations, ensuring dropshipping orders can be completed without errors.
Original PR description
Steps to Reproduce 1. Create a database in Odoo 19.0 with the stock_account module installed. 2. Enable Dropshipping from Inventory → Settings. 3. Create a product with a category whose Cost Method…
Steps to Reproduce 1. Create a database in Odoo 19.0 with the stock_account module installed. 2. Enable Dropshipping from Inventory → Settings. 3. Create a product with a category whose Cost Method is set to Average Cost (AVCO). 4. Create a user with Inventory / User access rights only (no Inventory Administrator rights). 5. Create a dropship order using the product and validate the picking. ``` You are not allowed to access 'Product Value' (product.value) records. This operation is allowed for the following groups: - Inventory/Administrator Contact your administrator to request access if necessary. ``` Issue:- During picking validation, moves are getting [done](https://github.com/odoo/odoo/blame/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock/models/stock_picking.py#L1265) if move is is_dropship enable which lead to [update_standard_price]( https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock_account/models/stock_move.py#L169) if product cost_method is [avco.](https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock_account/models/product.py#L462-L476) So, it call run_avco during that getting [the _get_manual_value]( https://github.com/odoo/odoo/blob/5d91798f0f5f712bf5210edd0bf6788f32d0c316/addons/stock_account/models/stock_move.py#L409) it through access error Fix:- To fix this sudo is added during getting _run_avco opw-5431121 upg-3762999 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242841
This update fixes a calculation error in the VAT sales reports for Vietnam. The previous formula excluded the base amount for 8% VAT transactions, leading to inaccurate sales reporting. This change ensures that the total taxable base is calculated correctly, aligning with Vietnamese tax regulations.
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 Forward-Port-Of: odoo/odoo#244915
This update ensures the chatbot answer selection dropdown always displays answers relevant to the current chatbot script, regardless of whether a search term is entered. Previously, an issue caused incorrect filtering, showing answers from other scripts. This fix improves the user experience and ensures accurate chatbot 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#245322
Forward-Port-Of: odoo/odoo#228192