Daily updates from Odoo
Wednesday, January 21, 2026
93 changes · master
Security fixes and vulnerability patches
This update enhances the security of our website by proactively preventing potential cross-site scripting (XSS) attacks. Previously, new cart HTML was vulnerable to tampering just before it was displayed. Now, the HTML is checked and sanitized immediately upon retrieval, ensuring a safer user experience.
Original PR description
Previously, new cart HTML was marked up at the last possible moment, right before insertion into the page. This is inherently insecure, as there is no reliable way to ensure it hasn't been tampered with. To reduce the risk of XSS attacks, the "markup-ing" of the updated HTML is now performed at the moment it is fetched from the server. This ensures that the new element is escaped back to a regular string if it is tampered with in any way before being inserted into the page. task-5082207 See also: - https://github.com/odoo/odoo/pull/234965
New functionality added to Odoo
This update centralizes address form logic, simplifying maintenance and improving consistency across Odoo. It introduces a new 'portal_address_extended' module that supports city selection when 'enforce_cities' is enabled, specifically improving address management in Chile. Localization modules have been updated to utilize this common implementation.
Original PR description
This commit introduces a new bridge module to centralize and simplify the frontend address management logic when `enforce_cities=True`. Before this commit: --- - Several localization modules were…
This commit introduces a new bridge module to centralize and simplify the frontend address management logic when `enforce_cities=True`. Before this commit: --- - Several localization modules were overriding `base_address_extended` and its `address_form_fields` template to customize the address form. - Each localization duplicated similar logic related to city selection. In this commit: --- - Add a new module `portal_address_extended` providing a generic frontend address template that supports selecting a city from the list of cities when `enforce_cities=True`. - Enable enforce_cities support in Chile with added cities data. - Adapt localization modules to rely on this common implementation. --- If `enforce_cities=False`: --- <img width="1826" height="941" alt="image" src="https://github.com/user-attachments/assets/47f667a7-cdbb-41e5-b9e2-3c62f16ce8ee" /> If `enforce_cities=True`: --- `city selection` instead of `city text` field <img width="1893" height="942" alt="image" src="https://github.com/user-attachments/assets/03f311f5-8e73-4ce6-897a-362af641f2ae" /> <img width="1821" height="942" alt="image" src="https://github.com/user-attachments/assets/695f2fc2-cde9-4a7d-9197-57edb3bf9160" /> --- Task-5098839 enterprise- odoo/enterprise#95885
This update centralizes address form logic, simplifying maintenance and ensuring consistency when city enforcement (`enforce_cities=True`) is enabled. It introduces a generic address template with a city selection field, improving the user experience and reducing duplication across localization modules. This change primarily impacts Chile and supports the new city enforcement feature.
Original PR description
This commit introduces a new bridge module to centralize and simplify the frontend address management logic when `enforce_cities=True`. Before this commit: --- - Several localization modules were…
This commit introduces a new bridge module to centralize and simplify the frontend address management logic when `enforce_cities=True`. Before this commit: --- - Several localization modules were overriding `base_address_extended` and its `address_form_fields` template to customize the address form. - Each localization duplicated similar logic related to city selection. In this commit: --- - Add a new module `portal_address_extended` providing a generic frontend address template that supports selecting a city from the list of cities when `enforce_cities=True`. - Enable enforce_cities support in Chile with added cities data. - Adapt localization modules to rely on this common implementation. --- If `enforce_cities=False`: --- <img width="1826" height="941" alt="image" src="https://github.com/user-attachments/assets/47f667a7-cdbb-41e5-b9e2-3c62f16ce8ee" /> If `enforce_cities=True`: --- `city selection` instead of `city text` field <img width="1893" height="942" alt="image" src="https://github.com/user-attachments/assets/2f182870-8e19-44a2-8801-792b0e8137a6" /> <img width="1821" height="942" alt="image" src="https://github.com/user-attachments/assets/695f2fc2-cde9-4a7d-9197-57edb3bf9160" /> --- Task-5098839 community- odoo/odoo#229243
This update introduces a new setting that lets users decide whether attachments uploaded through the web client are automatically sent to the cloud. This gives administrators more control over data storage and allows them to tailor workflows without impacting the core functionality of the web client.
Original PR description
Introduce the 'Upload Record Attachments' configuration setting to control whether the web client automatically uploads new attachments to the cloud. This allows users to keep a valid cloud storage provider configured for customized backend logic or specific workflows, while preventing the default web client behavior from uploading every UI attachment to the cloud. Upgrade: https://github.com/odoo/upgrade/pull/9288 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 introduces a new keyboard shortcut (Ctrl+Alt+M) within the spreadsheet editor to quickly insert comments. This improves efficiency for users who frequently need to add annotations to their spreadsheets, streamlining the workflow and enhancing collaboration. The change is part of a larger task to improve spreadsheet functionality.
Original PR description
## Description:
Add some shortcuts
Task: [5231802](https://www.odoo.com/odoo/2328/tasks/5231802)
## review checklist
- [ ] feature is organized in plugin, or UI components
- [ ] support of duplicate sheet (deep copy)
- [ ] in model/core: ranges are Range object, and can be adapted (adaptRanges)
- [ ] in model/UI: ranges are strings (to show the user)
- [ ] undo-able commands (uses this.history.update)
- [ ] multiuser-able commands (has inverse commands and transformations where needed)
- [ ] new/updated/removed commands are documented
- [ ] exportable in excel
- [ ] translations (\_t("qmsdf %s", abc))
- [ ] unit tested
- [ ] clean commented code
- [ ] track breaking changes
- [ ] doc is rebuild (npm run doc)
- [ ] status is correct in OdooEnhancements to existing features
This update adjusts the maximum NSSF (National Social Security Fund) contribution limits to align with the latest regulations under the 2013 NSSF Act. Specifically, the lower and upper earnings limits have been revised, impacting the total combined contribution a worker can make. This ensures compliance with current Kenyan law.
Original PR description
This commit updates the NSSF Lower and Upper Earnings Limits in accordance with the 4th year of implementation of the NSSF Act 2013. - Set Lower Earnings Limit (Tier 1) to 9,000. - Set Upper Earnings Limit (Tier 2) to 108,000. - Resulting max combined contribution is now 6,480. Task: 5485002
This update enhances the user experience by visually indicating inactive comodel records (like contacts and users) within Odoo screens. Inactive records are now displayed with a faded text style and grayed-out avatars, making it easier for users to quickly identify and manage archived data. This improves clarity and reduces the need to manually check record status.
Original PR description
**WIP WIP WIP** When a screen displays comodel records (M2x), the only way to check if the record is archived is to open it. This commit sets a `text-faded` on M2x inactive comodel records and grays out the avatars of inactive contacts/users. task-5469063
This update enhances the flexibility of website design within Odoo by introducing a new system for modifying shape groups. Plugins can now directly adjust these groups, allowing for more dynamic and customizable website layouts. This change improves the ability to tailor website designs to specific business needs.
Original PR description
This commit defines `image_shape_groups_providers` and `background_shape_groups_providers` as new plugin resources. These resources return functions that receive the current shape groups, allowing plugins to mutate them directly or return groups to be merged into the final configuration. Forward-Port-Of: odoo/odoo#244589 Forward-Port-Of: odoo/odoo#243121
This update removes problematic native HTML `<select>` elements from the o-spreadsheet module, addressing inconsistencies in appearance and functionality across different browsers and operating systems. This change ensures a more uniform and reliable user experience within the spreadsheet application.
Original PR description
### [IMP] *spreadsheet*: stop using native HTML `<select>` The native `<select>` inputs have multiple issues: - Since their dropdown is rendered by the OS/browser, we have no control over its style and it can look wildly different to the rest of our UI. - We also cannot control its size, which can make it even uglier. - And on some browsers/OS, clicking on a <select> doesn't even trigger a click event(!?), which breaks our onClick external listeners. We decided to remove all of the native <select> inputs in o-spreadsheet. This commit adapts the enterprise tests accordingly. Task: [5213725](https://www.odoo.com/web#id=5213725&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update enhances the testing process for Odoo's point-of-sale and self-order modules by making test utilities more realistic. The changes ensure proper initialization and validation of ticket generation, leading to more reliable test results. Additionally, a redundant model has been removed to streamline the system.
Original PR description
pos*: point_of_sale, pos_self_order Previously, ticket-generation tests relied on manual render calls, bypassing initialization logic and missing key method flows. This update refactors the test utilities to mimic real-life execution: tickets are now initialized via the main generation methods, and the final printed ticket is validated through the printer model. Additionally, Remove the extra pos.printer model from the self-order model loading Task-5391327
This update streamlines the process of uploading certifications within Odoo. The team has simplified the system by using a standard activity type for uploads, removing a redundant and complex setup. This change improves efficiency and reduces potential issues with managing certification data.
Original PR description
Simplify the activity type corpus as there is no dedicated logic requiring a specific mail activity type for uploading certifications. Task-5484984
This update enhances the UBO Form data upload process by adding a key piece of information – the ‘res_model’ – to the activity data. This improves the accuracy and completeness of the data sent during uploads, streamlining the reporting process for compliance. It’s a small change designed to improve convenience and data quality.
Original PR description
Improve convenience. Task-5484984
This update enhances how Odoo determines if a holiday falls within a specific year. The change utilizes a more reliable method for comparing dates, ensuring greater accuracy in holiday calculations and scheduling. This improves the overall reliability of the holiday management system.
Original PR description
This commit uses the Luxon method `hasSame` to compare `DateTime` years.
This update introduces a new panel within polls that displays who has voted for each option. This allows users to gain a better understanding of poll participation and trends, improving decision-making based on voting data. It enhances the poll experience by providing valuable insights.
Original PR description
Like for reactions, its interresting to be able to see who votes for which option during a poll. This PR introduces a panel in order to show it. task-5207317 <img width="500" alt="image" src="https://github.com/user-attachments/assets/8c15053b-9520-4603-8099-26521d09efdb" /> <img width="403" height="572" alt="image" src="https://github.com/user-attachments/assets/e1f0ebe3-97f9-488c-a735-825dd0ff6494" />
This update allows us to manage properties for all applicants, not just those linked to a specific job. Previously, applicants without a job were unmanageable. Now, properties are defined at the company level, streamlining recruitment processes and providing a more complete view of potential candidates.
Original PR description
Before this PR it was not possible to assign or manage properties for Talents or Applicants who were not linked to any specific Job Position. After this PR the properties are defined based on the company , allowing properties to be managed at the company level and used for applicants without job_id. Task-5212981
This update allows users to select multiple values when configuring visibility rules for website forms, specifically with 'Contains' or 'Doesn't Contain' comparators. Previously, these rules only supported single value selections, limiting flexibility. This change improves the user experience and ensures visibility rules align with the underlying multi-value logic of fields like select, checkbox, and radio.
Original PR description
Steps to reproduce: 1. Go to Website -> Edit Mode. 2. Drag and drop a "Contact Us" form. 3. Add two fields: - selection field (e.g. "Author") - text field. 4. Edit the text field's visibility and select comparator "Contains" or "Doesn't Contain". 5. Try selecting multiple values (e.g. "Mitchell Admin" and "Marc Demo"). 6. Only one value can be selected, behaving like equality checks. Before this commit, visibility rules using the "Contains" or "Doesn't Contain" comparator behaved like equality checks. Users were unable to select multiple values when configuring visibility conditions, even when the dependency field supported multi-value logic (select, checkbox, radio). This commit adds support for choosing multiple values when the comparator is "Contains" or "Doesn't Contain". Visibility now evaluates correctly for dependency fields of type select, checkbox or radio. task-4203938
This update enhances the user experience of the signature thank you dialog by modernizing its design and improving readability. The changes include a simplified layout, reduced button sizes, and clearer date formatting, resulting in a more professional and user-friendly experience for customers.
Original PR description
This task improves the user experience in the signature thank you dialog by modernizing its layout, reducing button sizes, truncating long labels, and formatting dates in a more readable way. task-5408501
This update improves website performance by automatically adjusting image sizes based on screen width using 'srcset' support. This reduces loading times, lowers data consumption on mobile devices, and optimizes image delivery for a better user experience. It also ensures proper deletion of image variants when attachments are removed.
Original PR description
*: test_website_modules, web, website_sale, website Currently the `/web/image` and t-field images only have one selectable size whatever the device, which can lead to lower performance and waste of…
*: test_website_modules, web, website_sale, website Currently the `/web/image` and t-field images only have one selectable size whatever the device, which can lead to lower performance and waste of ressources. This PR adds srcset support for the images in the website, so the browser can choose the best size for the screen. Now, if the screen width is reduced, the page can load a smaller sized image to reduce the loading time. This can help increase the performances and lower the data consumption on mid-range and lowcost smartphones. For `/web/image` images, we are generating new images at these sizes: 600, 750, 900, 1080 and 1280 These sizes are optimized so it can fit most phones on the market, while reducing the number of images we have to generate and store. The maximum size being the one selected by the user. To further reduce the number of images, for a size to be generated, it needs to be at least 15% smaller than the original image. For t-field images, we are using the already generated images image_128, image_256 ... image_1920, the maximum size being the size of the `preview_image`. task-4563867
This update improves the email sent to employees after they confirm their appraisals. The email template has been updated to provide a clearer and more professional experience, enhancing communication and user satisfaction. This change focuses on improving the user experience within the HR app.
Original PR description
Task: 5502875
This update enhances the restaurant POS system by automatically summing guest counts when multiple linked tables are used. Previously, each table was counted separately. Now, if two tables are linked, the total number of guests across both tables is accurately displayed, providing a more complete view of customer occupancy.
Original PR description
When two tables are linked in the pos, we would like to sum the guests. Here an example : If Table 1 has two guests and Table 2 has three guests, then Table 1&2 will have five guests. task: 5490906 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243726
This update simplifies the process of generating consolidated invoices from point-of-sale orders. Previously, invalid orders (like those already invoiced) would halt the entire process. Now, any problematic orders are automatically ignored, allowing for more efficient bulk invoice generation for valid orders.
Original PR description
When trying to create a consolidated invoice in the POS from multiple orders, if any of them would not be valid (i.e. invoice already generated, or order still in draft), then Odoo would throw an error and not do anything. Now the orders for which invoices can't be generated will just be ignored, but for the rest of the orders the invoices will be generated as usual. This should make it easier to bulk select and generate invoices only where necessary. Task-[5491082](https://www.odoo.com/odoo/project/1737/tasks/5491082) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243851
This update incorporates new accounting entries for Mexican tax regulations (l10n_mx) and makes adjustments to expense reporting within the HR module. These changes improve compliance with local tax laws and streamline the process for managing employee expenses.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a warning message to the tax return process, alerting users when the companies they're currently managing don't align with the companies selected for the return. This prevents potential errors and ensures users are accurately reporting their business data for tax purposes.
Original PR description
Adds a warning banner to the return kanban view, when the user's active companies do not match the companies on the return. task-5213029
This pull request updates the o_spreadsheet library, which is used for generating spreadsheets within Odoo. It includes bug fixes, performance improvements, and new features related to exporting data, handling cell formatting, and improving the overall spreadsheet functionality. These changes enhance data accuracy and usability for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fa080c2649 [REL] 19.2.0-alpha.4 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/fa080c2649 [REL] 19.2.0-alpha.4 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/a8558210e1 [IMP] xlsx: export clip [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/552671f064 [IMP] export: export align left when the cell content is a number; [Task: 5368130](https://www.odoo.com/odoo/2328/tasks/5368130) https://github.com/odoo/o-spreadsheet/commit/c7dd859e47 [FIX] range: add result changeType [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/a13c409795 [FIX] range: adapt string XC on sheet rename [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/dc2d50df94 [FIX] range: rename parameter [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/02db1afd89 [FIX] range: add range to NONE [Task: 5095364](https://www.odoo.com/odoo/2328/tasks/5095364) https://github.com/odoo/o-spreadsheet/commit/21d978489f [PERF] evaluation: fast predicate path for empty strings [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/adc4472786 [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/8a81ade707 [FIX] helpers: export chart check type from runtime config [Task: 5446988](https://www.odoo.com/odoo/2328/tasks/5446988) https://github.com/odoo/o-spreadsheet/commit/fe74ceacef [IMP] components: remove native `<select>` inputs [Task: 5213725](https://www.odoo.com/odoo/2328/tasks/5213725) https://github.com/odoo/o-spreadsheet/commit/bc31a7a7cf [PERF] evaluation: don't spread single element matrix [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/497936b7e2 [FIX] evaluation: remove spread relation [Task: 5491138](https://www.odoo.com/odoo/2328/tasks/5491138) https://github.com/odoo/o-spreadsheet/commit/56ce121432 [IMP] actions: align dropdown flow with other data validations [Task: 5423990](https://www.odoo.com/odoo/2328/tasks/5423990) https://github.com/odoo/o-spreadsheet/commit/5781c0b632 [FIX] composer: prevent autocomplete from closing on grid icon drag [Task: 5392156](https://www.odoo.com/odoo/2328/tasks/5392156) https://github.com/odoo/o-spreadsheet/commit/9ce94f278a [IMP] charts: showValues is now exported in Excel [Task: 5213598](https://www.odoo.com/odoo/2328/tasks/5213598) https://github.com/odoo/o-spreadsheet/commit/817c020291 [FIX] vectorization: fix error message on size mismatch [Task: 5331324](https://www.odoo.com/odoo/2328/tasks/5331324) https://github.com/odoo/o-spreadsheet/commit/3d9111f2ed [FIX] chart: ignore NoChanges in gauge/scorecard side panel errors [Task: 5478288](https://www.odoo.com/odoo/2328/tasks/5478288) https://github.com/odoo/o-spreadsheet/commit/ea662873a1 [IMP] formatting: unify the formatting with odoo chart views [Task: 5435022](https://www.odoo.com/odoo/2328/tasks/5435022) https://github.com/odoo/o-spreadsheet/commit/fe0dca8520 [IMP] side panel: remove pin [Task: 5447038](https://www.odoo.com/odoo/2328/tasks/5447038) https://github.com/odoo/o-spreadsheet/commit/5ceba0b4aa [REF] cell: getCells returns an array [Task: 5491227](https://www.odoo.com/odoo/2328/tasks/5491227) https://github.com/odoo/o-spreadsheet/commit/2ceff21c29 [PERF] cells: numeric cell id [Task: 5491227](https://www.odoo.com/odoo/2328/tasks/5491227) https://github.com/odoo/o-spreadsheet/commit/889304181e [IMP] style: rotation xlsx export [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/e966e74b81 [FIX] style: rotation fix for centered text [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/66249da831 [IMP] style: rotation reduce rotation angle precision [Task: 5400633](https://www.odoo.com/odoo/2328/tasks/5400633) https://github.com/odoo/o-spreadsheet/commit/3299483fc9 [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Resolved issues and error corrections
This update prevents the HTML Builder editor from freezing due to rare errors within its internal processes. A timeout mechanism is now in place to release the editor and alert the user to potential data issues, ensuring a smoother user experience. The change also includes safeguards to prevent long-running operations from causing problems.
Original PR description
Before this commit, if an error occurred within the mutex that did not explicitly throw, the mutex could remain locked indefinitely. This blocked subsequent actions and prevented the user from saving. This commit introduces a timeout mechanism for Operations. This is intended for very rare cases as a last resort to prevent the editor from becoming completely unresponsive. When a timeout occurs: - The mutex is released, allowing the user to recover (e.g. by deleting the faulty snippet). - The user is notified of the issue. - A warning is displayed during saving to indicate that the content might be in a corrupted state. Additionally, the `canTimeout: false` flag is added to options that are expected to remain open for long periods (such as the snippet modal). task-5152911 Forward-Port-Of: odoo/odoo#244786 Forward-Port-Of: odoo/odoo#233079
This update enhances the accuracy of Vietnamese tax reports by correcting outdated calculations and aligning VAT tax definitions. The changes include updating tax labels, assigning accounts, and introducing new tax components, ultimately providing clearer and more reliable tax information for users. This PR is related to a larger Enterprise update.
Original PR description
Before: -`Import tax` remained defined, even though the calculation was not accurate. -Imported VAT taxes were not aligned with the new specifications. -VAT receivable and payable accounts were not assigned to the tax groups. After: -Removed the import tax to match the updated VAT calculation method. -Updated all imported VAT taxes (0%, 5%, 8%, 10%) with the revised labels and descriptions. -Added new VAT-related accounts to the appropriate tax groups to ensure clearer reporting. -Introduced new taxes such as “Subtract Base” and reorganized component taxes. -Cleaned up the tax report by removing the outdated “Import Tax” line. Impact: -Provides clearer, more consistent tax information to users. -Keeps tax reports accurate and easier to understand. Related Enterprise PR: https://github.com/odoo/enterprise/pull/100871 task-5166420
This update enhances the accuracy of tax reports for Odoo Enterprise users in Vietnam by correcting previous calculation errors and aligning VAT tax definitions. The changes ensure clearer, more consistent tax information, simplifying reporting and improving financial data reliability.
Original PR description
Before: -Import tax remained defined, even though the calculation was not accurate. -Imported VAT taxes were not aligned with the new specifications. -VAT receivable and payable accounts were not assigned to the tax groups. After: -Removed the import tax to match the updated VAT calculation method. -Updated all imported VAT taxes (0%, 5%, 8%, 10%) with the revised labels and descriptions. -Added new VAT-related accounts to the appropriate tax groups to ensure clearer reporting. -Introduced new taxes such as “Subtract Base” and reorganized component taxes. -Cleaned up the tax report by removing the outdated “Import Tax” line. Impact: -Provides clearer, more consistent tax information to users. -Keeps tax reports accurate and easier to understand. Related Community PR: https://github.com/odoo/odoo/pull/237873 task-5166420
This update resolves an issue where the POS system in Ecuador would crash when a customer was removed from the partner list after selecting 'Consumidor Final'. The fix ensures a customer is always selected, either a specific customer or 'Consumidor Final', improving stability and compliance with Ecuadorian regulations. This prevents data errors and ensures accurate reporting.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#104049 Forward-Port-Of: odoo/enterprise#102221
This update fixes a calculation error in the POS order report's margin calculation. Previously, refunds were incorrectly displayed, leading to inaccurate profit figures. The fix ensures that refund orders are properly accounted for, providing a more precise margin calculation for all order types.
Original PR description
Step To Reproduce: - have a product with cost price - settle a order in pos with that product and refund it - go to reporting > orders > pivot view - check margin for that refund order Observation: -…
Step To Reproduce: - have a product with cost price - settle a order in pos with that product and refund it - go to reporting > orders > pivot view - check margin for that refund order Observation: - the margin is calculated wrong, as we do not consider order sign - as `margin = price_subtotal - total_cost` - so with price_subtotal `200` and total_cost `-100` margin becomes 300 Fix: - consider order sign i.e. -ve for refund order else +ve for `price_subtotal` - so with price_subtotal `-200` and total_cost `-100` margin becomes -100 **Before** <img width="317" alt="image" src="https://github.com/user-attachments/assets/9e23bc1c-363a-44dd-83c0-da478d9c73d0" /> **After:** <img width="343" alt="image" src="https://github.com/user-attachments/assets/56027cb4-a6c2-4b73-8db8-393e5af0b057" /> Note: for this to be applied, app update is needed opw-5418964 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241870
This update removes a redundant 'OK' button from form dialogs within the Point of Sale system. Previously, this change only applied when the 'pos_appointment' module was active. Now, the change is applied consistently across all POS form dialogs, improving the user experience and ensuring a uniform design.
Original PR description
Before this commit: =================== - The extra `OK` button in form view dialogs was removed only when the `pos_appointment` module was installed. After this commit: ================== - The CSS to remove the extra `OK` button has been moved from `pos_appointment` to the base `point_of_sale` module, ensuring consistent behavior across POS form dialogs. Task:5406858 Related Enterprise PR: https://github.com/odoo/enterprise/pull/102197 Forward-Port-Of: odoo/odoo#240165
This update removes a redundant 'OK' button from POS form dialogs, ensuring a cleaner and more consistent user experience across all Point of Sale operations. The change was made to standardize the styling, previously only applied when the 'pos_appointment' module was installed.
Original PR description
Before this commit: =================== - The extra `OK` button in form view dialogs was removed only when the `pos_appointment` module was installed. After this commit: ================== - The CSS to remove the extra `OK` button has been moved from `pos_appointment` to the base `point_of_sale` module, ensuring consistent behavior across POS form dialogs. Task: 5406858 Related Community PR: https://github.com/odoo/odoo/pull/240165 Forward-Port-Of: odoo/enterprise#102197
This update resolves an issue where the website editor could become unreliable when creating new pages under slower network conditions. The fix ensures the editor only opens after the iframe has fully loaded, resulting in a more consistent and dependable editing experience. This improves the overall usability of the website builder.
Original PR description
Steps to reproduce: 1. Set network speed to 3G 2. Create website Page from the systry new menu 3. click on edit button You'll face the traceback. The website editor could try to open before the iframe finished loading, leading to non-deterministic behavior. This commit ensures the editor initializes only after the iframe load event, making the edit action consistent and reliable. Erlier fixed was not covering the all the cases. PR: https://github.com/odoo/odoo/pull/238054 runbot-233039 Forward-Port-Of: odoo/odoo#243256
This update fixes inaccuracies in the reporting of Undistributed Profit After Tax (420.1 and 420.2) for Vietnamese accounting. The changes ensure accurate calculation of equity balances by correcting formulas and preventing double-counting, improving the reliability of financial reports.
Original PR description
The formulas for 'Undistributed profit after tax brought forward' (420.1) and 'Undistributed profit after tax for the current year' (420.2) were calculating incorrect values. Issues fixed: - Changed date_scope from `from_fiscalyear`/`to_beginning_of_fiscalyear` to `from_beginning` where historical cumulative values are needed. - Added missing negative signs to account code formulas (`-4211`, `-4212`, `-911`) to correctly display credit balances as positive equity. - Removed unnecessary `py_balance` expression with conditional logic. - Added subtraction of `UPATCY.balance` from `UPATBF.balance` to prevent double-counting when aggregating to parent line 420. - Added missing `py_account_codes` expression (`-4212`) to `UPATCY`. task-5492884 Forward-Port-Of: odoo/enterprise#104935 Forward-Port-Of: odoo/enterprise#104373
This pull request resolves a minor issue with the demo functionality within the Quality Control module. The changes ensure the demo runs correctly and provides a functional example for users. This improves the usability and clarity of the Quality Control module's demonstration.
Original PR description
demo
This update resolves an issue preventing localized date/time intervals within the appointment scheduling feature. The fix now correctly localizes only the start and end times of intervals, ensuring accurate display across different locales. This improves the user experience for scheduling appointments in various languages.
Original PR description
Following this refactor PR: https://github.com/odoo/enterprise/pull/96139, the localized method could not be applied to the whole interval object as it contains a model. This commit fixes the issue by localizing only the start and end of the interval. Runbot build error: https://runbot.odoo.com/odoo/runbot.build.error/238001
This update addresses a potential issue where users could infer application status by seeing warning messages. The change now creates internal activities for applicants, managed by recruiters, providing a more secure and transparent tracking system. This prevents misuse of the application process and improves data privacy.
Original PR description
When applying to a job with an email, phone number, or LinkedIn profile that is already associated with an applicant, a warning would appear showing that there is either an existing applicant or an existing refused applicant. This can cause problems as anyone can use this method to see if a person has applied and deduce the status of their application. This PR replaces these warnings in the frontend by creating activities on the applicant that are assigned to either the applicant's recruiter or the applicant's job's recruiter. task-4943060 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update increases the timeout for the main Odoo test suite to address occasional failures during nightly builds. Previously, the suite's execution time exceeded limits due to the continued use of the older, full test run. Increasing the timeout to one hour provides a longer execution window and helps ensure consistent test results.
Original PR description
This commit increases the timeout of the main (desktop) hoot test suite. Since [1], the suite is split by sub-builds, such that each sub-build only runs the tests defined in the addons that are tested by that sub-build. So the suite never timeouts anymore on regular builds. However, in nightly, we still run the whole suite "old school", i.e. all tests in the same run. In that case, the suite sometimes (in 19.1) or often (in master) exceeds the previous timeout (50m). With 1 hour, we hope that it will be enough. Note that the number of tests keeps increasing, hence the need to increase the timeout. [1] https://github.com/odoo/odoo/pull/234132 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#244715
This update resolves a crash that occurred when grouping data in list views using floating-number fields with the 'monetary' widget. The fix ensures the system handles missing currency information gracefully, preventing aggregation errors and improving the stability of list views. This enhances the reliability of reporting and data analysis.
Original PR description
This commit resolves a traceback during list view aggregation when the view is grouped. The crash occurred specifically when aggregating a `float` field that uses the `monetary` widget. Unlike true `monetary` fields, the server does not automatically send a `currency_id` aggregate for `float` fields. The aggregation logic previously failed when this data was missing; it now handles the case by ignoring it since it's not supported. opw-5725692 Forward-Port-Of: odoo/odoo#244548
This update resolves an issue where a test for marking inbox messages as read would intermittently fail due to the order in which messages were processed. The change ensures the initial fetch of messages occurs first, guaranteeing the expected test outcome. This improves the reliability of the inbox read functionality.
Original PR description
The `Opening thread with needaction messages should mark all messages of thread as read` ensures that opening a channel marks the related inbox messages as read. However, this test can fail in a non-deterministic fashion. There are two flows that can mark inbox messages as read: fetching the messages or a manual request after opening the channel. The test expects the rpc to be issued, but if the messages are fetched before, it won't happen thus making the test fail. This commit awaits the initial fetch to prevent this issue. As a bonus, the second flow is also tested. runbot-237970 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#244693
This update resolves an issue where spreadsheet pivot insertions could fail or not resize correctly. The code has been consolidated and now automatically adds necessary columns, ensuring a smoother and more consistent experience for users inserting pivots from spreadsheets, mirroring the web pivot functionality.
Original PR description
Current behavior before PR: - Inserting a pivot from a spreadsheet could trigger spill errors when the pivot had more columns than the default columns. - Columns could not be resized when inserting a pivot from a spreadsheet, unlike insertion from a web pivot view. Desired behavior after PR is merged: - Both pivot insertion flows are combined into a single implementation to remove duplicated code. - Required columns are added automatically to prevent spill errors. - Columns are resized when inserting a pivot from a spreadsheet, matching the behavior of web pivot insertion. Task: [5404283](https://www.odoo.com/odoo/2328/tasks/5404283) Forward-Port-Of: odoo/enterprise#102524
This update resolves an issue where certain carriers weren't correctly recognized when integrating with shipping partners. The change ensures that all carriers are compatible, streamlining the shipping process and preventing errors related to partner recognition. This improves the reliability of order fulfillment.
Original PR description
Forward-Port-Of: odoo/odoo#244742 Forward-Port-Of: odoo/odoo#244035
This update fixes an issue where the Odoo Studio export process incorrectly excluded certain related and computed fields. The team refined the logic to handle these fields separately, ensuring a more accurate export of data. The Industry team has approved these changes.
Original PR description
This commit fixes the computation of excluded fields for the studio export models. Before this commit, the excluded fields computation was considering computed and related fields in a similar way but…
This commit fixes the computation of excluded fields for the studio export models. Before this commit, the excluded fields computation was considering computed and related fields in a similar way but there are subtle differences that cause the excluded fields to sometimes be wrong. While analyzing the heuristic with the ORM team, we decided to separate the computation of related and computed fields. After this commit, we have a refined computation of excluded fields for related and computed fields: - for computed fields (that are not related ones), we always exclude them except when they are writeable (i.e. stored or with inverse) - for related fields, we always exclude them when the relation is in the list of related models to exclude. We also exclude them when they are not writeable on the current record only (not the source record), except if they are required. Some export scenarios have been tested manually and brought with them adaptations in the hardcoded lists of default fields to exclude. The Industry team agreed with these changes. Task id: opw-4974787 Forward-Port-Of: odoo/enterprise#104780 Forward-Port-Of: odoo/enterprise#87530
This update ensures that eWaybill invoices exported from Odoo accurately reflect reverse charge amounts for GST, aligning with the requirements of the Indian government. Previously, the eWaybill JSON didn't include these charges, causing discrepancies. This change fixes this issue, improving data accuracy for export transactions.
Original PR description
For export invoices, the total invoice value in the eWaybill JSON did not include reverse charge amounts for GST, leading to a mismatch with the value shown in Odoo and the eWaybill generated by the Indian government system. This commit adjusts the JSON computation to include the reverse charge amounts in the total invoice value for exports, aligning it with the government-generated eWaybill, while preserving the existing reverse charge flow. task-5068199 Forward-Port-Of: odoo/odoo#243802 Forward-Port-Of: odoo/odoo#241852
This change fixes an issue where Odoo was creating duplicate vendor contacts when receiving invoices with VAT numbers formatted with or without dots. Now, Odoo will correctly identify and link invoices with the same VAT number, regardless of formatting, ensuring accurate record-keeping and reporting. This improves data consistency and reduces the risk of manual reconciliation.
Original PR description
Description of the issue/feature this PR addresses: Odoo can create two contacts for the same VAT number Current behavior before PR: If you have two incoming vendor bills (over a period of time)…
Description of the issue/feature this PR addresses: Odoo can create two contacts for the same VAT number Current behavior before PR: If you have two incoming vendor bills (over a period of time) where the first bill has these details: - VAT number: `BE0477472701` - Name: `Odoo` And the second bill (e.g three months later) has these details: - VAT number: `BE0477.472.701` - Name: `Odoo S.A` Odoo will do something interesting and will create a second new contact. The reason is because the fallback on `name` from `res.partner` fails (since "Odoo S.A" is not equal to "Odoo". However, the `vat` number matching also fails! Since the VAT number "BE0477.472.701" is not identical to "BE0477472701". Throughout Odoo however VAT numbers are parsed and stored without dots in it. The function `_retrieve_partner_with_vat` however is an exception because the `vat` number here is sanitized for spaces but not for dots. Because of the combination of no exact match on neither `name` nor `vat` it now creates a second contact although the VAT number is technically the same. Desired behavior after PR is merged: Both an incoming vendor bill with `0477.472.701` and `0477472701` match to the same contact even if there are dots in it and if the name of the company is different. P.S: please find two sample XML's here: [sample_odoo_sa_bill.xml](https://github.com/user-attachments/files/24718225/sample_odoo_sa_bill.xml) [sample_odoo_bill.xml](https://github.com/user-attachments/files/24718226/sample_odoo_bill.xml) If you upload both back to back on a default V19 you will see two contacts. After this code change you will only see one contact where both bills are mapped to the same contacts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244572
A recent issue prevented users from using the database obfuscation command. This update corrects a technical error where the command was incorrectly processing database names, resulting in an error. Now, the obfuscate command functions as intended, ensuring data protection.
Original PR description
It is not possible to use the obfuscate command Steps to reproduce: 1. Initialize a database `test` 2. In a terminal, try to obfuscate the database with the command `python odoo/odoo-bin obfuscate --pwd=1234 -d test` 3. An error occurs Issue: `config['db_name']` returns a list Solution: Make sure we use obfuscate with a single database and get the first (and only) database in the list opw-5480280 Forward-Port-Of: odoo/odoo#244577
This update resolves an issue where scanning cashier barcodes would cause an error if employee logging was turned off. Now, the barcode scanning functionality works as expected regardless of whether employee logging is enabled, ensuring a smoother checkout experience for users. This change improves reliability and prevents disruptions during transactions.
Original PR description
Before this commit, if logging with employee was disabled, scanning a cashier barcode would raise an error. opw-5437310 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241756 Forward-Port-Of: odoo/odoo#241131
This update enhances how Odoo's spreadsheet feature retrieves cell data. Previously, data was organized as an object, but now it's returned as a simple array, making it easier for the spreadsheet to process and display information. This change improves the overall performance and reliability of the spreadsheet functionality.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a test case issue related to creating public leave in Odoo. Specifically, the system now correctly passes the company information during leave creation, preventing errors that could occur due to conflicting work entries. This ensures accurate public leave functionality.
Original PR description
In this PR, We are explicitly passing the company to create a public leave Task-4596057
This update resolves a crash that occurred when users accessed the Gantt Overview within the Time Off application. The fix involved adjustments to how unavailable time periods are handled, ensuring data integrity and stability during Gantt rendering. This improves the reliability of the Time Off module.
Original PR description
Version: - saas-19.2 Steps to reproduce: - Install hr_holidays_gantt - Open the Time Off application - Click on the Overview menu item Issue: - A server traceback occurs when loading the Gantt Overview. Solution: - Adapt _gantt_unavailability() to handle the new return structure of _unavailable_intervals_batch(), which now returns multiple intervals per resource. - Ensure all datetime comparisons are performed using timezone-aware UTC datetimes by converting contract dates with fields.Datetime.to_datetime(). - Properly append unavailable intervals as (start, stop) tuples to avoid data corruption during Gantt rendering. Task- 5702559
This update corrects a visual bug where an 'Add Item' button incorrectly remained visible when no topics were present in a web page snippet. The fix ensures the button disappears when there are no topics, preventing a traceback and improving the user experience. This change impacts the Topics List snippet and related website builder components.
Original PR description
Steps to reproduce: - Drag and drop a "Topics List" snippet onto a web page. - Remove all "Topic" items from the snippet so that none remain. - Click the "Add New" button. - A traceback occurs. This bug is caused by the fact that the "Add item" option is defined in the "Options" section of the parent element of the topics. As a result, the option button remains visible even when no topics exist anymore. Clicking it then triggers a traceback because the option attempts to duplicate an element that does not exist. In this commit, we fix the issue by adding an "applyTo" on the option, targeting the topics, so that the "Add New" button no longer appears when no topic is present. Note that the same bug exists for other snippets, and this commit fixes them as well. task-5462596 Forward-Port-Of: odoo/odoo#244126 Forward-Port-Of: odoo/odoo#244034
This update resolves a technical issue preventing users with the Romanian language pack installed from accessing the settings within the l10n_ro_edi_stock module. The fix corrects a mismatch in the system's text search, ensuring proper functionality for Romanian users. This improves the usability of the module for Romanian-speaking businesses.
Original PR description
**Issue**: When the module `l10n_ro_edi_stock` is installed and Romanian is the selected language, accessing the settings app causes a traceback. **Steps to reproduce**: - Install the module…
**Issue**: When the module `l10n_ro_edi_stock` is installed and Romanian is the selected language, accessing the settings app causes a traceback. **Steps to reproduce**: - Install the module `l10n_ro_edi_stock` - Select a Romanian company - In Profile > My Preferences > select Romanian language - Try to access the settings -> A traceback occurs **Cause**: The error is caused by this XPath: https://github.com/odoo/odoo/blob/2309fb56553e6ae9f89b6dd0947aba2f54408960/addons/l10n_ro_edi_stock/views/res_config_settings_views.xml#L9C13-L11C21 Specifically, the `'select the option'` part. The XPath tries to replace this line in the parent view: https://github.com/odoo/odoo/blob/2309fb56553e6ae9f89b6dd0947aba2f54408960/addons/l10n_ro_edi/views/res_config_settings_views.xml#L39 but fails to find it because the source text has already been translated at that point, so `'select the option'` no longer matches: https://github.com/odoo/odoo/blob/2309fb56553e6ae9f89b6dd0947aba2f54408960/odoo/tools/template_inheritance.py#L154 **Solution** Only rely on strings that are translation-invariant. opw-5490346 Forward-Port-Of: odoo/odoo#244313
This update resolves an issue where government entities using a TAN instead of a PAN for their GSTIN were incorrectly flagged with an error during partner creation. The fix adjusts the validation process to recognize and support GSTINs based on TANs, ensuring accurate data entry for these important customers. This improves the system's ability to handle government-related business transactions.
Original PR description
### Issue: When using a GSTIN belonging to a government institution, saving the partner raises a ValidationError This happens because these entities often use a TAN (Tax Deduction and Collection…
### Issue: When using a GSTIN belonging to a government institution, saving the partner raises a ValidationError This happens because these entities often use a TAN (Tax Deduction and Collection Account Number) instead of a PAN as the base for their GSTIN ### Cause: In 19.0, PAN handling was refactored using the new `pan_entity` mechanism With this change, PAN values are validated through `_check_pan_name()`, which incorrectly raises a `ValidationError` for GSTINs that rely on a TAN instead of a PAN: `The entered PAN seems invalid. Please enter a valid PAN.` The PAN entity shouldn't be created for non PAN number ### Steps to reproduce: - Install `l10n_in` and `contacts`, then switch to IN Company - Create a new contact with GSTIN: `07DELN10357E1DH` - Save and the Error is raised ### Notes: At the same time, we'll set the TAN if the GSTIN is based on it The documentation for the TAN structure: https://incometaxindia.gov.in/tutorials/23.%20tan.pdf opw-5461356 Forward-Port-Of: odoo/odoo#243737
This update corrects a calculation error in the fleet module related to the initial acquisition date of vehicles. By setting a default acquisition date, the system now accurately calculates baseline ATN (Asset Tracking Net) values, leading to more precise reporting and financial tracking of fleet assets. This ensures better data for business decisions related to vehicle depreciation and asset management.
Original PR description
Forward-Port-Of: odoo/odoo#244705
This update resolves a technical issue where a default rate was incorrectly overriding the rate used in testing for FedEx deliveries in the EUR currency. By clearing these outdated rates, the test environment now accurately reflects the intended pricing, ensuring reliable testing and accurate delivery calculations.
Original PR description
Issue ----- There is some existing rate that takes precedence over the one specified in the test. Rates should be unlinked for safety. ----- Runbot error 237965 Forward-Port-Of: odoo/enterprise#104779
This update ensures the minimum wage is accurately calculated and pro-rated based on employee work time. The change addresses a previous issue (302bf2b4e201da8f56b1da012dd7f03c81a85e22) to comply with Belgian labor laws, improving payroll accuracy.
Original PR description
Since changes made in 302bf2b4e201da8f56b1da012dd7f03c81a85e22 the minimum wage should be pro-rated to the work time rate. Forward-Port-Of: odoo/enterprise#104781 Forward-Port-Of: odoo/enterprise#104419
This update resolves intermittent failures in image edit tests within the Odoo website builder. These tests were failing due to delays in how the website builder's sidebar updates asynchronously. By adding a 'wait' function to ensure the sidebar is fully loaded before tests run, we've significantly improved test reliability and stability.
Original PR description
Image edit tests using the builder sidebar were failing intermittently because image elements rely on async actions with non-deterministic timing, causing the sidebar options to be unavailable sometimes. Use `waitSidebarUpdated` to ensure the sidebar is fully updated before asserting on its content. Here is an example of an error: error-234951 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#243343 Forward-Port-Of: odoo/odoo#243008
This update prevents users from incorrectly configuring a website category snippet to display product accessories instead of categories. The change ensures that the snippet functions as intended, displaying relevant category lists on product pages. This resolves an issue where the category snippet was producing empty results.
Original PR description
Steps to reproduce: ==================== 1- Go to any product and in the tab Sales add some accessory products 2- Go to the website and edit a page 3- Add a category list block 4- Change category list filter to "Accessories for product" 5- Save -> The block is empty Cause: ====== The category snippet was meant to be used only for categories. The problem is that its possible to change from "Categories List" to anything else. When the user makes the choice to add a categories snippet he shouldn't be able to change the content of the snippet from categories to products, blogs, etc.. Solution: ========== Prevent replacing the category snippet to anything else. opw-5497284 Forward-Port-Of: odoo/odoo#244053
This update resolves a sporadic issue where live chat sessions would unexpectedly crash. The fix addresses a timing conflict between guest leaving and chat closing, preventing a system error. This ensures a more reliable and consistent live chat experience for users.
Original PR description
This commit fixes the `visitor leaving ends the livechat conversation` test that was sometimes failing. There is a race between the simulation of the guest leaving the chat that uses `withGuest` which is known to be problematic and the `action_unfollow` method, called when the chat window is closed. The unfollow method deletes the agent member, but since the guest cookie is still present, the `channels_as_member` rpc retrieves the guest member. The rest of the code doesn't expect this mismatch and a crash occurs. This commit ensures the `channels_as_member` rpc is properly done before closing the chat window. runbot-237947 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#244677
This update ensures that the live chat information and member lists automatically open by default when navigating between conversations. Previously, opening one panel would disable the other. This change improves the user experience by providing the most relevant information upfront, making it easier to manage conversations.
Original PR description
*: crm_livechat, im_livechat Before this commit, auto-open of member panel and livechat info panel did not combine from [1]. This means that when livechat info was auto-open in livechat, this…
*: crm_livechat, im_livechat Before this commit, auto-open of member panel and livechat info panel did not combine from [1]. This means that when livechat info was auto-open in livechat, this necessarily meant the auto-open of member list was disabled, and vice-versa. This is a problem because when navigating between livechat and non-livechat would necessarily imply the dismiss of either panel, which is not good because the best default is having livechat panel open by default, and for non-livechat conversations it should auto-open the member list panel. This commit fixes the issue as follow: - auto-close of panel are aware of whether action are active, as removal of auto-open from auto-close makes sense only when another panel is made active when the older panel was visible - closing of member panel by opening the livechat info panel should preserve auto-open of member list for other conversations Task-5496830 [1]: https://github.com/odoo/odoo/pull/238472 https://github.com/odoo/enterprise/pull/104435 Forward-Port-Of: odoo/odoo#244320 Forward-Port-Of: odoo/odoo#243864
This update combines member and live chat information automatically when creating helpdesk tickets, providing a more complete view of the customer's interaction. Previously, this data was displayed separately, which was confusing for support staff. This change streamlines the support process and improves customer service.
Original PR description
*: website_helpdesk_livechat, whatsapp Task-5496830 https://github.com/odoo/odoo/pull/243864 Forward-Port-Of: odoo/enterprise#104644 Forward-Port-Of: odoo/enterprise#104435
This update fixes an issue where payslip names were not being generated accurately in the Chinese HR payroll module. The change ensures that payslip names are now correctly computed, improving data accuracy and reporting for payroll processing. This impacts the accuracy of payroll reports and employee records.
Original PR description
Forward-Port-Of: odoo/enterprise#104376 Forward-Port-Of: odoo/enterprise#104289
This update fixes a potential issue where default journal types for Turkish invoice documents were incorrectly set. The default value has been changed from 'in_invoice' to 'purchase' to prevent incorrect accounting and ensure proper document handling. This ensures compliance and avoids potential errors in financial reporting.
Original PR description
…hing The default value of the journal type parameter was incorrectly set to a move type (`in_invoice`). Although all current callers explicitly pass the correct journal type, the default value has been corrected to `purchase` to avoid potential misuse. no task-id Forward-Port-Of: odoo/odoo#243139 Forward-Port-Of: odoo/odoo#242865
This update prevents subscription start dates or plan changes from automatically resetting manual discounts on order lines. Previously, changes triggered a recalculation that wiped out user-entered commercial discounts. Now, the system checks if the line content has changed before recalculating, preserving user-defined discounts.
Original PR description
Before this commit, changing the `start_date` or `plan_id` on a Subscription would trigger a recomputation of the `discount` field on all order lines. This triggered the standard `_compute_discount`…
Before this commit, changing the `start_date` or `plan_id` on a Subscription would trigger a recomputation of the `discount` field on all order lines. This triggered the standard `_compute_discount` method, which recalculates the price and discount based on the Pricelist, effectively wiping out any manually entered commercial discounts. This occurred because the `_compute_discount` method in `sale_subscription` depends on `order_id.start_date` to calculate pro-rated amounts for upsells. However, it was unconditionally calling `super()`, which runs the standard pricelist logic even when the line content itself (Product, Qty) had not changed. This commit introduces a check to detect if the line content has actually been modified by the user (comparing against the database origin). - If the line content (Product, Qty, UoM) is unchanged, we skip the `super()` call to preserve the manual discount. - If the line content is changed (or it is a new line), we allow `super()` to run to update the price according to the pricelist. This ensures that contextual changes (like shifting the start date) do not destroy manual data entered on the lines. Task: 5788384
This update fixes a layout issue that occurred when reordering items in the cart, ensuring a consistent and functional cart page for all users. The change improves the overall user experience by dynamically adjusting the cart layout and implementing security measures to prevent potential vulnerabilities.
Original PR description
The current cart page layout supports two states: - Empty cart: A single column spans the entire screen width to display a simple message in the center. - Non-empty cart: Two columns are displayed,…
The current cart page layout supports two states: - Empty cart: A single column spans the entire screen width to display a simple message in the center. - Non-empty cart: Two columns are displayed, where the left column shows a detailed view of each order line, and the right column shows a summary and navigation buttons. Before #226128, using the quick reorder feature on the cart page would break the page layout. The initial single-column layout would span the entire screen width, forcing the cart summary onto a new row. The fix in #226128 used a small trick in JavaScript to adjust the cart's column widths on the client side, ensuring compatibility with existing database templates. This commit reworks how the `website_sale.shorter_cart_summary` template is updated. Instead of replacing the inner content of a hook element in the layout, we now replace the hook element entirely with a new version of itself. This ensures that custom styling classes applied to the hook element are updated as well, resolving cart layout discrepancies. Additionally, to reduce the risk of XSS attacks, the "markup-ing" of the updated HTML is now performed at the moment it is fetched from the server. This ensures that the new element is escaped back to a regular string if it is tampered with in any way before being inserted into the page. task-5082207 See also: - https://github.com/odoo/enterprise/pull/104917
This update resolves a minor issue where a menu item was incorrectly linked to a different Odoo module, preventing proper translation for non-English users. The change avoids forcing the menu item into another module, ensuring correct localization within the Enterprise POS module. It's a low-impact fix that enhances the user experience for international customers.
Original PR description
When the "Preparation Display" menuitem was added, its id was set to `point_of_sale.menu_pos_preparation_display`. This forced the record to be considered part of the `point_of_sale` module and because it's part of community while this record is defined in Enterprise, it was never translatable because the link was missing in the `pos_enterprise` pot file. This issue was not fixed in stable because it is non-trivial to move records in existing DBs and it is not a blocking bug, just confusing/annoying for non-English speaking users.
This update removes the Gemini 1.5 model from the AI platform, addressing a technical issue that would have caused errors when using the AI agent. The model is now hidden from selection fields, ensuring a smoother and more reliable user experience. This change improves stability and simplifies the AI platform's functionality.
Original PR description
This PR deprecates the Gemini 1.5 models. Specifically, it gives a proper non-technical error when the model is used. The error occurs either when the user tries to set the model on an agent or if the model is already on the agent, it will raise the error upon usage of the agent. The deprecated models are also hidden from the selection field. task-5129790 Upgrade PR: https://github.com/odoo/upgrade/pull/9253
This update fixes a misleading message in the HR contract salary payroll module. The change reflects a new calculation method using part-time gross salaries instead of full-time salaries. This ensures the salary message accurately reflects the employee's compensation.
Original PR description
Since we are now setting the part-time gross and not the full time gross, this message is misleading. Forward-Port-Of: odoo/enterprise#104877
This update resolves a visual issue where document signing would intermittently flicker due to automatic zoom adjustments. The fix removes the code that dynamically changed the zoom level, defaulting to 'Automatic zoom' for a smoother and more stable signing experience. This improves user satisfaction and prevents a distracting visual glitch.
Original PR description
Before this commit, when signing a document the zoom would load with 'Automatic zoom' then less than one second later change to another zoom by the code, e.g. '100%', causing a flickering issue. After this commit, the zoom is not flickering anymore as we remove the code of changing the zoom and make the default the 'Automatic zoom'. task-5461663 Forward-Port-Of: odoo/enterprise#103532
The picking operations report was incorrectly printing all deliveries on a single page when multiple deliveries were selected. This change addresses a layout update that removed automatic page breaks, now forcing a page break to ensure reports with multiple deliveries are formatted correctly.
Original PR description
When printing several picking operation at once, they are all in the same page. Steps to reproduce: ------------------- * Inventory>Operations>Deliveries * Create several Deliveries * Open list view to see all the deliveries * Select several deliveries * Print > Picking Operations -> All the picking operation report are on the same page. Observation: ------------- Since the change on the picking report layout https://github.com/odoo/odoo/pull/152280/changes#diff-7542c191def78bd64f54f1c33fde2c73e19e4d27f92b195c464d1d84e55b682fL6-R8 the report now uses a single article container for all records, this don't trigger automatic page break. opw-5481034 Forward-Port-Of: odoo/odoo#243817
This update resolves an issue where a link popover would incorrectly appear on input fields within protected nodes. The fix ensures that popovers only appear when an editable input is focused, improving the user experience and preventing unexpected behavior when editing content within links.
Original PR description
Problem: When the previous focus was on a link, then focusing an input inside a non-editable protected node shows the link popover on the input. Cause: Given the following structure: `<a>a</a><span…
Problem: When the previous focus was on a link, then focusing an input inside a non-editable protected node shows the link popover on the input. Cause: Given the following structure: `<a>a</a><span protected non-editable><input></span>` If the selection is inside the link and the link preview popover is visible, clicking on the input triggers a selection change. Since the input is inside a protected node, the editor keeps the previous editable selection. As a result, `LinkPlugin.handleSelectionChange` still treats the selection as being inside the link and reopens the link popover. Solution: Only show the link popover when the `activeElement` is the editable element. Steps to reproduce: - Add a link. - Upload a file. - Place the selection on the link. - Focus the file name input to rename it. - Observe that the link popover is shown on the file name input. opw-5414078 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240016
This update resolves an issue where registration emails for events were displaying duplicate headers and footers. The fix removed a redundant email layout setting, ensuring that only the event's standard header and footer are included in the sent emails. This improves the email experience for attendees.
Original PR description
**Steps to reproduce:** - Go to Event module - Go to an open event - Register for the event - Go to the Attendees of the event - On the attendee record, click `Send by Email` - The received email shows twice the header and footer **Issue:** Encapsulating notification layout was applied with `default_email_layout_xmlid` but the main template used is `event_registration_mail_template_badge` which already has its own header and footer. **Fix:** Removed the `default_email_layout_xmlid` opw-5032767 Forward-Port-Of: odoo/odoo#236667
This update fixes default printer settings for Point of Sale (POS) transactions. Now, new receipt printers default to 'receipt' mode, while preparation printers default to 'preparation'. Additionally, a new requirement has been added for preparation printer categories to prevent errors and ensure accurate setup.
Original PR description
The goal of this pr was to set the printer type by default as `receipt` when a quick create was done from the "Receipt Printers" category and as `preparation` when it's done in the "Preparation Printers" category, both in `pos.config` and in `res.config`. Also, in the `pos.printer` form view, for a preparation printer, products categories are now required when creating a printer to avoid user oversights. And, a quick fix to make the default receipt printer as required, under the "Receipt Printers" category in the `res.config` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242780
This update fixes an issue preventing QR codes from being generated for invoices. The change allows QR codes to be created through automation rules and API calls by providing a fallback mechanism for accessing necessary configuration data. This ensures invoices with payment links are correctly generated.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. In Accounting/Invoicing settings, enable "Add QR-code link on PDF"; 2. create an automation rule for the `account.move` model; 3. set "Trigger" to…
Versions
--------
- saas-18.3+
Steps
-----
1. In Accounting/Invoicing settings, enable "Add QR-code link on PDF";
2. create an automation rule for the `account.move` model;
3. set "Trigger" to "Create & Edit";
4. set "Apply on" domain to `[("state", "=", "posted")]`;
5. set "When updating" to "Status";
6. add an action to execute the following code:
```python
env['account.move.send']._generate_and_send_invoices(records)
```
7. call `action_post` on an invoice via RPC or Odoo Shell.
Issue
-----
> odoo.addons.base.models.ir_qweb.QWebException: Error while render the template
> RuntimeError: object is not bound
Cause
-----
In order to add a payment link QR code to the invoice[^1], it needs to generate an access token for the portal. This happens via the `generate_access_token` function from `odoo.addons.payment.utils`. Issue is that it relies on having access to a `odoo.http.request` object, so that it can use its `env` to retrieve the `database.secret` config parameter.
When this flow gets triggered via an API call (or Odoo Shell), the `request` object is unbound, causing the error.
[^1]: feature added via commit bcb73cd159885
Solution
--------
Introduce an optional `env` kwarg to `generate_access_token`, falling back on `request.env` if it's not provided.
opw-5487075
Forward-Port-Of: odoo/odoo#244703
Forward-Port-Of: odoo/odoo#243528This update resolves a test failure within the Odoo ecommerce module. The previous code included unnecessary dependencies and configurations that were causing test errors. The changes removed these elements, ensuring the tests run correctly and accurately reflecting the ecommerce order flow.
Original PR description
The code of the payment provider is not relevant to the test_ecommerce_paid_order_is_hidden_in_pos test, and pos_sale doesn't have payment_custom in the dependencies. It caused tests to fail so I removed it. Runbot Build Error-233461 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232638
This update fixes a visual issue where the 'Invite a User' dialog in the discuss app was not taking up the full width of the screen. The fix ensures the dialog displays correctly on various screen sizes, providing a consistent user experience. This improves usability and prevents a potential distraction for users.
Original PR description
Before this commit, the channel invitation dialog had its content not taking the whole width of modal. Steps to reproduce: - Have window take about half size of a 1080p monitor - Open "General" in…
Before this commit, the channel invitation dialog had its content not taking the whole width of modal. Steps to reproduce: - Have window take about half size of a 1080p monitor - Open "General" in discuss app - Open the Member list - Click on "Invite a User" => Invitation dialog takes about half of the width of modal. This happens because the channel invitation was wrongly assumed to be inside a resizable panel, and thus the size was limited by the max width when in resizable panel. The rule to determine whether the action is in a resizable panel was poor: any action panel in discuss app was considered as resizable. This commit fixes the issue by limiting the responsive sizing, intended only for resizable panel, only when the action panel has the `.o_resizable_panel`, which is specific to when action panel is being used inside resizable panel. Task-5804100 Before / After <img width="625" height="231" alt="Screenshot 2026-01-20 at 16 12 31" src="https://github.com/user-attachments/assets/10c02939-c4c1-47fa-82f8-4d8d037d3f0c" /> <img width="621" height="231" alt="Screenshot 2026-01-20 at 16 12 18" src="https://github.com/user-attachments/assets/eec1447c-cb42-4751-b17a-ff7b2e70b8e9" /> Forward-Port-Of: odoo/odoo#244777
This update prevents users from removing all avatars from a website profile by rapidly clicking the 'Remove avatar' button. The original code struggled with asynchronous updates, allowing for unintended avatar removal and subsequent errors. This fix ensures a stable avatar management experience.
Original PR description
**Problem** Users could remove all avatars from the `s_avatars` snippet by clicking the "Remove avatar" button rapidly. This also causes an error when attempting to add a new avatar afterward.…
**Problem** Users could remove all avatars from the `s_avatars` snippet by clicking the "Remove avatar" button rapidly. This also causes an error when attempting to add a new avatar afterward. **Reproduction** 1. Drop the `s_avatars` snippet. 2. Click very quickly on the "Remove avatar" button multiple times. **Cause** The code relied on preventing the removal of the last element by disabling the "Remove avatar" button based on DOM state. Because rendering is asynchronous, rapid clicks could be registered before the button was disabled, allowing the last avatar to be removed. **Fix** Add a check in `AvatarsHeaderMiddleButtons.removeAvatar` to prevent removal when only one avatar remains, covering cases where clicks occur before the UI updates. The components `CarouselItemHeaderMiddleButtons` and `NavTabsHeaderMiddleButtons` use the same logic of `AvatarsHeaderMiddleButtons` and could fail similarly, thus they have been fixed too, even if the bug is not currently reproducible on them. task-5462816 Forward-Port-Of: odoo/odoo#243065
This update addresses minor UI inconsistencies and improves the stability of the o-spreadsheet module. Specifically, the code has been adapted to align with a recent release and resolves issues related to styling and functionality within the spreadsheet interface. These changes ensure a smoother and more reliable user experience.
Original PR description
see https://github.com/odoo/odoo/pull/244983
This update ensures that Live Chat reports accurately group conversations by day of the week, taking into account the user's preferred week start day (Sunday or Monday) as defined in their language settings. Previously, the reports consistently started the week on Sunday, regardless of user preference. This change improves the accuracy and usability of Live Chat reporting.
Original PR description
**Current behavior before PR**: The "Day of Week" group by in the Live Chat report always treats Sunday as the start of the week, ignoring the "First Day of Week" configured in the user's language settings. **Desired behavior after PR is merged**: "Day of Week" group by now correctly takes into account the user's configured "First Day of Week", as set in their language settings. **task**-[4808640](https://www.odoo.com/odoo/project.task/4808640) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243503 Forward-Port-Of: odoo/odoo#213307
This update resolves an issue where invoices sent to Viettel's SInvoice system were failing due to incorrect decimal formatting. The fix ensures the tax amount is calculated using the correct currency rounding method, guaranteeing compatibility with the SInvoice API and preventing invoice delivery errors.
Original PR description
When sending an invoice to SInvoice (Viettel), the API raises an `INVALID_DECIMAL_POINT_TAX_MONEY` error if the tax amount contains excessive decimal places (e.g., 100.02999999999997). This occurs because the tax amount is currently calculated using simple subtraction (`total - subtotal`). Due to standard floating-point precision issues, this can result in unrounded values that the API rejects. The tax amount calculation is now updated to explicitly use the currency's rounding method, ensuring the value is accepted by SInvoice. task-[5484845](https://www.odoo.com/odoo/project/967/tasks/5484845) Forward-Port-Of: odoo/odoo#244647
This update resolves a bug that caused the column layout within the HTML editor to break after performing undo operations. Specifically, changing the number of columns repeatedly resulted in a distorted layout. This fix ensures the column structure remains intact, improving the user experience when editing layouts.
Original PR description
**Current behavior before PR:** Steps to reproduce: - Create 3 columns using powerbox - Convert it into 4 columns - Press ctrl + z to make it 3 columns - Convert it into 4 columns again using powerbox Notice that column structure is broken. This happens because after undo operation, in `changeColumnsNumber` the regex replaces column div className incorrectly leading to invalid colund structure. **Desired behavior after PR is merged:** This PR ensures that column structure doesn't break. task-5468578 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242500
This update enhances the security of user profile editing by utilizing a new internal helper function, '_can_edit_country()', to determine if a user is authorized to change their country setting. This change aligns with recent Odoo updates (saas-18.4) and ensures a more secure profile management process.
Original PR description
In 'save_edited_profile()', we check that the user can edit his country_id if he tries. As from saas-18.4, a new helper '_can_edit_country()' is available. This commit uses that helper to perform the check. Follow-up of #239789 Task-5331916 Forward-Port-Of: odoo/odoo#244795 Forward-Port-Of: odoo/odoo#244694
This update fixes an issue where changing the rental period of an order didn't automatically update related rental transfers. The fix mimics the rescheduling behavior of purchase orders, ensuring that rental transfers are accurately adjusted when the rental period is modified. This improves the reliability of rental order management.
Original PR description
### Steps to reproduce: - In the settings enable "Rental Transfers" - Create a storable and rentable product P - Create and confirm a rental order for 1 unit of P - Change the rental period to 10 days in the future #### > The rental tranfers were not updated accordingly ### Cause of the issue: Nothing is currently implemented to reschedule the rental transfers. ### Fix: We somewhat mimic the reschedule purchase behavior: https://github.com/odoo/odoo/blob/6ca34a0f5347e0611cde95453119dda8b40fa589/addons/purchase_stock/models/purchase_order_line.py#L98-L101 But we rely on the order itself rather than its order lines since the `start_date` and the `return_date` are related fields so that no `write` is triggered when the order is rescheduled: https://github.com/odoo/enterprise/blob/96a80f583a0ca502ff06bc05d03775c76c6a7537/sale_renting/models/sale_order_line.py#L18-L19 opw-5158508 Forward-Port-Of: odoo/enterprise#103602 Forward-Port-Of: odoo/enterprise#101334
This update fixes an issue where product prices in Point of Sale weren't accurately calculated when using different currency settings for the PoS. The fix ensures standard prices are converted to the PoS currency, preventing incorrect pricelist calculations and ensuring accurate order totals. This improves the reliability of pricing within the POS system.
Original PR description
The standard price of the products were not converted to the currency of the PoS journal, which could lead to issues when creating pricelist items based on the standard price. Steps to reproduce: ------------------- * Change the currency of any PoS journal to a different currency than the company currency. * Create a product with a standard price > 0. * Create a pricelist that uses the standard price as a base price. (e.g. price = standard price * 2) * Add this product to a PoS order > Observation: The price is not correctly computed according to the pricelist, because the standard price was not converted to the PoS currency. Why the fix: ------------ We just make sure to convert the standard price of the products when loading the products in the PoS session the same way as we do it for the list price. opw-5124388 Forward-Port-Of: odoo/odoo#244147 Forward-Port-Of: odoo/odoo#241168
This update prevents the API documentation endpoint from crashing when encountering models not currently defined in Odoo's code. The fix addresses a technical issue where the system would fail to load documentation for certain models, improving the reliability of the API. This ensures consistent access to documentation for all models within the Odoo system.
Original PR description
When accessing the API documentation endpoint (`/doc`), the server could crash with an Internal Server Error if the database contained ir.model records for models that are not loaded in the current registry. Steps to reproduce: 1. Insert a record into `ir_model` with `model='ghost.model'` and `state='base'`. 2. Open `/doc`. 3. The server raises a `KeyError: 'ghost.model'`. Root Cause: The `/doc` endpoint iterates over all records in `ir.model`. For each record, it attempts to resolve the Python class using `self.env[ir_model.model]` to check access rights. If a model exists in the database with `state='base'`, Odoo expects it to be defined in the Python source code and does not generate it dynamically. If the corresponding Python class is missing (e.g., from an old module), it is never added to the registry, causing the lookup to fail with a `KeyError`. opw-5401782 Forward-Port-Of: odoo/odoo#241483
This update fixes a problem where users couldn't properly update the linked data source selection within charts. Previously, the interface would incorrectly display the old data source even after a new one was selected. This ensures data visualizations accurately reflect the chosen data sources.
Original PR description
Currently, when a user links a chart to an odoo datasource, the sidepanel is not updated properly when the user tries to select a datasource from the same type as the one already selected. How to reproduce: - In a spreadsheet, insert a chart and a list datasource - duplicate the list datasource - in the chart sidepanel, select list#1 as link - now try to select list#2 -> the model update the link to list#2 but the interface still shows list#1. Task-5725964 Forward-Port-Of: odoo/enterprise#104887
This update resolves an error that prevented users from opening the Gantt view within the Project Stages feature. The fix corrects a coding issue that occurred when the Gantt view was accessed without pre-existing project data, ensuring a smoother user experience.
Original PR description
Currently, an error occurs when the user opens the Gantt view. **Steps to Reproduce:** - Install `timesheet_grid` without demo data. - Go to `Settings` and enable `Project Stages`. - Go to `Projects` and switch to the `Gantt view`. `UnboundLocalError: cannot access local variable 'project' where it is not associated with a value` This error occurs because, in [this commit], line [1] is mistakenly placed outside the loop. If self has no records, project is not defined, and accessing project.date_start raises an error. This commit moves the line inside the loop. [1]: https://github.com/odoo/enterprise/blob/34feeda7d0835d8c65d91493314133b8e83610d1/timesheet_grid/models/project_project.py#L50 [this commit]: https://github.com/odoo/enterprise/commit/c3296d1441400d20e3815207baa1188b5cb8fd93#diff-59e7d75aff5c1e890cd536834137eac5cd3ad185cb45ee1e157be15402cbc90fR50 sentry-7204644855 Forward-Port-Of: odoo/enterprise#105009
This update resolves an issue where the 'Import Bank Statement' feature incorrectly selected a journal in multi-company Odoo instances due to elevated server permissions. The fix ensures the import process filters by the currently chosen company, preventing incorrect journal selection and improving data accuracy. A new test confirms the fix's reliability.
Original PR description
Issue: when using the server action 'Import Bank Statement' the code would not filter on the currently selected company for choosing the journal on which to encode the bank statement and simply take the first result. Because the server action is running with sudo rights, in a multi-company environment more then one journals are found and the selected one is often wrong. Solution: filter on company during the selection of the journal. Note: a test was added in which we run the function with sudo rights to ensure an error is raised when the journal does not exist on the currently selected company, even if it is present on another company. Task-5494685 Forward-Port-Of: odoo/enterprise#105003 Forward-Port-Of: odoo/enterprise#104326
This update resolves a bug that prevented correct currency display when changing inactive currencies in invoices and bills. The fix ensures that the system properly fetches and uses the correct currency rates, preventing errors and crashes when viewing or editing these documents. This improves the reliability of financial reporting.
Original PR description
In the form view of invoices and bills, if the currency is changed to an inactive one, an option to activate it from the form view was available, but when the button is pressed the front-end doesn't receive the new data related to the currency which resulted in unexpected errors when trying to view the invoice/bill or the list of invoices/bills task-5412003 Forward-Port-Of: odoo/odoo#240086
This update resolves a technical issue where assets components were missing from the merged account_batch_payment module. This ensures the module functions correctly and avoids potential performance problems. The fix was a simple correction during the module integration process.
Original PR description
During the merge of the module account_accountant_batch_payment and account_batch_payment, we forgot to add the components to the assets of the merged module cfr: https://github.com/odoo/enterprise/pull/97544/files#diff-59095aa2812fc8b48436f7aaf3416dc40bb273c7d234ec18a37ac1576d0643e4 Forward-Port-Of: odoo/enterprise#104358
Features or functions removed from Odoo
This update removes the `stock.scrap` model, simplifying the product scrap process. The change shifts to using `stock.move` records, offering a more efficient workflow for recording and managing scrap quantities. This improves the underlying system's efficiency and reduces complexity.
Original PR description
This commit removes `stock.scrap` model without affecting its functionality from the user perspective. Previous to this commit, when a user wants to scrap some product, a record of `stock.scrap` is…
This commit removes `stock.scrap` model without affecting its functionality from the user perspective. Previous to this commit, when a user wants to scrap some product, a record of `stock.scrap` is created which is a scrap order containing info about the product, quantity, scrap reason, etc. When a scrap order is confirmed, it generates a `stock.move` and confirms it so that the quantity move is reflected in the quants. That's why `stock.scrap` model itself provides no intrinsic value and is dispensable. This commit removes the model completely and relies only on `stock.move.line` and `stock.move` to achieve the same functionality. The menu item "Scrap" now redirects to a list of stock.move.lines that has the new field `is_scrap` = true. If the user creates a new record from the list, a draft `stock.move.line` is created initially. When it's confirmed, it generates its `stock.move` and its state is changed to be done. The only fields that are added to `stock.move.line` to fully replace `stock.scrap` are `scrap_reason_tag_ids` and `should_replenish_scrapped`. This commit also adds a new action to scrap a lot/serial number from its form view directly. Task-4606260
This update removes the scrap model within Odoo, streamlining the system and aligning with recent changes. The removal was necessary to adapt existing features and tests following a related update (ODOO/210299). This change improves system efficiency and reduces complexity.
Original PR description
This commit adapts `stock.barcode` and some other tests for the changes introduced in https://github.com/odoo/odoo/pull/210299. Task-4606260
Code cleanup and technical improvements
This update adjusts how spreadsheet data is accessed within the Enterprise module. The previous method returned data as an object, which has now been updated to return an array. This change ensures consistent data handling and prepares the system for future enhancements to the spreadsheet sale management functionality.
Original PR description
`model.getters.getCells()` now returns an array instead of an object. This commit adapts the code. Task-5491227
This update refactors the styling of message bubbles in the dark theme, streamlining the code and subtly enhancing the visual appearance. The changes result in slightly more saturated bubble colors and a more pronounced 3D border effect, improving the overall look and feel in dark mode.
Original PR description
Reduce amount of LOCs to define dark theme version of message bubble colors, to match with the shape of how this is defined in white theme. While the intent of the change is just simpler LOCs, the visual in dark theme has subtle changes: - bubble colors are very slightly more saturated in dark theme - bubble have more visible border, giving more a 3D look Before <img width="778" height="639" alt="before" src="https://github.com/user-attachments/assets/4f4aa3e3-9e2f-44bf-9437-665203831103" /> After <img width="771" height="642" alt="after" src="https://github.com/user-attachments/assets/1c4f4b84-0eb0-45ce-bda3-3a849e93d49d" />