Daily updates from Odoo
Friday, April 24, 2026
13 changes · master
Resolved issues and error corrections
This update fixes a bug that occurred when rescheduling work orders in the Gantt view if a dependent operation lacked start or end dates. The fix ensures that dates are defined before comparisons are made, preventing a 'TypeError' and allowing rescheduling to continue smoothly. This improves the reliability of the Gantt visualization.
Original PR description
Currently, an error occurs when rescheduling work orders in the Gantt view if a dependent operation has no start or end date. **Steps to Reproduce:** - Install the MRP module (with demo data). -…
Currently, an error occurs when rescheduling work orders in the Gantt view if a dependent operation has no start or end date. **Steps to Reproduce:** - Install the MRP module (with demo data). - Activate "**Custom Work Order Dependencies**". - Create a new MO for the _Drawer_ product with _SEC-ASSEM_ BoM. - Confirm and plan the MO. - Remove both start and end dates of any dependent operation. - Manufacturing > Planning > Work Orders > Gantt - Enable **Auto-Reschedule (Keep Buffer)** and reschedule the first operation (in 'Drill 1'). **Error:** `TypeError - '>' not supported between instances of 'bool' and 'datetime.datetime'` **Cause:** At [1], `date_start` and `date_finished` can both be set to False because a condition that bypasses the UserError when both dates are empty (unlike earlier versions). As a result, during rescheduling, a False value is compared with a datetime, leading to a TypeError at [2]. Fix: This commit adds a condition before date comparisons to ensure the dates are defined. [1]: https://github.com/odoo/odoo/blob/3f256437a7e6c124affca8d5304476a67375753f/addons/mrp/models/mrp_workorder.py#L281-L284 [2]: https://github.com/odoo/enterprise/blob/ef2efe113684104032d798b5aa237c67a3bc240a/web_gantt/models/models.py#L484-L491 sentry-7377739830 Forward-Port-Of: odoo/enterprise#112729
This update resolves an issue where the version number on payslips could be incorrectly edited, leading to potential payroll inaccuracies. The change makes the version field read-only and automatically calculates it from the payslip period, ensuring data integrity. Additionally, a fix was implemented to handle multiple worked days records for meal voucher quantities, preventing errors during payroll calculations.
Original PR description
Before: version field was visible and editable, and could be incorrectly overridden After: version field is readonly, hidden (debug only), and always computed from payslip period without being overridden task-6112109
This update fixes a confusing issue for Mexican employees receiving payslips. Previously, an unstamped payslip was emailed immediately after batch confirmation, followed by a second email with the stamped version. Now, emails are only sent for Mexican payslips after the CFDI (tax document) has been generated, ensuring a cleaner and more accurate experience.
Original PR description
Currently, when a user confirms a payslip batch (hr.payslip.run), the base payroll module queues the PDF generation and sends an email to the employee with their payslip immediately. For Mexican payslips, this means the employee receives the email with an unstamped payslip (without CFDI UUID). Later, when the CFDI is generated, a second email is sent with the stamped version, confusing the employee. This commit prevents the email from being sent for Mexican payslips if the CFDI has not been generated yet, ensuring only the stamped payslip is emailed. Forward-Port-Of: odoo/enterprise#114731
This update fixes an issue where tax reports for international customers incorrectly used the company's VAT number instead of the customer's foreign VAT ID. The change ensures that VAT reports accurately reflect the customer's tax identification, improving financial reporting accuracy and compliance. This resolves a discrepancy impacting VAT calculations for businesses operating across borders.
Original PR description
### Issue: When a fiscal position defines a `foreign_vat`, tax reports generated for that country still use the company's VAT number instead For example, with a Belgian fiscal position using…
### Issue: When a fiscal position defines a `foreign_vat`, tax reports generated for that country still use the company's VAT number instead For example, with a Belgian fiscal position using `BE010203040`, the generated BE VAT report uses the company VAT instead of `010203040` ### Cause: The report generation did not check whether there is a fiscal position with a `foreign_vat` matching the country of the report ### Note: The example above uses a Belgian fiscal position to reproduce the issue Starting from 19.0, this specific flow is blocked because Intervat is enabled in production mode by default A related fix makes the Intervat settings available in that case Until then, the issue can be reproduced by temporarily commenting out: https://github.com/odoo/enterprise/blob/5fb58a9b7b3ae89f87e84d4ba1fa3a16237d80ac/l10n_be_intervat/models/account_return.py#L15 ### Steps to reproduce: - Disable demo data and install `accountant` - Create a Fiscal Position "Belgium" (Country: Belgium, Foreign Tax ID: BE010203040) - Click the alert to install the Belgian taxes - Create and confirm an invoice for a Belgian customer: - Fiscal Position: Belgium - Any product with a Belgian tax - Invoice Date: 01/01/2026 - Open the Tax Report and select `VAT Return (BE)` for January - Click `Returns` and select the full year - Mark the December return as Completed from the three-dot menu - Review January and fill the missing company data (TIN: 1111111, phone and email) - Click `Validate -> Lock -> Submit` ### Before the fix: The generated XML uses the company VAT number (`1111111`) instead of the fiscal position foreign VAT (`010203040`). opw-6076540 Forward-Port-Of: odoo/enterprise#112610
This update addresses a critical issue where Odoo Enterprise would crash when attempting to download a URL document alongside a spreadsheet. The fix ensures stable and reliable downloading of both document types, improving user experience and preventing data loss. This resolves a reported bug impacting document access.
Original PR description
Try to download a url document along with a spreadsheet. `onDownload` crash when trying to download a url document. Task: 5485662 Forward-Port-Of: odoo/enterprise#113645 Forward-Port-Of: odoo/enterprise#112513
This update fixes inaccuracies in how signed documents are displayed and communicated, particularly when using 'Sign Now'. Now, certificates clearly show who signed on behalf of whom, and confirmation emails accurately reflect the signing process, improving transparency and trust.
Original PR description
Before: When a document template is signed using "Sign Now" on behalf of another user, the certificate should show the line “Connected as ” for internal and portal users. Previously, the Email…
Before: When a document template is signed using "Sign Now" on behalf of another user, the certificate should show the line “Connected as ” for internal and portal users. Previously, the Email verification note under Participants could appear even when no email verification was actually done, for example when using "Sign Now". Additionally, the signature confirmation email did not clearly reflect when the document was signed locally on behalf of others. After: When a document is signed using Sign Now on behalf of another user, the certificate now shows the line "Connected as <LoggedUser>" for all users. The Email verification note under Participants is shown only when email verification actually happens Otherwise show `Document was signed locally for all signers using UserName's account` - The signature confirmation mail is updated for local sign cases `..., while connected as <LoggedUser>`. Impact: - Clearly shows in the certificate when a document is signed by user for another user. - Avoids showing Email verification information when it did not happen and displays the correct message instead. - Improves clarity and accuracy of signature confirmation emails. taskid-5343749
This update enhances data privacy within the Helpdesk module by restricting access to reporting menus (Ticket Analysis & SLA Status Analysis) to manager users only. Previously, non-admin users could access these reports; this change removes complex security overrides and directly restricts access, improving data security and user experience.
Original PR description
Before this commit: Currently, the `Ticket Analysis` and `SLA Status Analysis` reporting menus from the helpdesk module are accessible to non-admin users. To manage data privacy and ensure users only see their own ticket data, custom Python overrides `(specifically _load_menus_blacklist in ir.ui.menu.py)` and complex record rules `(ir.rule in helpdesk_security.xml)` were maintained to filter report data. After this commit: helpdesk: Hide the reporting menus directly by restricting the `Ticket Analysis` and `SLA Status Analysis` menu items to the manager group. Removed the custom ` _load_menus_blacklist `Python override from ir.ui.menu.py since conditionally hiding the menus in Python is no longer necessary. Removed the obsolete `ir.rule` data filters for standard users in `helpdesk_security.xml`. Revoked base read access in the `ir.model.access.csv`file for standard users to prevent direct access to the reports via URL. task-5119293
This update resolves an issue where crucial fiscal data was missing from Swedish POS receipts printed from both the online and offline systems. The fix corrects the receipt template and data generation process, ensuring accurate reporting for Swedish accounting requirements. This ensures compliance and accurate record-keeping.
Original PR description
Since the receipt printing refactor that allowed printing receipts from either the frontend or backend, the fiscal data for Swedish blackbox receipts has been broken. In the frontend, the receipt prints but the blackbox data is missing from the footer. In the backend, attempting to print the receipt gives a 500 error. This commit fixes both these issues by correcting the receipt template and data generation. Community - https://github.com/odoo/odoo/pull/260587 Forward-Port-Of: odoo/enterprise#114579
This update resolves an issue where planned hours were incorrectly displayed on public holiday days in the project timesheet reports. The fix ensures the report accurately excludes public holidays, regardless of whether they're linked to a specific schedule, and accounts for timezone differences to prevent date shifting.
Original PR description
### Steps to reproduce: - Install project_timesheet_forecast module - Configure your database to have a far timezone (Montevideo/Uruguay in my case) - Create a public holiday starts from 12AM to…
### Steps to reproduce: - Install project_timesheet_forecast module - Configure your database to have a far timezone (Montevideo/Uruguay in my case) - Create a public holiday starts from 12AM to 11:59PM with a calendar - Create a planning slot for a resource that overlap with the public holiday - Check the Timesheets / Planning analysis report - Group by employees > day **- Check the date of the public holiday and notice there are still planned hours shown** - Remove the calendar from the public holidays that we created previously - Check the report once again **- Notice the day of the public holiday and the day after has no planned hours** ### Cause: In the query we are using to exclude the leave days from the report we only exclude the ones that has calendar_id assigned, not taking into consideration that some of the public holiday are general and is not applied to just one working schedule. Also if we have a leave starting midnight to 11:59PM since we store dates in database as UTC for timezone like Uruguay's one it will shift the end with one day which will introduce inconsistencies ### Fix: We check if the calendar_id is null on the resource_calendar_leaves and make sure we take timezone of the resource into account when checking the dates of the leaves. opw-5027070 Forward-Port-Of: odoo/enterprise#114757 Forward-Port-Of: odoo/enterprise#111846
This update resolves an issue where attachments couldn't be downloaded from the Odoo chatter on mobile devices (Odoo 18.4+). The fix ensures that URLs are correctly formatted for download, preventing errors and restoring the ability to access attachments. This improvement impacts mobile users' ability to retrieve files.
Original PR description
In Odoo 18.4+, downloading attachments from the chatter is broken.
See: https://github.com/odoo/odoo/pull/200099
The `onClickDownload` function now passes an absolute URL to `downloadFile`.
The download function is implemented natively in the mobile apps.
The Android implementation always prefixes the provided URL with the
database origin (i.e.: `https://example.odoo.com`).
`download({url: "https://example.odoo.com/web/content"})` will try to
download `https://example.odoo.comhttps://example.odoo.com/web/content`.
This results in an UnknownHostException.
We can remove the origin from the url before calling the native method.
By doing this on the JS side, there is no need to update the Android app.
opw-6033150
Forward-Port-Of: odoo/enterprise#114832This update ensures that VAT numbers in the VIES summary reports are formatted correctly, removing the country code. This is necessary to comply with Czech tax regulations and generate reports that meet official VIES XML requirements, preventing potential reporting errors.
Original PR description
**Steps to reproduce:** - Install the `l10n_cz_reports` module and switch to a `CZ Company` - Create an invoice for a customer with a VAT number, add a product, and set the Transaction Code (enable…
**Steps to reproduce:** - Install the `l10n_cz_reports` module and switch to a `CZ Company` - Create an invoice for a customer with a VAT number, add a product, and set the Transaction Code (enable it from the optional columns if needed). - Navigate to Reporting > VIES Summary Report. - Observe the value in the `VAT Number` column (includes country code). - From the dropdown, export the report as XML. **Observation:** In the generated XML file, the `c_vat` field contains the VAT number including the country code (e.g., `CZ12345679`) instead of only the numeric part (`12345679`). **Root cause:** At [1], the VAT number is directly taken from the report lines without removing the country code. **Fix:** This commit ensures that the `c_vat` field contains only the VAT number without the country code, complying with the official VIES XML format requirements. Ref: https://adisspr.mfcr.cz/dpr/adis/idpr_pub/epo2_info/popis_struktury_detail.faces?zkratka=DPHSHV#:~:text=Tax%20identification%20number%20of%20the%20purchaser%20(only%20the%20numeric%20part) [1]: https://github.com/odoo/enterprise/blob/c4f2c3442f30f5ac972dd136a3642acc5bcc6da2/l10n_cz_reports_2025/models/l10n_cz_vies_summary_handler.py#L29-L62 opw-6093259 Forward-Port-Of: odoo/enterprise#114990 Forward-Port-Of: odoo/enterprise#113083
A recent update caused crashes in the Self-Ordering and Mobile Menu (QR ordering) interfaces. This fix corrects a naming issue within the POS data loading process, ensuring these key features now function correctly. The change updates a field name to align with the current system, resolving the loading errors.
Original PR description
## Overview Accessing the Mobile Menu (QR ordering) or Self-Ordering interface crashes after installing `pos_blackbox_be` on SaaS-19.1. The interface fails to load due to a missing field in the POS…
## Overview Accessing the Mobile Menu (QR ordering) or Self-Ordering interface crashes after installing `pos_blackbox_be` on SaaS-19.1. The interface fails to load due to a missing field in the POS data loading flow. ## Steps to Reproduce 1. Install `pos_blackbox_be` 2. Open POS 3. Access the Mobile Menu (QR code) or Self-Ordering page ## Current Behavior - A traceback is raised - The interface does not load ## Root Cause The method `_load_pos_self_data_fields` returns the field: iface_fiscal_data_module However, from SaaS-19.1 this field was renamed to: iot_fdm_be_id This mismatch causes the POS self-ordering data loading to fail. ## Fix Updated the returned field to match the new field name. # Before return fields + ['iface_fiscal_data_module'] # After return fields + ['iot_fdm_be_id'] ## Impact - Restores proper loading of Mobile Menu (QR ordering) - Fixes Self-Ordering interface crash opw-6044883 ## Reproduction Video https://drive.google.com/file/d/1R5TYVIXvtts12YLF5iB4GKZirMZePoGr/view?usp=sharing Forward-Port-Of: odoo/enterprise#114357
This update ensures that Brazilian tax documents (EDI) accurately reflect tax amounts provided by Avalara, as required by Brazilian law. Previously, this information was missing, and now it's automatically included in all generated documents, regardless of tax information, to maintain compliance.
Original PR description
All fiscal documents are required by Brazil law to include the approximate value of fed, state, and city taxes that affect it. Avalara already provides back these values in their tax calculation response, we just missed sending it to the EDI. This commit takes the information from that response and adds it to the EDI payload to make sure that it is generated properly into the generated documents. We are required to always show this even if there are no informative taxes as such we combine it with the T&C sent already. task-5478059 Forward-Port-Of: odoo/enterprise#113732