Daily updates from Odoo
Wednesday, November 26, 2025
16 changes · master
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