Daily updates from Odoo
Thursday, August 14, 2025
16 changes · master
Enhancements to existing features
Mexican electronic invoicing now warns users before sending an invoice when the customer is missing required country or ZIP information and the invoice is not marked as CFDI to Public. This helps prevent sending invoices with incomplete customer data unless the user deliberately confirms the exception.
Original PR description
Adding a warning and a check to account.move.send constraints for trying to send an invoice for a customer that doesn't have either country or ZIP specified, when 'CFDI to Public' is set to False (requires user action to override default behavior). task-4963869 Forward-Port-Of: odoo/enterprise#91655
Brazilian tax localization now supports setting the appropriate CNAE service activity code per invoice line through product NCM setup. This helps companies comply with city-specific tax rules in Avalara calculations and adds a way to maintain CNAE codes when local requirements change.
Original PR description
Some cities require specific CNAE codes to be set on services to determine taxes, benefits, and taxpayer classification. Avalara does not maintain a central table to automatically apply the right…
Some cities require specific CNAE codes to be set on services to determine taxes, benefits, and taxpayer classification. Avalara does not maintain a central table to automatically apply the right CNAE code per city per service as such we must have a way of representing this on the line level. Rather than adding another field on `account.move.line` we can take use of `l10n_br.ncm.code` and add a link to `l10n_br.cnae.code` within the model. This allows products to have specific NCM codes by city and put the right CNAE code on each line. In addition, if new CNAE codes are created or needed by certain states or cities that we don't currently have, a new menu item and view was created to allow for creation or editing of the codes. As such a uniqueness constraint was also added. _Note, these older `l10n_br_*` modules follow an old style of test cases that doesn't really test input and output correctly for the avalara requests, as such, the first commit in this PR makes the new testing style available for all `l10n_br_*` modules by moving it to `l10n_br_avatax`._ _A future PR will rework test cases to this new style._ task-4950444
Belgian payroll users can now manage group insurance export records through regular list and form screens instead of a temporary wizard. This makes past exports easier to review and gives users direct access to eligible employees for the selected period.
Original PR description
In this PR we: - Converted the Group Insurance Export from a wizard-based flow into standard list and form views. - The export records are now displayed in a list view, and creating a new record opens a form view. - A smart button has been added in the form view to access eligible employees for the selected period. Related task: 5010866.
The UAE payroll end of service report now calculates worked years based on the employee’s full time with the company, rather than only days actually worked. This gives businesses a more complete and accurate tenure figure for end of service reporting.
Original PR description
- update the calculation for the worked years in the end of service report to return the whole duration worked with the comapny not just the actual worked days. Task: 4703337 Forward-Port-Of: odoo/enterprise#92311 Forward-Port-Of: odoo/enterprise#84223
The front desk visitor flow now shows available hosts as employee cards grouped by team, instead of requiring users to type into a dropdown. This makes host selection more visual and faster while ensuring visitors can only choose from the hosts configured for that front desk.
Original PR description
Before: - The host selection in the frontdesk interface was a text-based dropdown. - Users had to type at least one character to search for a host. After: - Replaced the host selection dropdown with the attendance-style view. - Displayed employee groups on the left and employee cards on the right, similar to the attendance dashboard. - Only employees listed in the "Hosts" field of the frontdesk configuration are shown. Task-4815540
Odoo Studio now uses a faster and more reliable way to compare and simplify view changes. This reduces misplaced elements and makes edited views cleaner and easier to maintain, especially when customizing forms and reports.
Belgian payroll dashboards now flag employees whose hourly wage is 17 or higher. This helps payroll teams spot employees who may need attention before payroll processing, reducing the risk of missed wage-related checks.
Original PR description
Added a payroll dashboard warning for employees having hourly wage >= 17 Task-4936657
Network IoT devices will now be recorded even when another IoT Box has already detected them. This makes troubleshooting easier and gives users a clearer view of which IoT Box owns or manages each device.
Original PR description
We used not to create records for network IoT devices if they were already detected by another IoT Box on the database. This is making the debugging more complex, and doesn't make sense anymore as we show the IoT Box owning the device in many2x fields. Forward-Port-Of: odoo/enterprise#92360
Belgian payroll users can now launch working schedule changes directly from an employee form. They can also index employee contracts from both employee list and form views, making common payroll updates easier to access.
Original PR description
Added the working schedule change server action to form view of employee, and added index contracts server action to list and form view of employee. Task ID: 4900046 Forward-Port-Of: odoo/enterprise#91830
Resolved issues and error corrections
The update prevents users from selecting internal bank reconciliation widget models in places like Knowledge properties. This avoids errors when those models are used by features that expect normal database-backed records.
Original PR description
To reproduce this issue, just try to perform a name_search/search_count/etc.. on `BankRecWidget` for example: - Example of Steps in Knowledge: - Open knowledge - Create an article - Create another article in the first one (child) - Add a properties - Select `Bank reconciliation widget` in Model - Traceback `BankRecWidget` and `BankRecWidgetLine` use ```py _auto = False _table_query = "0” ``` to avoid being stored in db. This kind of model doesn't work with several methods of the model api, such as `search_count`, `name_search` etc... This commit will add a models blacklist via ir_model._is_valid_for_model_selector opw-4763713 Forward-Port-Of: odoo/enterprise#90060 Forward-Port-Of: odoo/enterprise#88352
A checkout issue affecting Colombian eCommerce websites has been fixed. Customers can now add a new address without the page crashing, improving checkout reliability.
Original PR description
To reproduce: ============= 1- Install Colombia accounting 2- Install eCommerce 3- Set company address to Colombia 4- Go to website and add item to cart 5- Checkout & click "Add new address" →…
To reproduce: ============= 1- Install Colombia accounting 2- Install eCommerce 3- Set company address to Colombia 4- Go to website and add item to cart 5- Checkout & click "Add new address" → Traceback occurs Problem & Solution: =================== The field l10n_latam_identification_type_id is always present in the address form but its HTML element changes: it's rendered as a `select` when is_commercial_address and can_edit_vat is true, and as an `input` otherwise. The JS code only looked for the `select`, so when the `input` was rendered instead, the selector was null and caused a traceback. Update the selector to look for the field in either `select` or `input` form, so the code works regardless of the rendering conditions. useful-links: https://github.com/odoo/odoo/blob/4806b08dcfc965cdbd463269be078f8da9f48863/addons/l10n_latam_base/views/portal_address_templates.xml#L10-L11 https://github.com/odoo/odoo/blob/4806b08dcfc965cdbd463269be078f8da9f48863/addons/l10n_latam_base/views/portal_address_templates.xml#L32-L33 opw-4969089 Forward-Port-Of: odoo/enterprise#91695
This fix ensures newly created salary offers appear when users return to applicant or employee offer lists. It also automatically fills the employee field when creating an offer from an employee record, reducing manual entry and confusion.
Original PR description
…ee field - = hr_contract_salary Steps: - Navigate to Recruitment > Job Positions > Applications> Offers - Now, create a New offer using the New button, and go back to offer list view - Navigate to Employee > Select an employee > Contract > Offers - Now, create a New offer using the New button, and go back to offer list view - Navigate to Employee > Select an employee > Contract > Offers - Now, click on New button to open offer form. Issues: - New offer is not included in list for applicants when returning via breadcrumb - New offer is not included in list for employees when returning via breadcrumb - Employee field is not pre-populated when creating a new offer for employee Fix: - Modified smart button action for applicants - Modified smart button action for employees - Computed the employee field to be autofilled Task - 4787302 Forward-Port-Of: odoo/enterprise#91452 Forward-Port-Of: odoo/enterprise#86160
Fixed an error in the Spanish SME Balance Sheet that could make certain group company investment amounts appear twice. This helps businesses using the Spain SME localization rely on accurate balance sheet figures for reporting and review.
Original PR description
Issue: - Amounts were exactly doubled in 'Current Investments in Group Companies and Associates' in the Spanish Balance Sheet - SMEs report as account codes 5523 and 5524 were incorrectly added to…
Issue: - Amounts were exactly doubled in 'Current Investments in Group Companies and Associates' in the Spanish Balance Sheet - SMEs report as account codes 5523 and 5524 were incorrectly added to multiple balance sheet sections Root Cause: - Account codes 5523% and 5524% were included in BOTH: 1. 12400 (Assets): 'Current investments in group companies' 2. 32400 (Liabilities): 'Group companies current liabilities' - This double-counting caused investment amounts to appear twice in the balance sheet How to Reproduce: 1. with Spain - SMEs Fiscal Localization's Package 2. Go to Accounting -> Configuration -> Journal -> Bank 3. Change suspense account to code 5523X or 5524X (should be added to chart of accounts before) 4. Post journal entries to accounts 55230X or 55240X 5. Generate 'Balance Sheet - SMEs (ES)' report 6. Observe amounts are exactly doubled compared to account balances Fix: - Removed duplicate account codes from balance_pymes_line_12400_sub_balances - These accounts are properly handled by the domain formula in line 32400 - Each account code now appears in only one balance sheet section" opw-4983300 Forward-Port-Of: odoo/enterprise#92210
Swiss payroll declarations now show which employee details are missing before users send or print them. This helps payroll teams correct issues more easily and reduces confusion for users who are not familiar with the declaration process.
Original PR description
It is currently complicated for non trained users to figure out what is missing before sending or printing a declaration. In this PR we extend the warning mechanism to declarations to visualize what information is missing on what employees. Forward-Port-Of: odoo/enterprise#92144 Forward-Port-Of: odoo/enterprise#86195
Payslips now show the correct weekly hours when an employee uses a flexible working schedule. Finalized or paid payslips also keep the hours that applied at the time they were completed, so later schedule changes do not alter printed records.
Original PR description
Steps to reproduce: - Enable "Flexible Hours" in a working schedule. - Assign the schedule to an employee. - Generate a payslip for the employee. - Observe that the "Working Schedule" section always…
Steps to reproduce: - Enable "Flexible Hours" in a working schedule. - Assign the schedule to an employee. - Generate a payslip for the employee. - Observe that the "Working Schedule" section always shows `hours_per_week` from the total hours calculated from the Work Schedule defined before turning on "Flexible Hours" Description: - the payslip incorrectly displayed the weekly working hours from the Work Schedule regardless of whether the employee's schedule used flexible hours. - also, if we changed the work schedule timings, after the payslip is in 'done' or 'paid' state, and printed it again, it will print the changed hours, which is not desired, the payslip should print hours same as when it was done. Cause: - the report template did not check for the `flexible_hours` flag and always rendered the value from `contract_id.hours_per_week`. Fix: - added a condition in the payslip template to check if `flexible_hours` is enabled. - if true, it displays `full_time_required_hours` from the working schedule instead of the contract's `hours_per_week`. - also, now we will also check the state of the payslip, in order to print the right hours even after setting it to 'done' or 'paid' and the schedule changes! task-4719717
German EC Sales List CSV exports now include the required version information expected by the Elster portal. This prevents valid reports from being rejected during upload and helps businesses submit their VAT-related declarations without manual corrections.
Original PR description
When uploading the EC Sales List csv to Elster.de portal, users will see the file rejected with the following error (EN translated) """ Your CSV file was created for an older version of the CSV interface. Please refer to the version table in the import help for the latest version of the interface and any changes. If the version information is correct, please check the encoding of your CSV file. The permitted encoding is UTF-8. """ This occurs because the csv is missing the version strings identifying the versions of data format References: https://www.elster.de/eportal/helpGlobal?themaGlobal=zmdo_import_eop https://www.datev-community.de/t5/Betriebliches-Rechnungswesen/Import-CSV-Daten-nacvh-Elster-f%C3%BCr-ZM/td-p/480079 opw-4850314 Forward-Port-Of: odoo/enterprise#92110