Daily updates from Odoo
Friday, December 19, 2025
72 changes · master
New functionality added to Odoo
This update adds a dedicated return type for Stamp Taxes within the Turkish localization of Odoo Enterprise. This allows users to accurately file and track Stamp Tax returns, addressing a previous gap in reporting functionality. It aligns with recent changes to support Stamp Taxes.
Original PR description
Before: Stamp Taxes did not exist in the Turkish localization. No return type or reporting structure was available for them. After: Added a dedicated Stamp Tax return type to match the Stamp Taxes introduced in the linked PR. Impact: Enables users to file and track Stamp Tax returns separately and correctly. Related PR-https://github.com/odoo/odoo/pull/236197 TaskId-4953773
This update introduces the ability to automatically send signature requests to pre-defined contacts (users or partners) triggered by server actions. Odoo Studio users can now easily automate signature workflows across Odoo applications, streamlining document approvals. This improves efficiency and integration with automation processes.
Original PR description
Add the option of sending a signature request to pre-defined signers or linked fields to `res.users` or `res.partner` when a server action is ran. Odoobot does the sending of the signature request and the message post on the chatter of the reference record. This is a useful feature for using automations with Odoo Studio across all Odoo applications. task-5187133
This update introduces a new grid view for work entries within the Enterprise module, providing a more visual and detailed representation of employee hours. This allows for better tracking of work time, accounting for absences and incomplete hours, and facilitates payrun generation when payroll is enabled.
Original PR description
*=hr_work_entry_enterprise,hr_payroll,web_grid Added the grid view to the work entries enterprise module, accounting for unavailable days, incomplete hours per day, and allowing for generating payruns if payroll is installed. The column totals are formatted depending on the expected worked days and the total work entries on a given day. Task-5118840
This update adds call recording data to the Odoo Enterprise demo environment. This allows users to experience the call recording feature during demonstrations and testing. It improves the demo's realism and provides a better understanding of the functionality.
This update introduces an automated Timesheet Assistant that tracks user activity on their computer and suggests relevant timesheet entries based on their work. This streamlines timesheet creation, reducing manual effort and improving accuracy for consultants, ultimately boosting billable rates.
Original PR description
Purpose ======= The goal is to make timesheet entry as quick and effortless as possible for consultants. Easier time logging means fewer forgotten entries, better visibility on activities, and…
Purpose ======= The goal is to make timesheet entry as quick and effortless as possible for consultants. Easier time logging means fewer forgotten entries, better visibility on activities, and ultimately a higher billable rate for the department. This PR is the first step in a series of features aiming to address this. It adds a new "Timesheets Assistant" feature, tracking the activity of users on their computer, and suggesting timesheet entries based on this data. Implementation ============== ActivityWatch ------------- Most of this new feature requires installing the tool [ActivityWatch](https://activitywatch.net/). This tool collects data through *watchers*, which are units tasked with one type of tracking. By default, there is one watcher tracking the name of the active window, and one tracking whether or not the user is actively using the computer. There are also additional watchers that can be installed by the user, the most important being a browser extension to get extra information about which websites were visited. This is used, among other things, to detect which activities were done in Odoo. Watchers send their data to a local server, which is then queried by the JavaScript code in Odoo. It is important to stress that this data only stays on the **client-side** and is never sent to the server, until the user decides to use it to create timesheets. Processing the Data ------------------- First of all, we start by retrieving the calendar events and planning shifts we can find for the current user, if the right modules are installed. We then add the data collected by ActivityWatch. We have two ways of processing that data: - **Odoo Activities**: With the browser watcher enabled, we track whenever the user is working on a record that we could connect to a task or a project. We then consider that subsequent activities were connected to that project, until another project/task detection. - **Matching Rules**: This allows filtering activities based on a regex that is run on a concatenation of the name and URL (if present), and matching them to a label that will show up in the suggestions of the timesheets assistant. The labels can contain placeholders that will be replaced with elements captured by the regex. Rules can also optionally be bound to a project or task, in which case they will count as a project/task change for subsequent activities. The precedence order for the data is as follows: 1. Calendar Events 2. Planning Shifts 3. Matching Rules, in order of ascending sequence 4. Odoo Activities In case of overlapping events from different sources, the one with lower precedence will be ignored for the duration of the overlap. Suggestions ----------- This results in aggregates of durations, with a label, and optionally a project or task. In the assistant interface, they are displayed in a list that can be (or not) grouped by the matched projects and tasks. The user can then choose one or more activities to convert to a timesheet, or dismiss the suggestions. Suggestions hidden this way will not show up again. Existing timesheets for the current employee are also shown on the right side of the assistant UI. They can be edited or deleted from there. When the user created a timesheet from activities, we track which project and task they match it to. This data is used to automatically match activities to projects and tasks based on the user's habits. --- Task-5167914
Enhancements to existing features
This update enables users to unpin all types of WhatsApp channels within the Enterprise edition of Odoo. Previously, users could only unpin specific channel types. This change simplifies channel management and improves user flexibility.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/232501 task-4606867 task-5408790
This update enhances the Helpdesk module by allowing other Odoo modules to customize the criteria used to define Service Level Agreements (SLAs) for tickets. Previously, this customization was limited, but this change broadens flexibility and improves how SLAs are managed within the Helpdesk system. It aligns with existing practices for related domains.
Original PR description
Allow other modules to modify the _sla_find domain when adding SLAs to helpdesk tickets. This is already the case for extra and false domains, while the main domain is hardcoded up to this commit. Forward-Port-Of: odoo/enterprise#101624 Forward-Port-Of: odoo/enterprise#97501
This pull request enhances the employee view across both public and private settings, making it more uniform and user-friendly. The changes focus on visual consistency, improving the overall employee experience within the HR application. This ensures a more streamlined and professional appearance for employees.
Original PR description
The aim of this PR is to make the employee public and private views look similar task-4778704
This update allows users to now customize the meal type associated with individual product variants when sending data to Urbanpiper. Previously, the meal type was always tied to the product template, limiting flexibility. This enhancement ensures Urbanpiper receives the most accurate product information for each variant, improving order fulfillment.
Original PR description
Before this commit: ==== - Meal type was sent to Urbanpiper for product variant/attribute, but it was the same as product.template. If the user wants to send customized meal type for variants, then there is no mechanism for it. After this commit: ==== - Now the user can customize the meal type at the product variant/attribute level and can send it to Urbanpiper. - Default meal_type of product variants will be the same as product.template task-5114054 Linked PR : https://github.com/odoo/upgrade/pull/8632
This update introduces a new Gantt view for managing maintenance requests, providing a visual overview of equipment and work centers. It simplifies planning by allowing direct creation of requests from equipment and work centers, while also preventing scheduling conflicts and focusing on active maintenance tasks.
Original PR description
Purpose: -------- - It should be easier to visualize maintenance requests than what is possible today. The calendar view is useful but does not provide a comprehensive overview of all equipment or…
Purpose: -------- - It should be easier to visualize maintenance requests than what is possible today. The calendar view is useful but does not provide a comprehensive overview of all equipment or work centers, nor the ability to plan interventions easily. - It should be much easier to perform maintenance directly from an equipment or work center, instead of creating a maintenance request manually. - It should also be easy to quickly visualize which equipment is currently undergoing maintenance and update their status once the maintenance is completed. With this commit: ----------------- - Makes maintenance planning more easier to manage by adding gantt view by equipment/workcenter. - Replaced the `Maintenance Calendar` menu with `Planning by Equipment` and `Planning by Workcenter`, providing a more practical way to plan maintenance requests by resources rather than relying on the calendar view. - Allows creating maintenance requests directly from equipment or work center views, reducing manual effort. - Prevents scheduling conflicts by showing unavailable workcenter intervals due to workorders or non-working hours. - Removes the `Request Date` field from maintenance requests as it is redundant with `Scheduled Date`; `Scheduled Date` more accurately reflects the intended start of the maintenance request, whereas `Request Date` only indicates when the request was created. - The Gantt view defaults to filtering records for the respective workcenter/equipment by `Todo` and `Active`, excluding `Done` and `Archived` maintenance requests, to focus on the remaining active requests. - It also makes other views (e.g., Kanban, List, Pivot, etc.) of Maintenance Requests available alongside the Gantt view under `Planning by Equipment` or `Planning by Workcenter`, with the default grouping by equipment or workcenter respectively. - Improve planning by adding a Plan Popup for unscheduled maintenance requests. It is especially useful when maintenance planners have created requests but are not yet sure when they should be scheduled. - The Plan Popup applies default `Todo` and `Active` filters to prevent accidental planning of cancelled or already repaired requests. original-PR by srap: https://github.com/odoo/enterprise/pull/96510 Community PR : https://github.com/odoo/odoo/pull/237165 Upgrade PR: https://github.com/odoo/upgrade/pull/8938 task-4698325
This update enhances Odoo's website sitemap by ensuring only pages returning a successful 200 status code are included. This aligns with Google's best practices, improving the website's visibility in search results and ensuring accurate indexing. The changes also remove outdated redirect information, streamlining the sitemap.
Original PR description
*= website_helpdesk, website_helpdesk_forum, website_helpdesk_slides This commit improves sitemap generation by ensuring that only pages returning a 200 OK status are included. - Exclude URLs that have a corresponding `website.rewrite` record. - Resolve 301/302 redirects and include only the final target URL. - Remove redirecting routes which previously appeared in the sitemap while their actual destination URLs were missing. - Align sitemap behavior with Google guidelines, which recommend including only canonical URLs returning 200 OK responses. Example: - `[https://www.odoo.com/event/.../register`](https://www.odoo.com/event/.../register%60) (200) will be included. - `[https://www.odoo.com/event/...`](https://www.odoo.com/event/...%60) (301) will no longer appear in sitemap.xml. Community PR: https://github.com/odoo/odoo/pull/209542 task-4655590
This update allows users to directly customize their portal dashboard cards through the website builder. They can now modify card titles, descriptions, images, and visual styles like background color and borders, improving the user experience and allowing for more tailored information displays.
Original PR description
This commit introduces a new model `portal.entry` to manage portal dashboard cards and improves the customization experience from the different options. Users can now edit portal dashboard cards directly from the builder options, including modifying the card title and description, updating image through the media dialog, and customizing visual styling such as background color, border style, border width, and border radius. task-3894113
This pull request updates the views used for managing work entry types and work entry definitions within the HR payroll module. These changes enhance the user experience and improve the organization of related data, streamlining HR processes.
This update simplifies lead generation by replacing the 'Generate Leads' button with a dropdown menu. The dropdown offers options to open existing lead generation workflows or redirect to related modules, streamlining the process for users. Administrators can also install necessary modules directly from the dropdown if they are not already present.
Original PR description
Related PR: https://github.com/odoo/odoo/pull/236726 - Changed the 'Generate Leads' button to a dropdown menu - Dropdown contains options to open the original modal or redirect to other modules which can be used to generate leads - Only actions which can be accessed by the current user are shown in the menu - If the modules are not installed and the user is an admin, they can install the apps directly from the dropdown menu task-4876662
This update enhances the user experience of the Sign app by refining its interface and underlying functionality. The changes focus on minor adjustments to improve usability and streamline the signing process. This results in a smoother and more efficient experience for users.
Original PR description
This task aims to enhance the user experience by refining both the UI and functionality of the sign app. task-5169331
This update enhances the restaurant floor plan editor by allowing users to add decorative elements like shapes, text, and images. This provides significantly more flexibility in designing restaurant layouts, improving the overall user experience and customization options.
Original PR description
This commit adds the ability for users to create decorative elements within the floor plan editor. It introduces shapes, text items, and images that can be placed and edited directly on the floor plan. These enhancements significantly improve customization options, enabling users to design floor layouts more freely than before. Task.5159581
This update enhances the Odoo Enterprise system by automatically logging when payment links are created, including the payment amount. Previously, it was difficult to track these links, making it harder to manage payments. This change provides better visibility and simplifies payment tracking.
Original PR description
Log in the chatter a message that a payment link has been generated with the amount it was generated for, because it used to be difficult to track if a payment link was generated and for how much. task-5062371
This update introduces a new feature to duplicate existing audit reports, streamlining the process of creating new reports based on previous versions. This allows users to quickly adapt reports for upcoming years with minor adjustments, saving time and effort.
Original PR description
This PR adds a method to duplicate an audit report. When duplicating an audit report, the system copies all articles linked to the original report, adjusts the start and end dates of the embedded account reports, updates the internal links and refreshes the article indexes in the copied articles. This new method allows users to easily create a new audit report based on an existing one, which is especially useful when only minor adjustments are needed for the upcoming year. Task-5189391
This update streamlines the process for users to upload and manage signature certificates within Odoo. The user interface for creating certificates in Settings has been redesigned to be more intuitive and easier to use, improving efficiency and reducing user frustration.
Original PR description
Improve the user experience when uploading signing certificates in Settings by simplifying and making the certificate creation wizard more user-friendly. task-5430913
This update enhances the usability of the Odoo Enterprise accounting module on mobile devices. It aligns the mobile interface with the desktop version, improving the display of charts, reports, and key data elements like asset status badges. The changes focus on a more consistent and intuitive experience for mobile users.
Original PR description
This commit improves mobile usability by aligning layouts and behaviors with the desktop version. It includes: - Increased screen usage for charts, graphs, and reports - Alignment of status badges for assets, batch payments, and analytic budgets (list and kanban views) - Removal of grey visual artifacts on mobile - Kanban view for loan lines - Redesign of chart selection for better mobile interaction These changes ensure a more consistent and usable experience on mobile without altering functional behavior. task-5335745
This update enhances the search functionality for VoIP calls by adding new filters and refining existing ones. Specifically, users can now filter by call status ('Handled'), recording presence, and transcript availability, making it easier to locate relevant calls. The 'My Calls' filter is now the default view.
Original PR description
1. Remove "Missed" and "Ended Unexpectedly" filters 2. Add "Handled" filter, that filters calls in the "terminated" state 3. Add "Has Recording" and "Has Transcript" filters 4. Set "My Calls" as the default filter when opening the view [Task-5429539](https://www.odoo.com/odoo/project/5778/tasks/5429539)
This update simplifies push notification delivery by removing reliance on external Firebase services. This improves code stability, user privacy, and debugging, while reducing server complexity and potential risks associated with third-party dependencies.
Original PR description
Currently, the `social_push_notifications` module uses Firebase to send push notifications. Over the years, the technology of push notifications has evolved a lot. It is now way more easier to…
Currently, the `social_push_notifications` module uses Firebase to send push notifications. Over the years, the technology of push notifications has evolved a lot. It is now way more easier to implement push notifications in a web browser without relying on a third service such as Firebase. This PR introduces a custom implementation for web push notifications used in the `social` and `event` modules. The goals of this change are to: 1) simplify the code base, 2) remove external libraries 3) ensure long term stability 4) improve user privacy and 5) ease debugging. 1. **Simplify the codebase**: The new implementation streamlines the architecture by allowing the server to send push notifications directly to browser-specific delivery servers. As a result, logic related to storing Firebase credentials, interacting with Odoo IAP, and other Firebase-related code is no longer needed and has been removed. 2. **Remove external libraries**: With this implementation, we eliminate the need to install Python libraries like `google_auth` on the Odoo server. This simplifies server setup and reduces the risk of installation or configuration issues. 3. **Ensure long term stability**: Using Firebase ties us to a third-party provider that can change its API, features, pricing, or quotas at any time, with potentially disruptive consequences. With a custom solution, we maintain full control over the codebase and avoid such external risks. 4. **Improve user privacy**: Firebase routes all push notifications through Google's servers, regardless of the user's browser. Our implementation respects user privacy by using the delivery infrastructure native to each browser, avoiding unnecessary exposure to third-party tracking. 5. **Ease debugging**: Debugging is simpler with this implementation, as it removes reliance on a third-party service that previously acted as a black box. Developers can now test push notifications directly from the settings without creating a Firebase account or configuring credentials. Everything works out of the box. Technical Notes: --- This PR removes the `use_visitor_timezone` field, which previously allowed notifications to be sent according to each visitor's timezone. The removal is motivated by the following reasons: 1. **Unreliable delivery times**: Delivery could not always be honored due to timezone differences. For example, if the server time is 16:00 and a post is scheduled for 17:00, notifications cannot be delivered on time for visitors in a timezone that is +5 hours ahead. Additionally, the cron job runs only once per hour, which further reduces accuracy when many notifications need to be sent. 2. **No real usage in production**: The option was almost never used in production, indicating limited practical value. Removing it simplifies both the interface and the post configuration logic. 3. **Improved batching for the new notification system**: The new system is designed to send notifications in batches for scalability. Timezone-based delivery made batching difficult and added unnecessary complexity. 4. **Reduce memory usage**: By removing this option, we also reduce memory usage by storing only the last processed push subscription ID, rather than keeping a record of every visitor who has received a notification. Migration Notes: --- We still need the IAP codebase with Firebase for the stable versions of Odoo. This codebase can be removed once Odoo 19 is discontinued. See odoo/odoo#192564 Task-4316624
This update introduces a new workflow to ensure HR managers review changes to critical payroll data made by non-officers. It adds a clear UI for review and approval, preventing payroll processing until changes are validated. This improves data accuracy and reduces potential payroll errors.
Original PR description
HR managers need to be notified when payroll-critical employee data is modified by non-officers and must have a clear UI to review and approve these changes before payroll is processed. This PR…
HR managers need to be notified when payroll-critical employee data is modified by non-officers and must have a clear UI to review and approve these changes before payroll is processed.
This PR introduces the foundations of a payroll review workflow in `hr_payroll`:
### 1. Tracking of payroll-critical fields
* Add `tracking=1` on sensitive fields in `hr.employee` and `hr.version` that should trigger the *to_review* state (e.g. `employee_id`, `contract_id`, `wage`, `schedule_pay`, `resource_calendar_id`, etc.).
* Use `tracking=1` instead of `tracking=True` to:
* Ensure these changes feed the review workflow.
* Avoid cluttering the chatter with lower-priority changes.
* The tracking level `< 10` is used by the review system to trigger the *to_review* state.
### 2. Dropdown selection badge widget
* Add a reusable `dropdown_selection_badge` widget to display selection fields as interactive badges in list, kanban, and form views.
* Main features:
* Configurable colors and icons per selection value.
* Graceful handling of empty selections with customizable styling.
* Hover interactions emitting events on the event bus (e.g. to highlight related chatter or show contextual info).
* Consistent badge styling across all supported view types.
### 3. Review workflow for employee changes
* **Security & access**
* Restrict modification of payroll-critical fields by non-officers.
* Automatically set the employee’s state to *to_review* when restricted fields are changed.
* Ensure proper access rights for payroll officers and managers to review and approve changes.
* **UI & review state management**
* Integrate the `dropdown_selection_badge` widget in employee list, kanban, and form views.
* Add a clearly visible review badge and hover states for the review status.
* Show review warnings in the payroll dashboard to prevent processing unreviewed employees.
* Update `write()` logic so that:
* Explicitly setting the state to *to_review* is preserved.
* The review state is only reset when changes are properly approved, not silently overridden.
* **Payslip validation**
* Add validation to block payslip processing for employees still requiring review.
This lays the groundwork for a robust payroll review system, ensuring no payslip is processed while employee changes are pending review.
task-5150047This update streamlines printer management across all POS components, allowing users to easily configure one or multiple receipt printers per POS configuration. Previously, printer settings were fragmented, but now a unified system provides better control and flexibility, particularly for managing receipt and preparation printers.
Original PR description
*: pos_enterprise, pos_imin, pos_iot, pos_restaurant The goal of this commit was to unify the printer logic accross the POS. Before this commit, preparation and receipt was handled differently.…
*: pos_enterprise, pos_imin, pos_iot, pos_restaurant The goal of this commit was to unify the printer logic accross the POS. Before this commit, preparation and receipt was handled differently. Preparation printers were handled in the `pos.printer` model in a dedicated view. And receipt printers were handled in the `pos.config` model in the pos.config settings view. Here, printers connected through the iot box and the EPos ones were handled under two different checkbox settings. It was a bit difficult to handle them if a client have a config with preparation printers and receipt printers connected through maneers. The goal was also two permit a client to have multiple receipt printers for one POS. Before, only one was permitted. And a printer can also be used by multiple POS config. After this commit, - `pos.printer` model is used by every single printer in the POS. The configuration page is located at one place and the pos config setting look a better simple. We can configure one or multiple receipt printers for one pos config in the settings and a default one. The default one is used by default by the POS to print receipt. If the printer isn't accessible (lack of paper, loss of connection,...), a modal appears to offer the client to retry, download, continue (as before this commit) with a last option to choose a fallback printer if one is available in the pos config. - two test buttons were created to test a specified printer in the `pos.printer`view and every printer available for a pos config in the `pos.config` settings view (iot and epson ones). On the ticket printed, we can identify easily the printer with its name. task : 5266055 community PR : https://github.com/odoo/odoo/pull/236731 upgrade PR : https://github.com/odoo/upgrade/pull/9053
This update enhances the clarity of financial reports, particularly the Trial Balance and General Ledger, by displaying unaffected earnings as separate lines instead of allocating them to accounts. It also addresses minor localization issues and introduces a warning for unallocated earnings in SAF-T reports, ensuring accurate reporting across different currencies and accounting standards.
Original PR description
WIP This commit changes the way the Unaffected Earnings are displayed in the Trial Balance. Instead of allocating unaffected earnings to the equity_unaffected account when the report is rendered, we now showcase the earnings to an additional line per company, with no relation to an account. In this commit, we also add the account type 'expenses_other' which was missing from the line 'Less Other Expenses' in the Generic P&L. task-5153168 Forward-Port-Of: odoo/enterprise#95062
Resolved issues and error corrections
This update disables Intervat functionality within the l10n_be demo company data. This change prevents Intervat from being automatically set during testing with Runbots, ensuring more consistent and reliable demo environments. It's a minor improvement to the demo setup.
Original PR description
This commit set the `l10n_be_intervat_mode` to `disabled` in the l10n_be demo company. The reason why we are doing this it to avoid having intervat set by default on runbots. task-5404719 Forward-Port-Of: odoo/enterprise#101929
This update fixes an issue where rental receipts were incorrectly validated without warnings, even when incomplete. The change ensures that rental receipts are handled correctly, preventing validation errors and allowing for accurate tracking of partial rental returns. This improves the rental process for users.
Original PR description
Steps to reproduce: - Enable Rental pickings - Create a rental for a product, for 4 quantity - Process the delivery - Open the barcode app and open the reception - Scan the product once and validate…
Steps to reproduce: - Enable Rental pickings - Create a rental for a product, for 4 quantity - Process the delivery - Open the barcode app and open the reception - Scan the product once and validate Issue: The receipt is validated without issues nor warning, despite being incomplete. This is due to a bad mix of two changes: - #60801, which always sets the rental receipt as return of the delivery - #48788, which removes the backorder check for returns in barcode For regular returns made in barcode, it makes sense to avoid the backorder check, as from here we're processing a full picking return and we'd have the confirmation pop every time. However, things are different for rental receipts, as despite them being set as returns of the delivery, they're proper receipts that need to handle the partial receipt. To avoid the issue, rather than removing the backorder check whenever there's a return linked to the picking, now also checks that there isn't a rental order linked to the picking. opw-5265874 Forward-Port-Of: odoo/enterprise#101387
This update fixes a recurring issue where users were receiving duplicate order receipts due to delays in communication with the IoT printer. The fix ensures a unique identifier is used for all print requests, preventing the IoT box from processing the same action multiple times and eliminating the 'printing failed' error.
Original PR description
Currently multiple clients report double order receipts printing. This PR fixes the issue where due to slow network connection a request would be sent to the iot box but the iot box didn't reply in time to confirm the action finish. The user would then get an error showing 'printing failed' (due to a timout). If he cliks on retry the iot box would still print the previous receipt and then receive the new "retry" request with now a new action uuid which would also be printed because uuid is different from the 1st request. This PR adds a consistent uuid for both the initial and all the subsequent retry requests so that double actions would never be done by the iot box. Forward-Port-Of: odoo/enterprise#102266
This update resolves an issue impacting Swiss payroll calculations, specifically related to overtime payments (ST-Overtime) and the LPP (Lohn- und Premodifizierungs-Pauschale) tax. The fix ensures accurate and compliant payroll processing for Swiss employees, addressing a previous error.
Original PR description
Forward-Port-Of: odoo/enterprise#102249 Forward-Port-Of: odoo/enterprise#102161
This update fixes a misleading warning message displayed in the eCommerce shop when users try to add subscription products without a defined plan. The change ensures users receive a clear 'no valid combination' warning, improving the shopping experience and preventing confusion. This resolves a usability issue for subscription offerings.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Install website_sale_subscription - Create a subscription product without a plan - Open product on eCommerce Issue: - When viewing a subscription product…
Version: - saas-18.4 Steps to reproduce: - Install website_sale_subscription - Create a subscription product without a plan - Open product on eCommerce Issue: - When viewing a subscription product without a subscription plan in the eCommerce shop, the system incorrectly shows the warning "This subscription is not compatible with the one already in your cart. Please order them separately or empty your cart." - This happens even if the cart is completely empty. - The method _is_add_to_cart_possible doesn’t find any valid combination to add to the cart, and because the product is marked as recurring, it always triggers the wrong message. Solution: - Add a condition to check if current product have any recurring price set if not then it will show the correct warning that 'This product has no valid combination.' Impact: - Users see clear and correct warnings on products without a subscription plan. task-5255749 Forward-Port-Of: odoo/enterprise#102251 Forward-Port-Of: odoo/enterprise#100929
This update corrects a bug where inaccessible folders were incorrectly included in document search results. Previously, searching for folders within a company structure would incorrectly display folders that were not accessible to the user. This fix ensures that only accessible folders are shown, improving data accuracy and user experience. Performance testing confirmed this as the optimal solution.
Original PR description
`user_folder_id` and `folder_id`'s `child_of` were not taking into account that the path could be broken if inaccessible folders are between accessible documents. E.g., the DB structure COMPANY └── Folder A └── Folder B (inaccessible to User A) └── Folder C Would appear to user A as COMPANY └── Folder A SHARED └── Folder C such that "Folder C" should not be found when searching `child_of` "Folder A" or "In Company". Note that more creativity would be necessary to fix this before 19.0 as the stored `folder_id` field could not be `_search`ed. Task-5231269 Forward-Port-Of: odoo/enterprise#99040
This update fixes an issue where a new offer page would reset to a blank state after a refresh. The change ensures that the correct employee context is maintained when refreshing the offer details, providing a consistent and accurate view for users. This improves the user experience and data integrity.
Original PR description
Steps to Reproduce ================== - Go to Employees - Choose an employee with no offers - Click on the "Offers - new" smart button (a form view will open with the correct employee name at the bottom) - Refresh the offer's page without saving (the employee field is emptied and the required Applicant field appears) Issue ================== The generate offer action that is triggered through the smart button returns a one-time action dictionary with the context. But that context is lost when we refresh the offer page as it's not saved anywhere. Fix ================== Replace the action dictionary with an action record for creating a new offer to ensure the context is maintained upon page refresh. Task-ID: 5059490 Forward-Port-Of: odoo/enterprise#102260
This update now automatically includes the XML file generated for Guatemalan e-invoices alongside the PDF when sending invoices to customers. Previously, only the PDF was sent. This change provides customers with both required files in one email, enhancing transparency and convenience.
Original PR description
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and…
Purpose: In the Guatemalan localization, when an electronic invoice is created, the email template to the customer already contains the PDF version of the DTE. However, the XML file, generated and sent to the SAT through Infile, is not attached to that email. Even though the SAT and Infile deliver the XML to the customer, it is more convenient and transparent if Odoo includes it directly in the outgoing invoice template email, so the customer receives both files in one place. Before this commit:- - Only PDF version is attached by default in customer email for e-invoices. - Name of edi document is prefixed with `Demo` if company is in demo environment (check parent company's environment in case of child company) (e.g. DEMO_certificate_INV_2025_00001.xml) and prefixed with `SAT` if company is in testing or production environment(e.g. SAT_certificate_INV_2025_00001.xml). After this commit:- - XML version is also attached by default along with PDF in customer email for e-invoices. - Name of edi document is always prefixed with `SAT`. task-5224521 Forward-Port-Of: odoo/enterprise#102322 Forward-Port-Of: odoo/enterprise#98978
A previous access restriction prevented HR Officers from generating offer documents. This fix updates the system to allow Officers to access the necessary data fields, ensuring they can complete this critical step in the hiring process. The change was made to align with recent HR module updates that tightened access controls.
Original PR description
Steps to reproduce: ------------------------- 1. Install Salary Configurator module. 2. Create a new user and assign Officer rights in Employees and Recruitment. 3. Login with that user. 4. Create a…
Steps to reproduce: ------------------------- 1. Install Salary Configurator module. 2. Create a new user and assign Officer rights in Employees and Recruitment. 3. Login with that user. 4. Create a new application and move it to 'Contract proposal' stage. 5. Click on the 'Generate Offer' button. Observation: ------------------------- An Access Error occurs, denying Read access to the `final_yearly_costs` field. Issue: ------------------------- In earlier versions, users had an additional access right that allowed them to access contract fields. After the HR modules were refactored, only HR Administrators and Payroll Users retained access to those fields. As a result users with only Officer rights in HR encountered an access error when generating an offer. Solution: ------------------------- Use `sudo()` to bypass access restrictions for the `final_yearly_costs` field when generating the offer. opw-5243280 Forward-Port-Of: odoo/enterprise#102250 Forward-Port-Of: odoo/enterprise#99478
This update enhances the visual appearance of the stock accounting module by updating company icons and improving the styling of buttons. This change provides a more polished and professional user experience for managing company-specific stock settings within Odoo Enterprise.
Original PR description
Forward-Port-Of: odoo/enterprise#99095
This update corrects a display issue in the Field Service module where task templates were incorrectly shown alongside real tasks. The fix ensures that only actual tasks are listed, improving the clarity and usability of the 'All Tasks' view. This resolves a potential confusion point for users.
Original PR description
Steps to Reproduce
- Navigate to Field Service > All Tasks.
- Observe that task templates are visible with tasks.
Issue
- Task templates are visible in the Field Service > All Tasks view, which is incorrect. Only real tasks should be listed.
Cause
- The domain in the view definition only filtered tasks by `is_fsm = True` and ` project_id != False`, but it did not exclude template tasks and sub-tasks of task templates.
Solution
- Added `('has_template_ancestor', '=', False)` to the domain so that only actual tasks are displayed in the Field Service > All Tasks view.
task-5079337
Forward-Port-Of: odoo/enterprise#102409
Forward-Port-Of: odoo/enterprise#94472This update fixes an issue where duplicated subscription deliveries weren't correctly reflecting delivered quantities. The change ensures that delivery dates are properly used to calculate quantities, leading to more accurate tracking of delivered items. This improves the reliability of subscription order reporting.
Original PR description
The use of date_deadline instead of date in the filter messes up the calculation of delivered quantities when you duplicate a delivery. Task: 4910572 Forward-Port-Of: odoo/enterprise#89550
This update corrects a test failure related to VAT number validation for Thailand. After implementing stricter VAT number checks, a test case failed because the previously used VAT number didn't meet the new format requirements. This ensures the Thailand reports function correctly and accurately.
Original PR description
Following the implementation of proper validation for VAT numbers for Thailand, this now fails as the one set in the test doesn't follow the proper format. Community PR: odoo/odoo#239616 Total credits to @vin-odoo Forward-Port-Of: odoo/enterprise#102404 Forward-Port-Of: odoo/enterprise#101905
This update corrects a bug in the web_studio module that was causing errors when users made minor changes to PDF reports. The fix ensures that insignificant edits don't trigger unnecessary diffs and errors, improving report editing stability. This prevents users from encountering 'Document is empty' errors when saving.
Original PR description
Example of steps: - Install sale_management and web_studio - Try to edit PDF Quote report - add /4 columns somewhere above the table - try to save - Error: Document is empty In this case, for some reason `html_editor` edits the external_report by changing the order of attributes on a node, which causes a diff, but not relevant for studio and won't produce any xpath operations. This commit handles this case by initializing the Studio view to `<data/>`. opw-5351588 Forward-Port-Of: odoo/enterprise#102416
This update resolves an issue where recurring revenue (MRR) calculations were incorrectly converting currency, leading to inaccurate reporting and missing achievement data. The fix ensures accurate currency conversion during reporting, guaranteeing correct revenue recognition and improved financial visibility.
Original PR description
Before this commit, the log amount_signed was converted to the currency of the company of the log before being converted to the currency of the current company. There were issues as sometimes we did not any value in sub_rate_query. The join would fail to find a row and therefore the achievement would not be displayed. Moreover, the conversion rate were not always correct. This commit reuse the logic of the sale_order_log_report. We convert the amount_signed of the log into the currency of the main company and we convert that amount into the currency of the current company. Forward-Port-Of: odoo/enterprise#101813
This update fixes an issue where clicking on activity counters in the systray didn't correctly filter documents. The change ensures users only see documents with relevant pending activities, aligning with standard Odoo behavior. This improves the user experience and accuracy of document views.
Original PR description
Clicking on activity counters (Late, Today, Future) in the systray relies on specific "search_default" keys to filter the target model's view. Previously, these specific activity filters were missing from the document search view or had the wrong name, causing the systray to fail to filter the documents correctly when redirected. This resulted in the user seeing all documents instead of only those with the relevant pending activities. Note: the 'My Activities' filter is set to invisible, to align with standard odoo behaviour. Task-5427921
This update corrects a warning message that appeared when scheduling work entries with start and end dates combined with durations. The change ensures that the system accurately prevents overlapping work entries, maintaining data integrity. This resolves a potential issue with scheduling conflicts.
Original PR description
Problem ---------- This warning message doesn't make sens with the transformation of work entries date_start/stop in date+duration. No overlap is possible. task-5349515 Forward-Port-Of: odoo/enterprise#100163
This update resolves a bug that occurred when multiple CAF ranges were active within a document type, causing errors during invoice processing. The fix ensures the system selects the CAF with the lowest starting number, allowing for proper gap filling and preventing database errors. This improves the reliability of invoice processing for users.
Original PR description
In #92208 the CAF system was improved to find the next starting value in the right sequence if there are multiple in the system. If no CAFs are found, it will reset to the document types starting…
In #92208 the CAF system was improved to find the next starting value in the right sequence if there are multiple in the system. If no CAFs are found, it will reset to the document types starting number. This worked except in the case where there are multiple CAFs that are currently marked active in a document type. As it tries to access `caf.start_nb` it hits an ensure_one() which throws a traceback whenever you open most account.moves on the DB. Steps to reproduce: - Modify the CAF for Doc Type 33 (Electronic Invoices) to have a smaller range than 1 - 999,999 (1 - 5) - Create Two new CAF files also for Doc Type 33 that start after this value (6 - 10 and 11 - 15 for example). - Mark the original to be spent via cancelling it and try to open an invoice. It will find both of the new CAFs and try to get the start_nb of the recordset. In discussion with the PO, when we have multiple CAFs, we should pick by the lowest start number as it will allow for any gaps that might exist be filled. opw-5414350 Forward-Port-Of: odoo/enterprise#102385
This update resolves an issue where the ISO 20022 XML generation consistently used two decimal places for currency amounts, leading to errors for currencies like JPY. The fix dynamically sets the decimal places based on the currency, ensuring accurate data formatting and preventing potential errors.
Original PR description
Issue: Generating the xml file for iso20022 always generates the amount with two decimals which is hard coded and can cause error for currencies without decimals for example JPY. Fix: The fix is to have the currency decimal number dynamically set through the currency decimal places field. task: 5242204 Forward-Port-Of: odoo/enterprise#101368
This update fixes an issue where XML reports were incorrectly including a slash ('/') when there was no comment provided. The change ensures that empty comment sections in XML reports are properly left blank, improving report accuracy and consistency. This resolves a minor formatting problem.
Original PR description
Since 17.0, we added a / when there was no comment in the comment section of the xml. This is wrong and should be left empty. opw-5242381 Forward-Port-Of: odoo/enterprise#102174 Forward-Port-Of: odoo/enterprise#100033
This update resolves an issue where online orders with dynamic attributes wouldn't appear in the POS system if the corresponding product variant wasn't created. Now, the system automatically creates the variant before processing the order, ensuring all online orders are correctly reflected in the POS.
Original PR description
Before this commit: --- - When an order was placed with a dynamic attribute and the corresponding variant was not created in Odoo, the order did not appear in POS. After this commit: --- - When an order is placed with a dynamic attribute and the variant does not exist in Odoo, the variant is first created and then the order is successfully placed in POS. task-5056425
This update automatically assigns team members to new tasks created from project templates, ensuring consistent resource allocation. Previously, the task assignment process was unreliable due to an issue with how task order was handled, now it correctly uses the task template to determine team members.
Original PR description
Before this commit, after having created the project from a project template, a loop is made to scheduled the task and check the roles set on the task template. The problem is looping on `zip(self.task_ids, project.task_ids)` cannot guarrantee the tasks in the both are in the same order than the tasks insertion since `task_ids` will depend on the order of the task model. To be sure, the task template is the one used to create the task in the project duplicated, the process should be done in the copy method of task instead of using `task_ids` of both projects. This commit first moves the logic implemented in action_create_from_template in `project_enterprise` module in the copy method of the task. Then, it improves the logic to assign the available resources to the new task planned based on the users set on the roles set on the task template related. task-5139714
This update ensures that AI server actions within Odoo Enterprise always include a prompt. Previously, missing prompts could lead to unexpected behavior. This change improves the reliability and usability of AI-powered features by preventing empty prompts.
Original PR description
In this commit we add an view contraint so that ai server actions are not allowed to have an empty prompt. We cannot make the field itself required since then all server actions will require it. Related 19.0 PR: https://github.com/odoo/enterprise/pull/102441 Task-5379758
This update prevents HR users from receiving unnecessary reminder emails. Previously, reminders were triggered by time-off requests or public holidays, even if the user didn't need to submit a timesheet. Now, reminders are only sent for active timesheet entries requiring user input, streamlining the process and reducing email clutter.
Original PR description
**Steps to reproduce:** - Install timesheet_grid_holidays - Create a user with no timesheet access - Create a leave and approve it as a manager - Set up employee reminders in timesheet settings - Run the timesheet reminder scheduled action **Issue:** HR users without timesheet app access or who haven’t submitted timesheets in the past 3 months were still receiving reminder emails. **Cause:** When a time-off is approved or a public holiday is recorded, it generates timesheet entries, which causes reminder emails to be sent incorrectly. **Fix:** Filter out time-off and public holiday entries when sending reminders. Now, reminders are only sent for actual timesheets that require user input. task-5085790 Forward-Port-Of: odoo/enterprise#102342 Forward-Port-Of: odoo/enterprise#95450
This update enhances the display of security class names on the transaction form, resolving an issue with inconsistent styling. The change utilizes a new Odoo markup system (odoomark) for more reliable and accurate presentation, improving the user experience and ensuring consistent security information is shown.
Original PR description
This commit refactors the way security classes are displayed on the transaction form view drpodown menu. It uses the new odoomark markup \v instead of hacky css to achieve proper styling to security classes display names. odoomark new markup PR: https://github.com/odoo/odoo/pull/239431 task-5418874
This update ensures that documents are automatically created when bank statements are linked to PDF or image attachments. Previously, attachments linked to bank statements weren't generating documents, but now this process is streamlined for better record-keeping of financial data. This improves the accuracy and completeness of accounting records.
Original PR description
In #99297, we synchronize the pdf attachments of bank statements at the attachment creation only. But when the attachment is linked to a bank statement afterward, no document is created. We improve this here by also creating a document when an attachment is linked to a bank statement. As images can also be "converted" into bank statements, we also synchronize the images linked to bank statement with Documents. Use-case: - install accountant and documents_account - Accounting -> Bank - Upload: a pdf or an image - Fill statement lines - Save Here the attachment is linked to the bank statement afterward (see _check_attachments method) so no document was created. Task-5424742
This update resolves an issue where deleting a shopfloor instruction suggestion caused errors. The fix ensures that adding a new suggestion after a deleted one functions smoothly, preventing a traceback related to quality point relationships. This improves the reliability of the shopfloor instruction suggestion process.
Original PR description
**BUG:** Traceback when **suggesting** deleting a BOM step from the shopfoor. **STEPS TO REPRODUCE:** - Open a shopfloor MO (with PLM installed) -- Add a suggestion step (MO > cog> Update…
**BUG:** Traceback when **suggesting** deleting a BOM step from the shopfoor. **STEPS TO REPRODUCE:** - Open a shopfloor MO (with PLM installed) -- Add a suggestion step (MO > cog> Update instructions > Improvement Suggestion > Add a step). -- Add a second suggestion step after the first one. -- Delete the second suggestion step (MO > cog> Update instructions > Improvement Suggestion > Delete a step). -- Add a third suggest suggestion step after the second one we just suggested deleting. -- > Traceback **ORIGIN:** First, when adding the suggestions: - 2 Quality Check (QC) are created on the **new_bom_id** in `add_quality_check_from_tablet.save()` - 2 Quality Point (QP) are also created in `add_check_in_chain()`, (only in mrp_workorder_plm override) - The 2nd new QC is linked to previous QC in `_insert_in_chain` Secondly, when deleting the 2nd added suggestion (_on the same MO, as suggestions are linked to the new bom_id and wont appear on other MOs until ECO is validated_): - The QP of the second QC is deleted (but the QC itself is not deleted) here: https://github.com/odoo/enterprise/blob/f91b0c8c41f40a71cbea3cd4f5ccc6873af3c004/mrp_workorder_plm/wizard/propose_change.py#L72-L74 Finally, when adding a new suggestion after the one we just suggested deleting, in `_add_check_in_chain`, a traceback happens by trying to access the QP point we deleted in the resequencing part of `_add_check_in_chain` here: https://github.com/odoo/enterprise/blob/eb716c18944ec50c9c8c74a2888ed5f3032a7b08/mrp_workorder_plm/models/mrp_workorder.py#L62-L63 **FIX:** We accept that not all QCs must have QPs `[0]` -> `[:1]` (see note on another approach idea) changing ```diff - point = check.point_id if check.point_id.operation_id == operation else points.filtered(lambda p: p._get_sync_values() == check.point_id._get_sync_values())[0] + point = check.point_id if check.point_id.operation_id == operation else points.filtered(lambda p: p._get_sync_values() == check.point_id._get_sync_values())[:1] ``` **NOTES:** -1 Another fix could have been to delete the QC at the same time as the QP but I did not find any `remove_from_chain` function to safely remove the QC from the chain of QC. Along those lines we could rethink the sequencing / resequencing of QC and QP as the logic seems to differ between both. -2 Added some comments to remove the field and the line setting the `is_deleted` field in master as it was not used anywhere in the code (the color highlighting in the ECO is done with `<list decoration-danger="change_type=='remove'" ...>`) Upgrade PR: https://github.com/odoo/upgrade/pull/9076 ticket #5180122 Forward-Port-Of: odoo/enterprise#101366
This update fixes a technical issue where the AI action feature would generate tracebacks when the prompt field was left blank. The fix skips parsing the prompt when empty, ensuring smoother AI action execution. Additionally, the AI system now anticipates scenarios where it needs information, preventing it from requesting further user input.
Original PR description
Prior to this commit, when the AI action prompt was left empty, we would get a traceback when that AI action was executed. The traceback would occurs because the prompt is an HTML field with the…
Prior to this commit, when the AI action prompt was left empty, we would get a traceback when that AI action was executed. The traceback would occurs because the prompt is an HTML field with the field selector plugin, which means that it requires parsing before it's sent to the LLM. There was no check during parsing whether the field is empty or not and thus a traceback would occur during processing. In this commit we added a check for whether the prompt field is empty or not and if it is, we skip parsing altogether. We still call the LLM but without the final-prompt. The pre-prompt with contextual information is still sent thus the LLM can still perform the action if it's simple enough. Also, if the AI server action prompt is ambiguous and the LLM "feels" like it needs additional input to complete its task, it might respond with an additional query to the user instead of calling one of its available tools. Thus, in this commit, we add an explicit instruction to the AI Server action pre-prompt which should convey to the LLM that it will not be able to get any additional input from the user and it should assume that any important information for performing its task will be hardcoded in its available tools. Task-5379758 Forward-Port-Of: odoo/enterprise#102441
This update corrects an issue in the Belgian payroll calculations (l10n_be_hr_payroll) related to the deferral of leaves and handling version updates during the month. The fix ensures more accurate PFA (Pension Funds Account) computations, improving payroll reliability and compliance. This impacts the accurate calculation of employee benefits.
Original PR description
Fix the PFA computations: - Fix number of leaves to defer to next months - Deal with change of version in middle of the month Forward-Port-Of: odoo/enterprise#102448
This update fixes an issue where job offer emails didn't include the employee's name in the subject line. Now, emails will include the employee's name, making them more personalized and easier to identify. This improves communication and clarity for both HR and the new hire.
Original PR description
**Steps to reproduce:** - Go to Employees app and select any employee - Press "Offers" smart button - Create a new job offer and send it by email **Issue:** The employee name is not populated in the email subject. Task: 5407028
This update streamlines the Website Generator by automatically installing it alongside the Website module, resolving issues with cron activation and improving the user experience. It also cleans up unused code and ensures proper website configuration flow, enhancing the overall stability and functionality of the website import process.
Original PR description
Some fixes and changes before the freeze of 19.1 Make the website_generator auto-install. Move generator specific code from website_enterprise to website_generator as a result of the autoinstall. Fix CRON activation with no records bug. Remove unusued actions in the JS component.
This update allows employees to modify their own overtime attendance records by enabling them to act as their own approvers. Previously, permission issues prevented them from making these changes, leading to inaccurate records. This fix ensures employees can accurately update their attendance information.
Original PR description
Employees set as themselves as approvers couldn't modify their attendances due to permission issues with other models. task-5427553 Forward-Port-Of: odoo/enterprise#102415
This update resolves an issue where payroll modules (l10n_xx_hr_*) were unnecessarily dependent on country information. Removing country dependencies from related modules like l10n_us and l10n_fr ensures a cleaner and more efficient system. This change improves the stability and maintainability of the payroll functionality.
Original PR description
This commit ensures that the dependencies of l10n_xx_hr_* modules don't include countries in the manifest. Countries were removed from l10n_us_hr_payroll, l10n_us_hr_payroll_adp, and l10n_fr_hr_payroll_account since l10n_us and l10n_fr have countries declared in their manifests. task-5408245
This update adjusts the automated tests to align with recent changes to how product prices are managed within Odoo. Specifically, the removal of a previous pricing method has been addressed, ensuring the tests accurately reflect the current system. This ensures consistent and reliable pricing calculations.
Original PR description
**Purpose:** Adapt the tests to reflect the changes made to the product.product price field and the removal of its inverse method. Task-5207469
This update adjusts where the recording policy settings are stored within the Odoo system. Previously, these settings were located within the VoIP module itself; now, they're correctly placed in the dedicated voip.config file. This change ensures consistent and accurate recording behavior for VoIP calls.
Original PR description
After https://github.com/odoo/enterprise/commit/8705dfc626fabf9a1ef469a07f8ef85cf838c88d, recordingPolicy is now in voip.config instead of voip
This update resolves an issue where users couldn't adjust prices in the POS system when using the Swedish blackbox. The change allows price control functionality, aligning with requirements for the Swedish market, which differs from the Belgian blackbox implementation. This ensures accurate pricing for Swedish POS transactions.
Original PR description
Before this commit, user couldn't control the price in the POS if using the swedish blackbox. After this commit, user can control the price. It's not clear why the behavior at integration was set to this but it appears that it's not mandatory for swedish blackbox unlike the belgian one. opw-5253401 Forward-Port-Of: odoo/enterprise#101797 Forward-Port-Of: odoo/enterprise#100984
This update fixes a bug in the Mexican Point of Sale (POS) localization that prevented accurate invoice generation after refunds with global discounts. The fix now ensures refund amounts don't exceed the original order total, resolving invoice errors and improving data integrity. This change is specific to the Mexican localization.
Original PR description
When refunding an order that originally had a global discount, if you didn't refund the discount, the refund total amount would exceed the original order total. This would cause issues when trying to…
When refunding an order that originally had a global discount, if you didn't refund the discount, the refund total amount would exceed the original order total. This would cause issues when trying to generate a global invoice for the mexican localization. Steps to reproduce: ------------------- * Activate the global discount option in any PoS * Open PoS and make a sale with a global discount * Refund the sale without including the discount * Go to the backend * Go to the order list and select the 2 orders you made * Now try to create a global invoice > Observation: The global invoice is in error because the negative lines cannot be distributed correctly. Why the fix: ------------ To avoid this issue with the global invoice we simply prevent the user to generate a refund with a greater amount than the original order. We only apply this limit to the mexican localization because it's the only module that is affected by this issue. Other localizations can still refund without restrictions even if this work flow does not really make sense. opw-4899501 Forward-Port-Of: odoo/enterprise#101752 Forward-Port-Of: odoo/enterprise#93101
This update fixes an issue where clicking on activity counters in the systray didn't correctly filter documents. The change ensures that users only see documents with relevant pending activities, improving the user experience and data accuracy. The 'My Activities' filter has been intentionally hidden to align with standard Odoo behavior.
Original PR description
Clicking on activity counters (Late, Today, Future) in the systray relies on specific "search_default" keys to filter the target model's view. Previously, these specific activity filters were missing from the document search view or had the wrong name, causing the systray to fail to filter the documents correctly when redirected. This resulted in the user seeing all documents instead of only those with the relevant pending activities. Note: the 'My Activities' filter is set to invisible, to align with standard odoo behaviour. Task-5427921 Forward-Port-Of: odoo/enterprise#102509
This update corrects a test related to exporting accounting data for Swedish businesses. The accounts have been properly separated to align with Swedish fiscal regulations, ensuring accurate reporting. This change improves the reliability of the export process for our Swedish customers.
Original PR description
The accounts have been separated between goods and services for the fiscal positions to work. Fix the test of an export of Sweden accounting task-5365658 Forward-Port-Of: odoo/enterprise#101722
This update resolves a bug where field syncs would disappear after inserting a new row in a Quote calculator spreadsheet. The fix ensures that field syncs are correctly maintained when rows are added, preventing data inconsistencies. This improves the reliability of spreadsheet-based sales calculations.
Original PR description
Steps to reproduce: - create a Quote calculator spreadsheet - add a field sync on A1 - autofill it down on a few cells - select row B - right click and "Insert row above" => some field syncs disapeared Forward-Port-Of: odoo/enterprise#101367 Forward-Port-Of: odoo/enterprise#101066
This update fixes an error in the VAT return reporting process for Belgium. Previously, the system incorrectly set a flag to True, even for periods outside the year-end. This change ensures the flag is only set to True when appropriate, improving the accuracy of VAT reports and preventing potential reporting issues.
Original PR description
When the client_nihil field was hidden from the wizard, its computation always set it to True. This was wrong : this field can only be True in the XML when in the last period of the year, so when should_display_client_nihil is True as well. In every other cases, it needs to be False. opw-5184056 Forward-Port-Of: odoo/enterprise#102454
Features or functions removed from Odoo
This update removes outdated and unused code from the spreadsheet dashboard documents module. This cleanup improves the stability and maintainability of the system, ensuring efficient operation. The change was triggered by a previous update and doesn't impact current functionality.
Original PR description
These actions are no longer used since 0b4e8185698e263371916d63f26067fafa1628eb
This change removes a redundant method for closing AI chats within the Odoo Enterprise platform. The removal was identified during a routine review of sudo calls, ensuring code cleanliness and efficiency. This update has no impact on functionality.
Original PR description
There was an unused method for closing ai chats in `ai_agent.py`. Caught it while reviewing our sudo calls. Removed it. The hash of the commit which made the removed method redundant is below: `c454e75686cfdfe452292525884e65b7232b8ce1` Task-5180530
Code cleanup and technical improvements
To align with the removal of IoT Box support in the community version, we've consolidated all related functionality into the Enterprise module. This ensures that future IoT Box integrations and support are handled exclusively within the Enterprise offering, streamlining our product development efforts.
Original PR description
As we decided to remove support for IoT Boxes in community, we have to move all community-IoT logic to Enterprise. This commit moves everything related to IoT from `point_of_sale` to `pos_iot`. Community PR: odoo/odoo#219256 Task: 4394403
This update removes the outdated 'company_type' field from the contact model, streamlining the way we identify companies and individuals. The system now automatically determines if a contact is a company based on factors like VAT and identification types, tailored for each country's specific requirements. This simplifies the contact data structure and improves overall system efficiency.
Original PR description
This PR removes the 'company_type' field, which was previously used to distinguish between 'Person' and 'Company' contacts. The goal is to simplify the contact form and model by eliminating this distinction, as part of an effort to streamline and simplify the contact information structure. This change is in line with the broader initiative to remove legacy fields and make the model more straightforward as possible. is_company becomes a computed stored field, allowing each l10n to specify how a company is defined in a specific country. By default we will now rely on VAT and commercial entity to compute `is_company`. --- `l10n_br*` : Now considers a partner a company if their identification type is CNPJ --- `l10n_co*` : Now considers a partner a company if their identification type is RUT --- `l10n_*` : general : removed `is_company` / `company_type` from demo/tests Task-4714892
This update streamlines the customer display functionality by removing specialized code for IoT devices. Now, the display operates using the same standard mechanism as other devices, reducing complexity and maintenance needs. This change improves efficiency and reduces potential technical issues.
Original PR description
Before this commit, when the customer display was used normally, the data was sent via the websocket to any connected clients. When it was used on the IoT box however, a different system using IoT actions was used to update the display. This commit removes the special logic for the IoT case, instead just opening using the same mechanism as any other device. The display still works the same as before, but less requests are needed and there is less code to maintain.
This update simplifies the way documents are searched within Odoo Enterprise by removing a complex and unnecessary search operator. This change improves search performance and stability while addressing a technical issue related to the previous implementation. The update also aligns with best practices for document organization.
Original PR description
`child_of` `char` is weird, fragile, and not necessary. Note that we discourage the use of `user_root` for anything but searching. The compute method is only implemented to not break `filtered_domain` and should likely not be used to add the field in a view. Task-5207995