Daily updates from Odoo
Wednesday, November 26, 2025
29 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 prevents the 'My Drive' folder from automatically unfolding when you open a folder within it, like 'Company'. Previously, this behavior caused unnecessary expansion and improved the user experience by aligning folder behavior with other root folders.
Original PR description
Steps to reproduce =================== - Go to the `All` section. - Open the folder hosted in the `My Drive`. - `My Drive` gets unfolded. To Be ===== - The` My Drive` folder should not be unfolded when opening folders inside it, like `Company`. Technical =========== - Earlier, we were sticking to the condition that allows other root folders to unfold when we open a folder inside it, except the `Company` folder. After this commit ================== - This commit addresses the issue, and now whenever we click on a certain folder it will not unfold until its root is unfolded. Task-5046161 Forward-Port-Of: odoo/enterprise#100213 Forward-Port-Of: odoo/enterprise#93718
This update resolves an issue where the 'Click to Start' navigator wasn't appearing for documents without sign items. The fix ensures the navigator displays when a document has sign items, improving the user experience and making it easier for users to begin the signing process.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Add multiple documents in sign app. - Add sign item for user in first document and keep second document without any sign item. - Try sign document. Issue: - The "Click to Start" navigator is not visible when signing. - `postRender` runs for all documents and calls `checkSignItemsCompletion`, which then calls `updateDocumentsWithUnsignedItems(false)` for documents without sign items. - This passes false to `controlNavigatorVisibility`, hiding the navigator even though the first document has unsigned items. Solution: - In `controlNavigatorVisibility`, instead of relying only on the `hasUnsignedItems` flag, check if the current document is unsigned and has sign items for the current signer before toggling the navigator. Impact: - The "Click to Start" navigator now appears correctly, helping users start the signing process smoothly. task-5148722 Forward-Port-Of: odoo/enterprise#97205
This update resolves a minor visual issue in the Documents app where UI elements were overlapping. The team adjusted the layout to ensure proper display and functionality of key features, specifically the translate button and activity actions. This improves the overall user experience within the Documents module.
Original PR description
This PR addresses the following UI issues in the documents app: - Fix the overlapping of the translate button of name with the file size in `DocumentsDetailsPanel`. - Hide the `DocumentsAction` in activity view as they were not working anymore. Technical ============================ - Set position: relative on .o_field_input_buttons. The .o_field_input_buttons had position: absolute by default, but since .o_documents_details_panel_name uses display: contents, the ancestor context for absolute positioning is lost. Because display: contents makes the parent disappear visually and the children behave as independent elements, the absolute positioning behaves unexpectedly. Setting position: relative on .o_field_input_buttons resolves this by providing a proper positioning context. Task-4792112 Forward-Port-Of: odoo/enterprise#86436
This update fixes an issue where deposited amounts were incorrectly shown as 'Total Due' in customer records. A recent system update caused a miscalculation, leading to inaccurate deposit displays. The fix ensures deposited amounts are now correctly shown as deposits, improving clarity for users.
Original PR description
Steps to reproduce: =================== 1. Open the customer list. 2. Select a customer and choose `Deposit money`. 3. Deposit an amount (e.g. 50) and confirm. 4. Open the customer list again. Issue: ====== The deposited amount is shown as `Total Due` instead of `Deposited`. Also the confirmation dialog for deposit showing negative amount. Cause: ====== A major refactor in order change calculation, passes the negative change value to the `depositOrder`, so the deposit was recorded as a due amount. Fix: ==== Negate the change value when adding the deposit order line so it becomes positive and is correctly shown as a deposit. Task: 5227004 Forward-Port-Of: odoo/enterprise#98847
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 resolves a technical error related to employee cost calculations within the Odoo Enterprise payroll module. The issue stemmed from a dependency conflict when modules were loaded in a specific order, causing a data lookup failure. The fix establishes a clear dependency between payroll and the employee contract modules to ensure correct data processing.
Original PR description
Reproduce Issue : loading hr_contract_salary after l10n_sa_hr_payroll causes this error : Element '<xpath expr="//separator[@name='employer_costs']">' cannot be located in parent view Issue : in the hr_employee_view of the l10n_sa_hr_payroll , we inject three fields in the seperator "employer_costs" which is defined in hr_contract_salary , because there is no dependecy between the two modules , this causes the error to happen if the l10n_sa_hr_payroll is loaded first. Fix : Create another view to add these fields in the l10n_sa_hr_contract_salary module which depends on both l10n_sa_hr_payroll and hr_contract_salary task - 5258832 related PR : enterprise#98239
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 corrects a technical error in the POS tour tests related to the company name being incorrectly configured. The fix ensures accurate tour functionality, preventing potential issues with reporting and data accuracy. This resolves a minor inconsistency within the Odoo Enterprise system.
Original PR description
There was an error in the generic hooks, the company name was not the correct one. runbot-234336 Forward-Port-Of: odoo/enterprise#100311
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 corrects a technical issue where Odoo would display an error when a required field was hidden. The change ensures that Odoo properly handles invisible fields, preventing unexpected errors and improving user experience. This ensures data entry is more reliable.
Original PR description
When a required select is invisible, you may get an error saying the a required field is not set. So like for other type of fields, we check the visibility of the field. Forward-Port-Of: odoo/enterprise#100442
This update fixes an issue with incorrect XML identifiers used in the 'l10n_in_reports' module for generating fiscal reports in Russia. The changes ensure accurate report formatting and compliance with Russian tax regulations. This improves the reliability of financial reporting.
Original PR description
see https://github.com/odoo/odoo/pull/233895 task-5225537
This update resolves a warning that occurred during automated testing (the 'click-all' test) related to a malformed PDF. The fix involved manually correcting the PDF's structure to align with browser rendering requirements, preventing the warning and ensuring consistent test results.
Original PR description
This commit updates the malformed PDF to prevent warnings during the "click-all" test. PDF.js warning message: > Warning: CFF stem hints are in wrong order Additional information from the PDF.js source code: > Some browsers don't draw glyphs that specify vstems before hstems. > As a workaround, replace hstem (1) and hstemhm (18) with a pointless > vstem (3) or vstemhm (23). The PDF was manually patched in the same way as the on-the-fly fix applied by PDF.js. runbot-error-234355
This update automatically activates the EC Sales List report menu item for Odoo Enterprise users in several European countries (Bulgaria, Cyprus, Czech Republic, Latvia, Poland, Romania). Previously, users in these regions had to manually enable the report, streamlining the reporting process and improving user experience.
Original PR description
In this PR: - Added XML records to set the EC Sales List report menu item as active for some EU countries that previously required manual activation. Task-4885725 Forward-Port-Of: odoo/enterprise#100420 Forward-Port-Of: odoo/enterprise#93939
This update ensures the Finnish translations for reports are accurate and complete. Specifically, the necessary POT file was updated, and translation settings were adjusted for the EC sales report to align with official translations. This improves the user experience for Finnish-speaking customers.
Original PR description
The aim of this commit is updating the POT file as we forgot to do it in this commit [[1]]. We also translate report column names in the PO files as we have official translation for it. This commit also disables the translation on the TXT EC sales report. no task id [1]: https://github.com/odoo/enterprise/commit/4887ed53d3a22fdcd766ab0ae77da7cb0498e5a3 Forward-Port-Of: odoo/enterprise#100369 Forward-Port-Of: odoo/enterprise#99887
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 ensures consistent image background colors in both light and dark modes within the Enterprise version of Odoo. Previously, transparent images in dark mode resulted in a less-than-ideal visual experience. This change maintains a uniform background color for image fields, improving readability and aesthetics.
Original PR description
Since we don’t provide a separate avatar version for dark mode, we need to keep the same background color for transparent images in both modes to avoid odd or unreadable rendering. Therefore, this commit defines the same default background color for `field_image`. task-5221516 Requires: - https://github.com/odoo/odoo/pull/234110
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 issue where return deadlines weren't being calculated correctly for older databases. Specifically, it handles cases where returns were marked as 'completed' without a deadline date, ensuring deadlines are automatically assigned based on current settings. This improves data consistency and prevents errors when viewing return lists.
Original PR description
[FIX] account_reports: returns: recomputed date_deadline when is_completed is set to False To align it with the current deadline delay configured on the return type, and keep data consistent. Also,…
[FIX] account_reports: returns: recomputed date_deadline when is_completed is set to False To align it with the current deadline delay configured on the return type, and keep data consistent. Also, databases migrated before https://github.com/odoo/upgrade/pull/8841 could contain returns marked as completed with no value set for the deadline. With this, we ensure unmarking them as completed will grant them one. opw-5259168 ==================================================================== [FIX] account_reports: returns: avoid error when computing days_to_deadline for migrated dbs Databases migrated before https://github.com/odoo/upgrade/pull/8841 could contain returns marked as completed, but without any date_deadline. On such a db, if you open the list of returns, then remove the "to do" filter, you get an error, because _compute_days_to_deadline tries to substract today from None. This commit just makes the computation more resilient, and arbitrarily chooses that a return without deadline is due today. opw-5259168 Forward-Port-Of: odoo/enterprise#100513
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