Daily updates from Odoo
Friday, June 19, 2026
43 changes · master
New functionality added to Odoo
This update adds the ability to track equipment used during service shifts, including serial numbers and a history of interventions. This improves accountability and traceability for service technicians and allows for better management of valuable assets. The changes integrate equipment data with shift scheduling and lot tracking within the Odoo stock module.
Original PR description
- Create a `Equipment` option that enables lots & serial numbers - Create an `Equipment` page in the shift form view - Create a `Shifts` stat button in the lots form view - Activate lots from stock settings when setting equipments - Prefill the `lot_ids` with the customer and its descendant lots when picking a customer for the shift --- task-5184419
Enhancements to existing features
This update significantly improves the user experience of the sign request control panel by redesigning the interface and modernizing the underlying technology. The changes include a cleaner, more intuitive design, improved responsiveness, and a more efficient architecture for managing sign requests, resulting in a better user experience and streamlined workflow.
Original PR description
### Context The previous signer status header in the sign app relied on static QWeb injected from the backend and legacy DOM manipulation (jQuery/Vanilla JS) to handle state changes like "Resend"…
### Context The previous signer status header in the sign app relied on static QWeb injected from the backend and legacy DOM manipulation (jQuery/Vanilla JS) to handle state changes like "Resend" buttons. Additionally, the horizontal layout consumed too much screen space for documents with multiple signers, and users lacked quick visual context of the document's template tags. ### Summary of Changes This PR completely modernizes the Sign Request Control Panel header, moving it to a pure OWL architecture while vastly improving the UI/UX. 1. Architectural Refactoring (Legacy JS to OWL) Extracted the signer status wrapper into a modern, reusable OWL public component (SignerStatusBadge) that works flawlessly in both the backend and the portal. Ripped out fragile querySelector DOM manipulation for the "Resend" buttons. Button state (e.g., swapping a paper-plane icon for a success checkmark upon clicking) is now fully managed via reactive OWL state and clean RPC calls. 2. UI/UX Redesign Redesigned the signer list into a compact, native Odoo <Dropdown> when multiple signers are present, saving valuable horizontal space. Replaced bulky text buttons with clean, semantic Bootstrap/FontAwesome icons (check/clock/cross for status, paper-plane for actions) for a more modern SaaS feel. 3. Added Template Context Reused the existing SignTemplateHeaderTags component to display the original template's tags directly in the request control panel (in read-only mode). It gracefully hides itself if no tags or template exist. Task: 6109365
This update enhances Odoo's payment processing by tailoring it to the specific requirements of our key delivery partners like Shiprocket and Ups. This change allows for more accurate and reliable payments, streamlining the integration with these important services and improving overall transaction management. It’s a crucial step in supporting our growing delivery network.
Original PR description
See also: - https://github.com/odoo/odoo/pull/258854 - https://github.com/odoo/documentation/pull/18527
This update correctly classifies the Company Executive's meal voucher as a benefit, aligning with payroll best practices. Previously, it was treated as a salary input, which has now been corrected. This change ensures accurate reporting and compliance.
Original PR description
The meal voucher for the Company Executive is a salary input and should be a benefit. Task: 6303114
This update allows Field Service technicians to directly include subscription products with 'Accept One-Time' enabled within the Field Service product catalog during on-site visits. Previously, these subscriptions required a separate 'Extra Quotation' process. This streamlines the sales process and improves technician efficiency.
Original PR description
This commit makes subscription products with the "Accept One-Time" option enabled visible in the Field Service product catalog, so technicians can add them as one-time sales during on-site interventions without going through the Extra Quotation flow. task-5401135
This update enhances the task planning process within the Gantt view by adding a helper that prevents empty dialogs when creating new tasks. This improves the user experience and reduces potential confusion for users adding tasks from the Gantt chart.
Original PR description
This commit adds a custom no-content helper to the dialog opened when planning tasks from the Gantt view. task-3613715
This pull request simplifies the process of configuring car options for employees within the salary offer and employee view. The changes focus on improving the user experience, making it easier for HR to manage car-related benefits and for employees to select their preferred vehicle options. This enhances efficiency and clarity in the contract creation process.
Original PR description
-Introducing some UX changes in salary configurator and employee's offer view to simplify car options.
This update allows users to specify quantities and units for sections within subscription orders. Changes to these values are now accurately reflected in both the generated PDF reports and the customer portal, providing more precise order information. This enhancement improves transparency and accuracy for subscription management.
Original PR description
In the community PR, users can set the quantity and unit on sections and subsections. When a user changes the quantity or unit, these values are displayed on the generated PDF and in the portal. To support this, we changed the table architecture to keep it consistent in sale_subscription. PR: https://github.com/odoo/odoo/pull/267933 Upgrade: https://github.com/odoo/upgrade/pull/10417 task-6075605
This update enhances the user experience for managing shifts within Odoo, particularly in the planning and portal sections. Key changes include direct sign-in and completion buttons on the planning kanban view, a simplified portal interface, and improved navigation for mobile users. These improvements streamline shift management workflows and boost operational efficiency.
Original PR description
_*= planning_field_service,project_forecast,planning_field_service_sale_timesheet,
sale_planning
- Add a Sign Report button to allow users to sign reports directly from planning shifts
- Improve the planning kanban UI by adding Sign In and Complete buttons,
allowing users to directly sign in and complete shifts from the kanban view
- Enhance the portal view by hiding breadcrumbs, banners, and print button in sign mode
- Add a back-to-shift navigation button in the portal
- Improve the mobile view of the shift form view
task-6218179This change addresses a requirement from Avalara, who need the LC16 code to be dotted for their city web services. Previously, Odoo automatically removed these dots. Now, the LC16 code is sent with the dots, allowing Avalara's tool to correctly sanitize the data.
Original PR description
Purpose: Avalara requires the LC116 code to be dotted for certain city webservices. Their tool will automatically sanitize the dots for cities that don't support it. Current Behavior: Odoo sanitizes the LC116 code before sending the JSON payload. Expected Behavior: The LC116 code is sent in the JSON payload with the dots. task-6304351 Forward-Port-Of: odoo/enterprise#120648
This update enhances navigation between sold assets and related customer invoices. Now, invoices linked to a sold asset are directly accessible from the asset's record, and vice versa, streamlining workflows for sales and accounting teams. This improves visibility and efficiency in managing related transactions.
Original PR description
This commit improves the navigation from a sold asset to the customer invoice and vice versa. A reference link of the sold asset is added to the chatter of each invoice used in sale. Also, all invoices used in sale are added as reference link to the asset's chatter. task-4413649 Forward-Port-Of: odoo/enterprise#118665
This update allows users to connect their personal LinkedIn accounts and schedule posts to Facebook and Instagram Stories. It also includes several UX improvements to make the social posting experience easier and more intuitive.
Original PR description
Purpose ======= This PR addresses many improvements in the social app, the two main ones being allowing to link your personal LinkedIn account and to post Facebook and Instagram "Stories". We also…
Purpose ======= This PR addresses many improvements in the social app, the two main ones being allowing to link your personal LinkedIn account and to post Facebook and Instagram "Stories". We also made a lot of UX tweaks along the way to make the social app easier to use, with a bit of much needed polish as the app has not been worked on a lot since it was introduced (about 7 years before this PR). Specifications =========== Allow the users to add their personal LinkedIn account in Social (and not only the page for which they are admin), and to post on them. During the authentication process of Social, if something went wrong we need to manually go back or enter the Odoo database URL to retry. It can be very frustrating, and so now we open the authentication URL in a new window, and when the process is done we close the window and refresh the view. Show a loading page while doing the token exchange process (which can take some time depending on the number of pages). Allow removing the accounts from the "Connect Account" modal. Show the icons of the selected medias in the calendar view. Improve the way we schedule posts. Allow the users to comment their own posts right after posting. Allow posting stories on Facebook and Instagram. Allow sorting the image when posting on a social media. Use AI to write social post. Show the chars count for all medias while typing the message. Improve the computation of the tweet length (URL must count for 23 chars and emoji for 2). In the post form view, show the media icon instead of the media name when selecting the accounts. Do some refactoring to unify the name for the social post message field. Schedule the social post with a modal, like it's done in mass-mailing. (see each individual commits for more details) Task-5491124
Resolved issues and error corrections
This update resolves an issue where the car simulation information wasn't appearing correctly for Belgian employees with car orders. The fix ensures that car details and the simulation button are displayed properly by addressing a race condition in the salary calculation process. This improves the accuracy of salary configurations for employees with vehicles.
Original PR description
- Step to reproduce: open the salary configurator for a belgian employee with only a car to order linked to its version. Car info and simulation button are not appearing and the page reactivity is…
- Step to reproduce: open the salary configurator for a belgian employee with only a car to order linked to its version. Car info and simulation button are not appearing and the page reactivity is broken
- Cause:
- Broken page reactivity is due to a promise that never resolve in willStart super call because of race condition caused by overlapping calls to a debounced function
- Car model description is computed and displayed only when a new value is passed
- Simulation button is rendered only on select value change
- Solution:
- Execute `updateGross()` and `setUpBenefits()` sequentially in parent willStart to prevent overlapping salary recomputations during startup
- Implementing a condition that handle the case of the new car value being already set in the description computation function
- Triggering the new car change function in willStart so that the simulation button is rendered on page load
Task: 6241194
Forward-Port-Of: odoo/enterprise#120614
Forward-Port-Of: odoo/enterprise#118647This update resolves an issue preventing users with Sales access from inserting data into Quotation templates through the spreadsheet management feature. The change adds a setting to ensure the necessary permissions are granted, now enabling seamless data import.
Original PR description
Current behavior before PR: - The `can_insert_in_spreadsheet` session flag was not set by the spreadsheet_sale_management module. - Users with proper Sale access rights still could not insert into Quotation templates. Desired behavior after PR is merged: - Added logic to set `can_insert_in_spreadsheet` when the module is installed and the user has the required access rights. Task: [5960761](https://www.odoo.com/odoo/project/2328/tasks/5960761) Forward-Port-Of: odoo/enterprise#120903 Forward-Port-Of: odoo/enterprise#108674
This update fixes a visual glitch in the planning module where resource assignments would unexpectedly change when a form was refreshed. The change prevents the system from automatically assigning resources, ensuring users always see and manage their assigned resources as intended. This improves the user experience and data consistency.
Original PR description
Added a guard check in `default_get` to ensure the current user is only assigned when `resource_ids` is explicitly requested in the `fields` parameter. This prevents the web client from receiving unsolicited defaults and visually overwriting the explicitly saved resource when the browser is refreshed. Task: 6313650
This update fixes an issue where the Turkish e-Ledger CSV export was incorrectly using the trade registry number instead of the branch number (SUBENO). The change reads the correct branch number from the 'additional_identifiers' field, ensuring accurate reporting for Turkish businesses. This improves the reliability of financial data exports.
Original PR description
## Description of the issue/feature this PR addresses: The `BranchNumber` column in the Turkish e-Ledger CSV export was reading from `company.company_registry` (trade registry number) instead of the actual branch number. ## Current behavior before PR: `BranchNumber` is populated from `company.company_registry`, which is the trade registry number — not the branch number. ## Desired behavior after PR is merged: `BranchNumber` reads `TR_SUBE` from `additional_identifiers` on the company partner, which holds the branch number (SUBENO) following the migration from the old tag system. Community: https://github.com/odoo/odoo/pull/262960 task-5175991 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts the automated tests within the Odoo Enterprise system to account for a recent change in how purchase order links are presented as warnings during autocomplete. Previously, these warnings were interfering with the test execution process. This change ensures the tests accurately reflect the new functionality and provides a more reliable testing environment.
Original PR description
Introduced some `mute_logger` as feedback of the PO link to a bill is now given from the autocomplete through a warning, which would disrupt the tests. Task-6172792
This update resolves a potential conflict in how product categories are filtered within the Odoo Enterprise system. The change updates an internal XPath expression to ensure smoother operation of the POS category search. This improves the reliability of product filtering for point-of-sale transactions.
Original PR description
In this commit: ================ - Updated the XPath from `pos_categ_ids` to `group_by_pos_categ_ids` to avoid conflicts with the POS category search filter mechanism. Task-6185999 Related community PR: odoo/odoo#263208
This update corrects a bug where the timesheet timer was incorrectly adding extra seconds, leading to inaccurate overtime calculations and marking workdays as exceeding their limits. The fix ensures that the user-entered time is accurately saved, preventing the system from misinterpreting the duration and displaying incorrect overtime status.
Original PR description
Steps to reproduce --- 1. Set an employee to work 8 hours per day. 2. Open the timesheet timer in the systray, type a duration like 8:00 and save. 3. Open the My Timesheets grid for that day. The day…
Steps to reproduce --- 1. Set an employee to work 8 hours per day. 2. Open the timesheet timer in the systray, type a duration like 8:00 and save. 3. Open the My Timesheets grid for that day. The day is marked as overtime (yellow) even though only 8 hours were logged. Issue --- While the entry is open the timer keeps running and, every second, writes the elapsed time into unit_amount down to the second. https://github.com/odoo/enterprise/blob/a3c9295cf28b47f43233ac6a9f4106810842e37a/timesheet_grid/static/src/components/timesheet_timer_inline_form/timesheet_timer_inline_form.js#L89-L102 When the duration is set by hand, the save skips the usual rounding and keeps the value as it is. https://github.com/odoo/enterprise/blob/a3c9295cf28b47f43233ac6a9f4106810842e37a/timesheet_grid/static/src/components/timesheet_timer_inline_form/timesheet_timer_inline_form.js#L120-L132 So the clean 8:00 the user typed gets a few extra seconds from the next timer tick (8h 1s, stored as 8.000277) and is saved with them. The seconds are hidden in the HH:MM display but are enough to push the day above its working hours, so the grid paints it as overtime. This timer form is new in saas-19.2 (c3dac6ccdb5), which is why earlier versions are not affected. The fix ignores timer ticks once the duration has been set by hand, so the typed value is kept. opw-6180676 --- Forward-Port-Of: odoo/enterprise#120931 Forward-Port-Of: odoo/enterprise#120601
This update ensures the checksum for the EU IoT Scale Certification module aligns with recent changes in the core Odoo system. This adjustment is a necessary step to maintain compatibility and stability following an internal Odoo update. It’s a routine maintenance task.
Original PR description
This commit simply adjusts the checksum to align with the changes in odoo/odoo#269211. task-6273412 Forward-Port-Of: odoo/enterprise#120954
This update prevents the Timesheet Assistant from incorrectly matching events to projects or tasks with disabled timesheets. The change updates backend filtering and frontend data handling to ensure only active projects and tasks are considered, improving the accuracy of the assistant's recommendations. This resolves a potential issue where users could create confusing or inaccurate timesheet suggestions.
Original PR description
Currently, the Timesheet Assistant (ActivityWatch) can match events to projects or tasks that have timesheets disabled, either via Custom Rules or Historical Memory.
This commit resolves the issue across the entire pipeline:
- Backend: Updated `resolve_assistant_models_targets` to efficiently filter out records where `allow_timesheets` is False using a search domain.
- Frontend: Updated the `loadData` JS pipeline to intercept and wipe any project/task IDs rejected by the backend, ensuring they cleanly fall back into a single "Unmatched" group.
- Views: Added the `[('allow_timesheets', '=', True)]` domain to `project_id` and `task_id` fields in `aw.rule` views to prevent users from creating invalid rules.
Task: 6267401
Forward-Port-Of: odoo/enterprise#120490
Forward-Port-Of: odoo/enterprise#119403This update ensures the 'add-documents composer' dialog opens correctly within the PIP window when triggered from there. Previously, the dialog opened in the main window, causing a less intuitive user experience. This change improves usability and consistency within the Odoo interface.
Original PR description
**Current behavior before PR:** The add-documents composer action dialog opens in the main window when triggered from the PIP window because the required context is not provided. **Desired behavior after PR is merged:** The add-documents composer action dialog opens in the PIP window when triggered from the PIP window by providing the proper context to the dialog. task-[5149597](https://www.odoo.com/odoo/project/1519/tasks/5149597) Community: https://github.com/odoo/odoo/pull/264014
This update fixes an issue where helpdesk tickets automatically assigned to teams would fail due to a lack of access to employee time-off information. The system now checks employee time-off status using elevated permissions, ensuring accurate auto-assignment decisions. This prevents crashes and improves the reliability of the helpdesk ticketing process.
Original PR description
Picking the next assignee reads hr.leave to skip members who are off. A plain helpdesk user has no access to Time Off, so creating a ticket on an auto-assigned team crashed. Whom to assign is a system decision, so read the leaves in sudo. The bug was highlighted after https://github.com/odoo/odoo/pull/166359 which made the query crash rather than silently skipping unreadable. Fixes https://runbot.odoo.com/odoo/error/940352
This update resolves an issue where the Odoo softphone would throw errors when receiving calls from numbers not linked to a contact. The fix ensures that creating tasks from these calls works as expected, and the 'Tasks' button is no longer displayed when a call lacks a contact.
Original PR description
**Problem:** Two linked errors occur in the Phone (VoIP) softphone when a call is made to or received from a number that is not linked to any contact. **Steps to reproduce:** 1. Receive or make a…
**Problem:** Two linked errors occur in the Phone (VoIP) softphone when a call is made to or received from a number that is not linked to any contact. **Steps to reproduce:** 1. Receive or make a call from the softphone using a phone number that is not linked to any existing contact. 2. Open the call's actions and click "Create" > "Task". -> A client error appears and the task is not created. 3. On a voip.call form whose Contact has been removed, click the "Tasks" smart button. -> A server error is raised. **Current behavior:** Step 2 raises "Cannot read properties of undefined (reading 'id')" and step 3 raises "ValueError: not enough values to unpack (expected 1, got 0)". **Expected behavior:** Creating a task from a contactless call should open the task form without a default contact, and the Tasks smart button should not be reachable when the call has no contact. **Cause of the issue:** Both code paths assume a call always has a linked partner. In `action_list_patch.js`, `getCreateTaskAction` only checks `shouldShowTaskButton` in its predicate but reads `this.contact.id` in its `onClick`; for a contactless call `this.contact` is undefined. In `voip_call.py`, `action_view_tasks` delegates to `self.partner_id.action_view_tasks()`, whose `ensure_one()` fails on the empty partner recordset. Unlike the softphone "view tasks" action, which is gated by `this.contact?.task_count`, the form stat button had no visibility guard. **Fix:** The create-task action now mirrors the existing contact and lead actions, which already build their context conditionally on `this.contact`, so a contactless call simply opens the task form with no default partner. The Tasks stat button is hidden when there are no tasks, matching the softphone predicate and ensuring the partner-less code path is never reached. opw-6246641 Forward-Port-Of: odoo/enterprise#119412
This update resolves a technical issue that caused tracebacks when printing invoices through IoT devices. The fix corrects how printer information is retrieved, preventing errors and ensuring invoices print correctly. Additionally, the update includes a security enhancement to redact sensitive data from logged websocket messages.
Original PR description
When printing invoices from PoS, using an IoT device, we get a traceback, as the orm call to read device infos gets the whole selected printers params (duplex, don't ask me again, printer ids) instead of the printer ids. Issue was introduced in odoo/enterprise#113128 We also take the opportunity to redact documents from logged websocket messages. task-6307690 opw-6284287 Forward-Port-Of: odoo/enterprise#120742
A visual glitch was causing the Timesheets Configuration menu to appear twice in the application. This update corrects a technical issue where the menu was incorrectly listed, ensuring a cleaner and more consistent user experience. This change improves the usability of the Timesheets module.
Original PR description
Steps to reproduce the issue: 1- Log in as a user with Timesheets Administrator access rights. 2- Go to Timesheets → Configuration. 3- Disable Timesheets Assistant (BETA) and save. 4- Refresh the page. The Configuration menu is displayed twice. After (Expected): The Configuration menu should be displayed only once in the Timesheets app. solution: Adjusted the config menu blacklisting condition to hide the unwanted menu --- task-6302568 Forward-Port-Of: odoo/enterprise#120609
This update corrects a bug where selection fields within the Odoo Studio were incorrectly flagged as required. The fix ensures that selection fields are only required when explicitly marked as such, improving usability and preventing unintended data restrictions. This resolves an issue impacting how users design forms and reports.
Original PR description
Before: any studio property using a SelectMenu (selection) component, without a `required: false` in the childProps, was implicitly required because the check used `required !== false`, which evaluates `undefined` as truthy. After: `required` is only applied when explicitly set to `true`. task-5226503 Forward-Port-Of: odoo/enterprise#120782 Forward-Port-Of: odoo/enterprise#120037
A recent issue causing the Documents view to crash when navigating from an activity has been resolved. This was due to a timing problem with how different parts of the system handled data updates. This fix ensures the Documents view functions reliably for all users.
Original PR description
### Description When navigating to Documents via an activity, the list view crashes with a TypeError on setting 'COMPANY'. ### Root Cause An asynchronous race condition occurs between parent and child `onWillStart` hooks. The child finishes an await before the parent's hook runs `expandDefaultValue()`. Thus, `this.state.expanded[sectionId]` is undefined when the child tries to write to its nested keys. ### Solution Await `sectionsPromise` first in the child hook. opw-6276003 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#120713 Forward-Port-Of: odoo/enterprise#119634
This update fixes a critical crash related to AvaTax connections and enhances the user experience. It now clearly indicates when a connection isn't set up correctly, preventing confusion and ensuring accurate tax calculations. Additionally, the connection test results are now more organized and version-aware.
Original PR description
Several related fixes around the AvaTax connection settings: - Surface an unconnected "Avalara Included" setup instead of silently using Direct credentials. Filling Direct credentials, switching to…
Several related fixes around the AvaTax connection settings: - Surface an unconnected "Avalara Included" setup instead of silently using Direct credentials. Filling Direct credentials, switching to Included, then not completing the connection (link/migrate/create) left the company looking configured through those leftover credentials: the user believed they were on Included while a request either silently used Direct or crashed on the unset IAP proxy user (ensure_one). Direct credentials now only count in Direct mode, so the not-connected state raises the usual RedirectWarning pointing to the configuration. - Group nexus locations by country in the connection test result. The list dumped every nexus row flat, so countries appeared alongside their own regions and each jurisdiction repeated once per tax type (e.g. "California" dozens of times). Group by country, drop the country-wide rows, dedupe and sort, with a short summary line. - Make the "Help me choose" documentation link version-aware via the documentation_link widget instead of the /latest/ alias, which redirects to the latest major release (19.0) where the AvaTax docs don't exist. task-6295272 Forward-Port-Of: odoo/enterprise#120761
This update resolves an error that occurred when generating payment reports for Swiss companies. The issue arose when the required module ('hr_payroll_account_iso20022') wasn't installed, leading to a system error. Now, the system correctly handles the report generation process regardless of this module's presence.
Original PR description
*=l10n_ch_hr_payroll,hr_payroll_account_iso20022 When clicking the create payment report button on a payslip for a Swiss company, a traceback occurs if the ``hr_payroll_account_iso20022`` module is…
*=l10n_ch_hr_payroll,hr_payroll_account_iso20022 When clicking the create payment report button on a payslip for a Swiss company, a traceback occurs if the ``hr_payroll_account_iso20022`` module is not installed. Steps to reproduce the error: - Install ``l10n_ch_hr_payroll`` module - Switch to CH Company - Create an Employee and running contract for it - Go to Payroll > Payslip > All payslips > Create a new payslip > Set the employee > Confirm > Create payment report Traceback: ```py ValueError: Wrong value for hr.payroll.payment.report.wizard.export_format: 'iso20022_ch' ``` https://github.com/odoo/enterprise/blob/7792926504a823590fbbe574a96994002a92fc17/l10n_ch_hr_payroll/models/hr_payslip.py#L383 https://github.com/odoo/enterprise/blob/7792926504a823590fbbe574a96994002a92fc17/l10n_ch_hr_payroll/models/hr_payslip_run.py#L13 Here, ``iso20022_ch`` is passed as ``export_format``, However, ``iso20022_ch`` is added to the selection field in the ``hr_payroll_account_iso20022`` module at [1]. When that module is not installed, the selection value does not exist, leading to the above error. [1]: https://github.com/odoo/enterprise/blob/7792926504a823590fbbe574a96994002a92fc17/hr_payroll_account_iso20022/wizard/hr_payroll_payment_report_wizard.py#L11 sentry-7391832811 Forward-Port-Of: odoo/enterprise#120825 Forward-Port-Of: odoo/enterprise#113277
This update resolves an error that occurred when refreshing Facebook statistics for users. The issue stemmed from a system error where a failed request returned 'None', causing a calculation to fail. This fix ensures that the statistics refresh process is more robust and reliable, preventing disruptions to user data.
Original PR description
Traceback: ```py TypeError: unsupported operand type(s) for -: 'NoneType' and 'int' ``` Cause: https://github.com/odoo/enterprise/blob/f6c5ce7de737794a675d1b2485dd5c1a9ed0cb17/social_facebook/models/social_account.py#L92-L108 ``meta_run_request_batch()`` may return ``None`` for failed requests. In that case, ``page_global_stats`` is ``None``, leading to ``fan_count`` being ``None``. The statistics computation then calls ``_compute_trend()`` with a ``None`` value, causing the above traceback. https://github.com/odoo/enterprise/blob/f6c5ce7de737794a675d1b2485dd5c1a9ed0cb17/social/models/social_account.py#L143-L144 sentry-7545763666 Forward-Port-Of: odoo/enterprise#120733
This update resolves an issue where the EC List XML export was incorrectly identifying invoices with the same VAT number as separate entities, leading to rejection by tax authorities. The fix ensures that invoices with identical VAT numbers are treated as a single partner, complying with Belgian tax regulations. This prevents errors and ensures accurate EC List reporting.
Original PR description
With l10n_be: - Create two contacts with the same VAT - Create an invoice for each that is EC List compatible - Generate the return and export the EC List XML In the generated xml the two partners with the same vat are treated as different partners, which causes a rejection by the tax agency. opw-6109585 Forward-Port-Of: odoo/enterprise#120305 Forward-Port-Of: odoo/enterprise#117702
This update resolves an issue where invoices for Persona Natura customers in Colombia were incorrectly formatted for export to the DIAN tax authority. The change ensures the correct XML structure is generated, addressing a mismatch in account identification. This prevents export errors and ensures compliance with Colombian tax regulations.
Original PR description
Issue: Colombian partner being Persona Natura are misinterpreted as Person Juridica. It raises issue while exporting XMLs for dian. Steps to reproduce: - In a Colombian company - Create a Customer with NIT and "Obligaciones y Responsabilidades" to "R-99-PN" - Create an invoice - Send the invoice Current behavior: - node <cbc:AdditionalAccountID> is set to 1 and node PartyIdentification is missing Expected behavior: - node <cbc:AdditionalAccountID> is set to 2 and there is a PartyIdentification node Cause: Colombian partners having a NIT have is_company to True. However, Persona Natura have NIT but aren't companies. opw-6206308 Forward-Port-Of: odoo/enterprise#118193
This update resolves an error that prevented users from opening the Gantt view for work orders. The issue stemmed from how the system handled resources without calendars, leading to a system crash. The fix ensures the system gracefully handles these resources, preventing the error and allowing users to access the Gantt view.
Original PR description
Currently, an error occurs when opening the gantt view of work orders. **Steps to Reproduce:** - Install `mrp_workorder` with demo data. - Go to `Settings` > `Technical` > `Resource` > `Resources`. -…
Currently, an error occurs when opening the gantt view of work orders. **Steps to Reproduce:** - Install `mrp_workorder` with demo data. - Go to `Settings` > `Technical` > `Resource` > `Resources`. - Open the `Assembly 1` resource and remove its `working time`. - Go to `Manufacturing` > `Operations` > `Work Orders`. - Switch to the `Gantt view`. `KeyError: 22` when the user opens the Gantt view, the system checks the unavailability of work centers and employees based on their resource calendars. While computing unavailable intervals for resources [1], resources without a calendar are flexible resources. If no leave interval exists within the specified start and end range that matches the domain, the resource is not included in the result [2]. when updating the unavailable intervals dictionary [3], the resource is missing. As a result, when it later tries to access the unavailable intervals for that resource, it raises an error [4]. This commit prevents the error by safely handling resources that are not present in the unavailable intervals dictionary by using an empty list instead. [1]: https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_resource.py#L186 [2]: https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_calendar.py#L532-L536 [3]:https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_resource.py#L187 [4] https://github.com/odoo/enterprise/blob/47f2e9e88fa0bbb8852fe7734c6bece4dca8b9d0/mrp_workorder/models/mrp_workorder.py#L692-L694 sentry-7525704808 Forward-Port-Of: odoo/enterprise#119385
This update resolves an issue where the barcode inventory count feature would fail when using archived units of measure. The fix ensures that archived UOMs are correctly included in the inventory count cache, allowing accurate counts to be performed. This improves the reliability of physical inventory processes.
Original PR description
### Steps to reproduce: - In the settings enable: "Units of Measure & Packagings", "Storage Locations" - Create a product in units and register 1 unit in stock - Inventory > Operations > Adjustments…
### Steps to reproduce: - In the settings enable: "Units of Measure & Packagings", "Storage Locations" - Create a product in units and register 1 unit in stock - Inventory > Operations > Adjustments > Physical Inventory - Select your line and request a count > Set Current Value - Inventory > Configurations > units of measures > UOM categories - Select unit and archive it - Go to the barcode app > Click Count inventory ### > Owl error: Uncaught promise ### Cause of the issue: Since the uom used on the quant is archived, it is not found by the search used to fill the barcodeCache: https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/components/main.js#L209-L213 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/models/stock_quant.py#L104-L106 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/components/main.js#L229 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/models/barcode_model.js#L37-L39 However, if the uom is not present in the barcode cache the `BarcodeQautnModel` will fail to createLinesState whihc raises a missing error: https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/models/barcode_quant_model.js#L712 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/lazy_barcode_cache.js#L107-L110 opw-6250090 Forward-Port-Of: odoo/enterprise#120683 Forward-Port-Of: odoo/enterprise#118813
A recent issue was causing the Enterprise application to crash when opening articles with embedded account reports. This fix prevents a critical error related to modifying component properties during setup, ensuring stability and proper functionality of account reporting within the system. This resolves a technical problem that could impact users accessing financial reports.
Original PR description
When opening an article containing an embedded account report component, the application crashes because the `name` prop is mutated during the component `setup`, which is not allowed.
Steps to reproduce:
1. Create a new audit report
2. Open the "Journal Audit" article containing an embedded account report
=> The following exception is raised:
```
Uncaught (in promise) TypeError: setting getter-only property "name"
setup account_report.js:15
```
To fix the issue, the translation of the `name` prop is moved to `getProps`, which prepares component props before mounting. This ensures the value is already translated at instantiation time, avoids any mutation during setup, and preserves prop immutability throughout the component lifecycle.
Ref: odoo/enterprise#109962
Task-6292898
Forward-Port-Of: odoo/enterprise#120077This update fixes an issue where a specific invoice origin code was incorrectly triggering a cancellation request to Mexican tax authorities (CFDI). The change ensures that only invoices with '04' origin codes are used for down payment cancellations, aligning with Mexican regulations. This prevents unintended cancellations of down payments and improves the accuracy of CFDI processing.
Original PR description
**Steps to reproduce:** - Install Sales, Accounting and l10n_mx_edi - Switch to a Mexican company (e.g. ZAPATERIA URTADO ÑERI) - Create a SO: * Customer: [a Mexican customer] (e.g. INMOBILIARIA CVA) * Payment Way: Efectivo * Payment Policy: PUE * Product: [any product with a UNSPSC Category] * Taxes: [any] (e.g. 16%) - Confirm the SO - Create a down payment (e.g. 60%) - Confirm the down payment - Send it to CFDI - Copy the fiscal folio - Go back to SO - Create the final invoice - Set the copied fiscal folio prepend with "07|" as CFDI Origin - Confirm the invoice - Send to CFDI **Issue:** A cancellation request is sent to CFDI for the down payment. "07" origin code is used to link the invoice to a down payment. It should not cancel the down payment. It should only be done with "04" origin code used for substitution of a previous invoice. opw-6266678 Forward-Port-Of: odoo/enterprise#120757
This update resolves a requirement from Luxembourg auditors regarding the classification of partners in our SAFT reports. Specifically, it ensures that less than 30% of transactions with payable or receivable accounts have missing supplier or customer IDs, respectively. The changes update the XML reports to align with these specific reporting guidelines.
Original PR description
This PR is one of many triggered by responses from Luxembourg auditors. See PR #113316 for a full list of these PRs. As described in PR #117799, the \CustomerID and \SupplierID elements on…
This PR is one of many triggered by responses from Luxembourg auditors. See PR #113316 for a full list of these PRs. As described in PR #117799, the \CustomerID and \SupplierID elements on \Transaction\Line elements is determined by a partner's `customer_rank` and `supplier_rank`. This is a binary designation, one or the other. The Luxembourg FAIA report requires that less than 30% of \Transaction\Line elements with payable accounts (class 6) can not have \SupplierID. The same applies for \Transaction\Line elements with receivable accounts (class 7) and the \CustomerID element. TSB clarified that any partner on an receivable or payable line should be added to the Customer list or Supplier list respectively https://github.com/odoo/enterprise/pull/100749#issuecomment-3655127511. In addition, I verified that Luxembourg's analysis of four separate FAIA files (from ticket 5427296) aligns with this expectation. <img width="1322" height="690" alt="image" src="https://github.com/user-attachments/assets/1a82f99e-5b32-4dbb-96e1-1b25bab2629b" /> This commit adds partners to the \Supplier and \Customer lists if they have any payable or receivable lines, respectively. It also picks between the \CustomerID and \SupplierID based on a line's `account_type`. This logic is applied to `account_saft` and updates the other, country-specific SAFT reports where appropriate. It also retains the previous `customer_rank` and `supplier_rank` logic as a fallback for older XML reports and for accounts other than `asset_receivable` or `liability_payable`. opw-6118024 Forward-Port-Of: odoo/enterprise#120790 Forward-Port-Of: odoo/enterprise#118714
This update resolves a technical problem preventing the 'XML Polizas (SAT)' export from working correctly for the Mexican accounting reports. The fix ensures the exported file is formatted correctly, allowing users to download the necessary financial reports. This improves the reliability of the reporting process.
Original PR description
How to reproduce it: - Install l10n_mx_reports and select Innovacion Company - Go to accounting app > reporting and Open the General Ledger report - Trigger the "XML Polizas (SAT)" export, fill in…
How to reproduce it: - Install l10n_mx_reports and select Innovacion Company - Go to accounting app > reporting and Open the General Ledger report - Trigger the "XML Polizas (SAT)" export, fill in the wizard (export type and order/process number) and click Export - A traceback is raised instead of downloading the file: TypeError: ... report_data: use BinaryValue instead of bytes This error happens because export_xml writes the generated file to the report_data field as raw bytes. After the introduction of BinaryValue, no longer accepts bytes values (unless raw field) for Binary fields and now expects a BinaryValue, causing the traceback. The write was modified on refactoring PR, but not correctly and there wasn't a test targeting the url action part so it was not flagged. This commit fixes the issue by wrapping the content in BinaryBytes (since is a BinaryValue) before assigning it to report_data and added tests covering the single and multiple period cases. task-6297731 Forward-Port-Of: odoo/enterprise#120339
This update resolves a minor issue with the marketing automation dashboard by correcting calculations for key engagement metrics. Specifically, the formulas for calculating 'engagement rate' and 'engagement rate n-1' have been adjusted to handle potential errors and ensure accurate reporting of mailing statistics. This improves the reliability of the dashboard data.
Original PR description
This commit fixes two issues:
- KPI engagement rate ('Mailing Statistics'!B16) should be =iferror((B7+B9)/B10),0)
- KPI engagement rate n-1 ('Mailing Statistics'!C16) should be =iferror((C7+C9)/C10),0)
Task: 5418449
Forward-Port-Of: odoo/enterprise#120962This update corrects a technical issue where the system was unintentionally unfolding financial lines when opening the chat interface. This change ensures a smoother and more efficient user experience, preventing potential performance impacts. The fix focuses on optimizing the chat functionality within the account accounting module.
Original PR description
Before this commit, open_chatter use the selectStatementLine function that will unfold the line. But we don't want the unfold when opening the chatter. task-6306311 Forward-Port-Of: odoo/enterprise#120847
Features or functions removed from Odoo
This update removes a redundant feature related to payment processing through payment terminals. The removal of fast payments using these terminals made a previous override unnecessary, streamlining the system. This change improves efficiency and reduces potential complexity.
Original PR description
We removed fast payments using payment terminals, making the `fastPayments` method override useless. see odoo/odoo#270240 task-6303855 Forward-Port-Of: odoo/enterprise#120766 Forward-Port-Of: odoo/enterprise#120672
Code cleanup and technical improvements
This update refines the controller for account bank statement imports, addressing previous issues caused by shared logic with the main accounting module. By using a more targeted controller and removing unnecessary code, the import process is now more reliable and efficient.
Original PR description
account_bank_statement_import_view was using the same controller used in account.move which caused some wrong behavior when some logic isn't shared between both modules, now account_bank_statement_import uses a generic controller that doesn't add unneeded behavior. As well as removing all of the account move classes from bank statement import and using generic ones or ones specific to account bank statement import. task-5892419 Forward-Port-Of: odoo/enterprise#120639 Forward-Port-Of: odoo/enterprise#117476