Daily updates from Odoo
Wednesday, November 26, 2025
20 changes · master
New functionality added to Odoo
This update introduces new functionality to support Sweden's Intrastat reporting requirements. It includes a dedicated module with deadlines for reports, custom Excel export options for data, and a wizard for managing tax submissions. This ensures businesses operating in Sweden can accurately comply with local regulations.
Original PR description
- Created the Intrastat module and defined deadlines for the Intrastat reports. - Added custom report handlers to export data in 'Excel' format. - Added a tax submission wizard. Task-5048506
Enhancements to existing features
This update enhances the user experience for appointment bookings by streamlining the information displayed and improving organization. Specifically, the system now uses a dedicated 'notes' field for client details, simplifying data entry and providing a clearer view of booking information across different views.
Original PR description
Replaced the usage of the 'description' field from the calendar event with the 'notes' field, because the description adds the organizer and participants information automatically, and we only need the client extra notes for the booking. Also added the answers field under the notes on the kanban view, gantt view and as a column in the list view. Additionally: - Remove the cog actions menu from the list and kanban views. - Reordered the information inside the kanban cards for bookings and added a section for comments. - Changed the format of the column heads for the gantt view. - Changed the columns of the list view Task-5131166
This update enables Early Media in Odoo Phone, allowing for the playback of ringback tones, error messages, and IVR prompts during call setup. This improves the user experience by providing immediate feedback and reducing call setup time. However, the system is designed to handle only one SDP at a time, limiting support for complex call scenarios.
Original PR description
This commit enables support for Early Media in Odoo Phone. ## What is Early Media? Early Media is audio or video exchanged **before** a call is officially answered. It is typically used to play…
This commit enables support for Early Media in Odoo Phone. ## What is Early Media? Early Media is audio or video exchanged **before** a call is officially answered. It is typically used to play custom ringback tones, error announcements (e.g., "The number you have dialed is busy"), or IVR prompts during the call setup phase. ## How does it work? When you make a call, Odoo Phone sends an `INVITE` request to the server with an SDP offer. Rather than simply replying with a `180 Ringing` response, the server sends back a `183 Session Progress` response containing an **SDP answer**. SIP.js detects this SDP and immediately uses it to establish the WebRTC connection. This allows a media stream to open and play audio **before the call is officially answered**. By default, SIP.js ignores SDP payloads in `183 Session Progress` responses and applies only the SDP from the first final 200 OK to ensure a single consistent WebRTC connection and prevent issues with call forking. To override this and establish media immediately upon receiving a provisional response, the `earlyMedia: true` option must be provided to the `Inviter` constructor. ## Limitations SIP.js is designed to manage a single `RTCPeerConnection` per session. It does not support managing multiple concurrent WebRTC connections to handle scenarios like call forking, where distinct endpoints might generate different early media streams. While technically possible in a browser, creating separate connections for every different SDP received is computationally expensive. It would require distinct ICE/DTLS handshakes, TURN allocations, and media pipelines for each potential stream, which would significantly degrade performance and UX (extra latency, higher CPU/bandwidth usage, and confusing or inconsistent media playback). Consequently, the system binds to the first SDP it receives. Early media is therefore supported only when the provisional SDP matches the final 200 OK SDP. **If the final answer comes from a different source (providing a different SDP), the single existing connection cannot be reused, and the session is aborted.** :warning: [Task-5232220](https://www.odoo.com/odoo/project/5778/tasks/5232220)
This update introduces a 'Reprocess' button to automatically update AI source indexes when content changes (like URLs, documents, or knowledge articles). It prevents redundant updates by tracking processed attachments, optimizing performance and resource usage. This ensures AI agents always have the most current information.
Original PR description
## Summary - Add 'Reprocess' button to enable recomputation of source indexes when URL content, document's documents, or knowledge articles are updated. - When triggered, the system checks for content changes and updates the index for all sources sharing the same attachment across agents. Prevents redundant reprocessing by tracking already processed attachment checksums within each batch operation. task-id-5153627 Forward-Port-Of: odoo/enterprise#97261
Resolved issues and error corrections
The Gantt view was incorrectly calculating unavailable time when flexible working hours were enabled. This update resolves a bug where the view randomly grayed out days, now ensuring accurate representation of employee availability. This improves the usability of the project scheduling feature.
Original PR description
To reproduce: ============= 1. Activate flexible working hours on the company calendar 2. Go to Project app -> all tasks 3. Switch to Gantt view notice that on the unassigned tasks row, two days are grayed out randomly Problem: ======== When flexible working hours is activated, the unavailability intervals are computed with an estimation: we take the total of working hours per week and we divide it by number of hours per day to get `N` days, so we estimate that from `now` to `now + N` days are working days, and the rest are non-working days. This is wrong because the working hours may not be evenly distributed over the week, and between today and tomorrow we get different unavailability intervals. Solution: ========= When flexible working hours is activated, we consider that all days are working days, so there is no unavailability interval to consider. opw-5257081 Forward-Port-Of: odoo/enterprise#100385
This update resolves an issue where the Fedex delivery method would unexpectedly crash when used with addresses in Hong Kong, specifically those with a 'Hong Kong Island' state. The fix adds a check to ensure the state code splitting process produces at least two elements, preventing a common error. This ensures reliable shipping for customers in this region.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Use Fedex as a Delivery Method 2. On the Website, select a shippable product. Confirm the cart. 3. Ship to a "Hong Kong" address, with "Hong Kong Island" as State. 4. Traceback is raised. Issue ----- Traceback is raised whenever the Fedex Delivery Method is applied to a HK address (be it shipper or receiver) Cause ----- When splitting a state code, there is no check in the `_parse_state_code` function that the result contains at least two elements. Example ----- For a "Hong Kong" address, with "Hong Kong Island" as State: ``` country_code = "HK" state_code = "HK" ``` The method tries to split `state_code` by its hyphen, which returns a single item list. Solution -------- 1. Check for the size of the post-split list before accessing the second item. opw-5257852 Forward-Port-Of: odoo/enterprise#99635
This update significantly speeds up the process of generating work entries and attendance data within the payroll system. Previously, generating data for 100 employees took 20 seconds and created 55,000 queries. Now, the same process completes in just 2 seconds with only 750 queries, resulting in a substantial performance boost.
Original PR description
speedscope before the fix: <img width="1918" height="888" alt="image" src="https://github.com/user-attachments/assets/86b3f923-6d0d-4b11-8578-749425d2ad8d" /> speedscope after the fix: <img width="1919" height="860" alt="image" src="https://github.com/user-attachments/assets/61202f6e-b96f-42b7-a7a7-3297a990aa6d" />
This update resolves an issue preventing users in the 'invoicing and banks' security group from accessing key account reports. The changes add necessary security rules, specifically for the 'group account basic' and 'tax unit' reports, ensuring these reports are available to the intended user group. This improves usability and data access for users relying on these reports.
Original PR description
Some report must be accessible by user with the invoicing and banks security group. The menu items are there but when clicking on it, an access error is thrown. This commit will add the security rules for the group account basic for horizontal group (for the partner ledger and aged receivable/payable) and the tax unit (for the tax report) opw-5218948 Forward-Port-Of: odoo/enterprise#100020
This update improves the visibility of payslip status by displaying the number of errors and warnings directly on the status bubble icon. Previously, users couldn't easily identify potential issues with their payslips. This enhancement helps HR and payroll teams quickly address and resolve problems with payslip calculations.
Original PR description
Before this pr, users couldn’t see how many errors or warnings a payslip header status_bubble. With this change, hovering over the fa-exclamation-circle icon will show the number of warnings and errors. task-5257820
This update fixes a misleading warning displayed in Odoo related to minimum wage calculations. The warning is now correctly triggered only when a contract exists and at least one wage field is below the legal minimum. This change also ensures the warning appears in the salary calculator dialog for a more consistent user experience.
Original PR description
Problem ---------- The warning is displayed depending on if the contract_date_start <= today But it should be visible only if a contract exists and one wage field is below the minimal value. This warning should also be visible in the salary calculator dialog Solution ---------- Update the compute in hr_version. Do similar compute in hr_contract_salary_offer task-5030682
This update fixes an issue where attendance durations were incorrectly calculated when employees clocked in before their scheduled start times. Now, attendance durations are automatically and accurately generated upon approval, eliminating the need for manual intervention and ensuring accurate work entry tracking.
Original PR description
Before this commit: - For an employee with a Working Schedule as the work entry source and a default overtime ruleset (which creates a specific work entry type for overtime hours), creating an…
Before this commit: - For an employee with a Working Schedule as the work entry source and a default overtime ruleset (which creates a specific work entry type for overtime hours), creating an attendance with a check-in earlier than the employee’s normal working schedule start was not handled correctly. The early portion was ignored, resulting in a wrong attendance work entry duration (e.g., 06:15 instead of 08:00). - Work entries were not created automatically when approving the attendance. The user had to click Reset to force the generation, which is not the intended workflow. After this commit: - Attendance boundaries are now correctly normalized against the employee’s Working Schedule, ensuring the full expected duration is taken into account, even when the check-in occurs before the official start time. - The overtime ruleset is applied correctly, and the generated intervals properly reflect both standard working hours and overtime hours. - Work entries are now automatically created upon approval of the attendance, removing the need for any manual Reset action. task-5082562
This update resolves an issue preventing users from marking fields as both readonly and mandatory within sign requests. The fix adjusts how the Sign app handles strikethrough and multiline fields, ensuring sign requests are now validated correctly regardless of these settings. This improves usability and prevents sign requests from failing.
Original PR description
**Version:** - saas-18.4 **Steps to reproduce:** - Install the Sign app - Upload a PDF and add a strikethrough or multiline field - Mark the field as readonly and mandatory - Try to sign the document **Issue:** - The sign request cannot be validated if the strikethrough or multiline field is both readonly and mandatory. **Solution:** - For strikethrough fields: use "striked" instead of the item name "strikethrough" to set the correct value when the strikethorugh field is constant. - For multiline fields: when the field is constant, the value doesn’t come through element.value; instead, it’s in element.textContent, so we need to set the value there. **Impact:** - Users can now mark these fields as readonly and mandatory without blocking the validation of the sign request. task-5098750 Forward-Port-Of: odoo/enterprise#95769
This update fixes inconsistencies in how employee version data is copied and ensures accurate group S constraints are applied. It streamlines data duplication during version creation and resolves issues related to payroll user access and test case accuracy, ultimately improving data integrity and payroll processing.
Original PR description
## [FIX] hr*: make sure copy of a version copy all version fields This commit makes sure all the information of a version is completely duplicated when the user creates a new version from an existing version of an employee. ## [FIX] l10n_be_hr_payroll_group_s: move group S unicity constraint per employee Before this commit, the group S unicity constraint were per versions since before it was per contract. Now, since we no longer any contract model and more than version could represent the same contract, that constraint is a bit too restrictive. Moreover, the group S is more stored on the employee, so it would surely make more sense to trigger an error if 2 different employees have the same group S code. This commit moves the group S unicity constraint in hr.employee model to make sure we check per employee instead of per version. Forward-Port-Of: odoo/enterprise#99086 Forward-Port-Of: odoo/enterprise#95559
This update resolves an issue where the gross salary displayed in the Indian payroll salary calculator was incorrectly showing as zero. The fix ensures the system accurately calculates gross salary based on standard percentage rules, addressing a critical error in the Indian payroll functionality.
Original PR description
## Issue: - When we try the salary calculator for 'IN company' the gross was showing '0'. ## Reason: - Basic salary amount is calculated based on l10n_in_basic_percentage and due to dependency of l10n_in_basic_salary_amount on l10n_in_basic_percentage and vice versa, it gives '0' percentage. ## Fix: - Fetched the default percentage from rule parameters to calculate the gross salary. Fixed the issue of gross salary displaying '0' in salary calculator for Indian Payroll. Added the default percentage in compute of basic percentage so that it fetches values from rule parameters and calculates the basic salary amount. task - 5062259 Forward-Port-Of: odoo/enterprise#96935
This update fixes an issue where vendor bills from Uruguay weren't processing all relevant data. Now, all CFEs within the XML files are processed, and new documents created manually or automatically receive unique suffixes to track their origin. This ensures accurate billing and simplifies troubleshooting.
Original PR description
1) Update l10n_uy_edi translations. 2) When an uruguayan xml file is uploaded on a purchase journal it could contain the information of more than one CFE but before this commit only the first CFE was…
1) Update l10n_uy_edi translations. 2) When an uruguayan xml file is uploaded on a purchase journal it could contain the information of more than one CFE but before this commit only the first CFE was processed. Now all the CFEs are processed. 3) Add suffix '-manual' for new vendor edi documents uuid that are created by drag and drop xml file. 4) Create xml attachment in the edi document if it is created by drag and drop xml file. 5) Add suffix '-notification' for new vendor edi documents uuid that are created by 'UY: Create vendor bills (sync from Uruware)'. 6) Cron is run by batches (size=10). 7) Add tests. The suffixes -manual and -notification are used to differentiate between EDI documents generated manually and those generated automatically. This is useful to determine whether the document was created by a user or by an automated process, also helps users identify its origin more easily and also it is useful for debugging and tracking purposes. Task Adhoc side: 43467 Task latam side: 1355 Forward-Port-Of: odoo/enterprise#99556 Forward-Port-Of: odoo/enterprise#86829
This update ensures that invoice lines are reconciled correctly within a single POS session, matching the way session lines are handled. Previously, reconciliation mixed invoices from different customers, leading to inaccurate reporting. This fix improves the accuracy of financial data within the POS system.
Original PR description
Invoice lines to be reconciled are not tailored to the single partner while the session lines do. That causes reconciliation to happen between different partners. To reproduce: Create an invoice of 100 to Customer 1 and an invoice of 200 to Customer 2. In a pos session, go to Customer 1, settle 50 on that invoice. Go to Customer 2, settle 100 on their invoice. Close register. => Lines from different customer are reconciled together. task-5346644 Forward-Port-Of: odoo/enterprise#100131
This update resolves an issue where fiscal receipt generation failed when multiple payment methods were used in a POS order. The fix ensures unique identification of payment methods, preventing duplicate keys and allowing receipts to be generated correctly. This improves the reliability of POS transactions.
Original PR description
When multiple payment methods are used in a POS order, the fiscal receipt generation fails with "Got duplicate key in t-foreach: 0" error. This occurs because all payment methods have the same default it_payment_index value (1), causing duplicate keys in the Owl template's t-foreach loop. This fix uses the payment's database ID (payment.id) as the unique key in the template loop instead of relying on the payment method's it_payment_index value. Forward-Port-Of: odoo/enterprise#96353
This update fixes inconsistencies in how the AI agent communicates with the Gemini API, improving the accuracy and reliability of its responses. Specifically, the agent now correctly structures tool calls and results, reducing potential errors and hallucinations related to data interpretation. The changes also streamline the AI view builder, using structured search parameters to avoid ambiguity.
Original PR description
[REF] ai: view builder: change search param to object format [FIX] ai: action id in get_menu_details tool [FIX] ai: measures param in open_menu_pivot as object [FIX] ai: incorrect messages for tool calls
This update resolves a payroll error that occurred when creating employees with 'Cadre' status in the French HR module. The issue stemmed from outdated data files following a recent system update, specifically a change in key names and a typographical error. This fix ensures accurate payroll processing for French HR employees.
Original PR description
To reproduce: ============= - in FR company create employee with "Cadre" status - in Payroll -> Pay runs, create a new pay run for this employee for a given month -> Error occurs Problem: ======== after intoducing Versioning in 19, `contract` key was changed to `version` but these data files were not updated accordingly. also there was a typo in lines with `company_20id` instead of `company_id` opw-5244193 Forward-Port-Of: odoo/enterprise#99981
This update fixes an error in the Peru tax return (RVIE Sales 14.4) report that incorrectly included credit note amounts in the VAT columns. The fix ensures the report now accurately reflects SUNAT regulations for credit note reporting, improving compliance and data accuracy for Peruvian businesses.
Original PR description
How to reproduce the issue: -With l10n_pe localization - Create an invoice for the previous period, generate a credit note for that invoice in the current period. - In the tax return with report VAT Report (RVIE Sales 14.4) (PE), download the txt file. - Columns 15(base_igv), 16(amount_discount), 17(tax_igv) and 18(tax_igv_discount) are wrong: the credit note is included in col 15 and 17 However, according to SUNAT spec the rule should be: - If the NC modifies a document issued in the same period: amounts must be reported in Col. 15 and 17 (with the negative sign already inherent in the NC). - If the NC modifies a document issued in previous periods: amounts must be reported in Col. 16 (Discount BI) and Col. 18 (Discount IGV/IPM) (values must be negative), and not in 15/17 opw-5094466 Forward-Port-Of: odoo/enterprise#96146