Daily updates from Odoo
Friday, July 31, 2026
21 changes · master
Enhancements to existing features
The French localization reporting screens have been updated to work with the latest interface framework used by Odoo. This keeps fiscal declaration and reporting features maintainable and aligned with platform upgrades, with little expected change for end users.
Original PR description
Update the code of l10n_fr_{pdp,reports} to follow the new Owl 3.
task-6353237
Linked:https://github.com/odoo/odoo/pull/278004Resolved issues and error corrections
When the same delivery order is processed from two open POS sessions at the same time, the system now shows a proper user-facing warning instead of a technical error. This helps staff understand that the order was already printed and avoids confusing error messages during automated Urban Piper order handling.
Original PR description
`* = pos_platform_order, pos_urban_piper` ## Steps to Reproduce: - Install POS Restaurant. - Configure Urban Piper. - Enable "Auto Acknowledge Orders" for a platform(e.g; Zomato) to automatically print delivery orders. - Configure a printer for the POS shop. - Open the same POS session in two different browsers. - Place a test order from Atlas (UrbanPiper). ## Error: `ValueError - This delivery order has already been printed automatically.` ## Cause: When the same delivery order is processed concurrently for both sessions, the backend raises an error when it attempts to print the order again. ## Fix: Replace ValueError with UserError and mark the error message as translatable. sentry-7609743093 Forward-Port-Of: odoo/enterprise#124304
Invoices using Brazil's fiscal reform flow now include the required commercial export tax unit conversion factor when sent to Avalara. This helps ensure tax calculations and reporting use the expected quantity conversion data, reducing the risk of invoice processing errors.
Original PR description
This commit adds the comexTaxUnitFactor to the json sent to Avalara when sending an invoice. comexTaxUnitFactor is a factor that convert sales quantity to comexTaxUnit, its value should be the same as cbsIbsUnitFactor. opw-6396462 Forward-Port-Of: odoo/enterprise#125695
The Payroll dashboard no longer crashes when a payroll structure type has no scheduled pay configured. A safe fallback keeps the dashboard available, helping payroll teams avoid disruption from incomplete configuration.
Original PR description
If one of the Payroll Structure Types has the Scheduled Pay field unset, opening the Payroll dashboard raises a traceback. Steps to reproduce the error: - Install ``hr_payroll`` module - Go to…
If one of the Payroll Structure Types has the Scheduled Pay field unset, opening the Payroll dashboard raises a traceback. Steps to reproduce the error: - Install ``hr_payroll`` module - Go to Payroll > Configuration > Settings > Set Payroll Closing Date > Save - Go to Payroll > Configuration > Structure Types > Create a new Structure Type > Unset Scheduled Pay - Open Dashboard Traceback: ```py AttributeError: 'bool' object has no attribute 'title' ``` https://github.com/odoo/enterprise/blob/9a3ea83a432f42f62076a50fca6bc771a2de96bf/hr_payroll/models/hr_payroll_warning.py#L413-L419 The dashboard collects the scheduled pay values from all structure types and later calls ``schedule.title()`` to build the labels. When a Structure Type has no Scheduled Pay configured, so ``schedule`` becomes ``False``, leading to the traceback. ``_get_schedule_pay`` method can return False at [1], So, It will generate the traceback from below line also. https://github.com/odoo/enterprise/blob/8a3d87d51a9a3c4df656a328a9179ee43541022d/hr_payroll/models/hr_payroll_warning.py#L401 Solution: Added a fallback value when default scheduled pay is False. [1]: https://github.com/odoo/enterprise/blob/8a3d87d51a9a3c4df656a328a9179ee43541022d/hr_payroll/models/hr_payroll_warning.py#L149-L154 sentry-7583037488 Forward-Port-Of: odoo/enterprise#126127 Forward-Port-Of: odoo/enterprise#122492
Restaurant appointment views no longer crash when a table has no linked resource. This helps staff keep using the schedule reliably even when some table setup details are missing.
Original PR description
When a table doesn't have a resource, the appointment_resource_id is undefined and the gantt renderer was crashing when trying to access its id. This commit adds a check to ensure that the appointment_resource_id exists before trying to access its id. Forward-Port-Of: odoo/enterprise#125331
This fixes an automated test for Mexican point of sale invoicing by ensuring an order is fully synchronized before a refund is started. It helps keep validation of the refund workflow stable and reduces false test failures, without changing day-to-day user functionality.
Original PR description
In this commit: =============== - Fix the `test_mx_pos_invoice_order_and_refund` tour, which fails with the warning: `The amount of the order must be positive for a sale and negative for a refund`. - The failure is caused by the refund flow starting before the original order has been fully synced with the backend. - A previous attempt to fix this in odoo/enterprise#109362 by waiting for `FeedbackScreen.isShown()` was not sufficient. Fix: ==== - Add a `Chrome.waitForOrdersSync()` waiting step to the tour to ensure the original order is fully synced before starting the refund flow. Error: 237980 Forward-Port-Of: odoo/enterprise#124948
New contacts assigned a Partner Level now automatically receive a barcode when they are saved. This ensures front desk partnership processes have the needed barcode immediately, avoiding manual fixes or missing access details.
Original PR description
Steps to reproduce: - Go to Contacts. - Create a new contact and assign a Partner Level before saving. - Save the record. Current behavior: - When creating a new contact with a Partner Level, the barcode is not generated automatically. Solution: - Add barcode generation logic to the create() method so that a barcode is automatically generated when a new contact is created with a Partner Level. TaskId-6236375 Forward-Port-Of: odoo/enterprise#125967
Users can now create Google Booking merchant records without errors when the website app is not installed. The change prevents the system from relying on a website-specific field unless it is available, improving reliability for appointment setup.
Original PR description
Currently, an error occurs when a user creates a Google Reserve Merchant record. **Steps to Reproduce:** - Install the `appointment_google_reserve` module. - Go to `Appointments` > `Configuration` >…
Currently, an error occurs when a user creates a Google Reserve Merchant record. **Steps to Reproduce:** - Install the `appointment_google_reserve` module. - Go to `Appointments` > `Configuration` > `Google Booking`. - Click `New` to create a record. `AttributeError: 'website' object has no attribute 'homepage_url'` After this [recent commit], as part of the context-based website resolution refactoring, the `default_website` record is now available even without the `website` module because it is created in `base` [1]. When a user creates a Google Reserve Merchant record, it attempts to set the default URL using the default website from `base`. However, it then tries to access the `homepage_url` field, which is defined in the `website` module [2]. Since the `website` module is not installed, this raises the error [3]. This commit ensures that before accessing `homepage_url`, it first checks whether the `homepage_url` field exists when creating the merchant record, since this field depends on the `website` module. [recent commit]: https://github.com/odoo/odoo/commit/ae81b6f6074632d1a609387e53f97a61ee6c95f4 [1]: https://github.com/odoo/odoo/blob/ea0e2750a43e337bc6d9a00489a30df3fc0616c7/odoo/addons/base/data/website.xml#L5-L9 [2]: https://github.com/odoo/odoo/blob/ea0e2750a43e337bc6d9a00489a30df3fc0616c7/addons/website/models/website.py#L168 [3]- https://github.com/odoo/enterprise/blob/01b0cf4e2f2e2c63c02c3429d029c90639de1322/appointment_google_reserve/models/google_reserve_merchant.py#L21-L22 Task-6395376 sentry-7630852653 Forward-Port-Of: odoo/enterprise#125680
The Accounting reports now handle cases where a grouped tax used on past journal items has later been changed to a regular tax. This prevents the Journal Report from failing and helps users continue reviewing audit data without interruption.
Original PR description
**Steps to reproduce:** - Install account_reports - Create a tax * Tax Computation: Group of Taxes * Definition: [Add a tax] - Create an invoice with that tax - Confirm the invoice - Edit the tax by changing "Tax Computation" to "Percentage" - Go to "Accounting / Reporting / Audit Reports / Journal Report" **Issue:** A KeyError is raised. **Cause:** While generating the data, a group of taxes is found in the journal items. When trying to retrieve its info from the dict listing the groups of taxes, its ID is not found but the system assumes that it's present. opw-6377465 Forward-Port-Of: odoo/enterprise#125291
This fix ensures German POS fiscal transaction cancellations can proceed even when the original active transaction has missing receipt details. It prevents rejection by the fiscal service while keeping existing transaction data unchanged when available.
Original PR description
When cancelling active transactions, the schema was forwarded as-is from the listed transaction. ACTIVE transactions can have an empty schema, and Fiskaly rejects the cancellation PUT with:
{
"code": "E_TX_NO_TYPE_DEFINED",
"message": "`schema.raw.process_type` must be defined for
updating or finishing a transaction",
"status_code": 409,
"error": "Conflict"
}
Fall back to a minimal CANCELLATION receipt schema when the transaction has no schema, while preserving any schema that is already present.
opw-6345005
Forward-Port-Of: odoo/enterprise#122130The AI icon now appears consistently in areas such as Knowledge, Discuss, Website SEO, and Social posting. This fixes a visual issue where the icon could be missing or incorrectly treated as a custom icon, improving clarity for users interacting with AI features.
Original PR description
__Before commit__ Following odoo/enterprise@866597419, the AI icon was not showing in the Knowledge WysiwygArticleHelper because the icon was set in the CSS on the `.oi-ai-logo` elements. __After commit__ The AI icon is now set everywhere using `data-icon="oi-ai-logo"`. <img width="1129" height="530" alt="image" src="https://github.com/user-attachments/assets/572e4d3b-2926-40e8-bfd2-cd6d1aa47e11" /> task-6377407
Payroll decimal precision settings will no longer be reset to default values when the module is upgraded. This protects company-specific payroll configuration and prevents silent loss of user adjustments.
Original PR description
decimal.precision records are user-configurable settings that may be adjusted per company needs. With noupdate="0", every module upgrade resets the 'Payroll' and 'Payroll Rate' precision values back to their defaults, silently discarding any customization made by the user. This is inconsistent with the standard pattern used across Odoo modules. For example, the 'quality' module correctly loads its decimal.precision records with noupdate="1". The same convention is followed in core addons such as 'product' and 'account'. The forcecreate="True" attribute already ensures the records are created on fresh installations, so noupdate="1" only prevents overwriting existing values on upgrade — which is the expected behavior for configuration data. Forward-Port-Of: odoo/enterprise#120509
This fix makes status labels in payroll-related dropdown badges readable again, such as states shown on employee forms. It helps users quickly understand record statuses without confusion or visual obstruction.
Original PR description
Users are unable to read the text labels for record states (such as employee form state). This fixes the problem. task-6432088
This fixes a false collaboration error that could appear while automated Knowledge tours were running, even though collaboration was not involved. The change helps keep test results reliable and reduces noise in build validation.
Original PR description
This aims to fix Runbot build error #937788 ([1]) which wasn't fully fixed by commit [2] (see error #944595 ([3])). A collaboration error was thrown during a tour which makes no use of collaboration. Commit [2] made sure the bus from the previous test didn't persist when running this tour so it doesn't interfere, but it didn't fully reset it. [1]: https://runbot.odoo.com/odoo/runbot.build.error/937788 [2]: https://github.com/odoo/enterprise/commit/a6050dd60c587d09443907bdf955805159dbdb2e [3]: https://runbot.odoo.com/odoo/runbot.build.error/944595 Forward-Port-Of: odoo/enterprise#126195
Studio report editing now preserves an empty paragraph when a user deletes its last character. This prevents accidental layout changes and makes report editing behave more predictably, matching the website builder experience.
Original PR description
Problem: In Studio reports, deleting the last character of a paragraph removes the entire paragraph. Cause: `cleanEmptyStructuralContainers` removes the empty paragraph because it is considered empty. Solution: Disable `cleanEmptyStructuralContainers` for reports same as website builder. Steps to reproduce: - Create a new report. - Add multiple paragraphs. - Leave one paragraph with a single character. - Delete the character. - Observe that the paragraph is removed. task-6368965 Forward-Port-Of: odoo/enterprise#126200 Forward-Port-Of: odoo/enterprise#124834
Polish JPK tax exports now use the vendor bill reference in the purchase document field when that reference is available. This helps exported tax files match official guidance and reduces the risk of mismatched purchase documentation during reporting.
Original PR description
**Steps to reproduce:** - Install the `l10n_pl_reports` module and switch to a `PL Company`. - Create and confirm a vendor bill with a `Bill Reference` and `Taxes`. - Navigate to Accounting >…
**Steps to reproduce:** - Install the `l10n_pl_reports` module and switch to a `PL Company`. - Create and confirm a vendor bill with a `Bill Reference` and `Taxes`. - Navigate to Accounting > Reporting > Tax Report and select `This Month`. - From the dropdown, click `JPK` > `Export XML`. - Open the generated XML file and observe the `DowodZakupu` field. **Observation:** `DowodZakupu` contains the vendor `Bill Number` even when a `Bill Reference` is set. **Root Cause:** At [1], `DowodZakupu` is populated only with the vendor `Bill number`(`move_name`) instead of using the `Bill reference`(`ref`) when available. **Fix:** This commit ensures `DowodZakupu` contains the `Bill Reference` when it is available in JPK exports. **Reference:** https://www.podatki.gov.pl/media/eqrn3dey/broszura-jpk_vat-z-deklaracj%C4%85-od-1-lutego-2026-r-en.pdf (page 41) [1]: https://github.com/odoo/enterprise/blob/4b0404058b280136f6865090562f95e18d4d7e0b/l10n_pl_reports/data/jpk_export_templates.xml#L208 opw-6299827 Forward-Port-Of: odoo/enterprise#126113 Forward-Port-Of: odoo/enterprise#121117
This update fixes several visual issues where AI and call-related icons could appear misaligned, incorrectly sized, or fail to show in parts of Odoo. Users should see a more consistent interface across AI, Knowledge, Social, Website, Discuss, and VoIP features.
Original PR description
task-6377407
Code cleanup and technical improvements
This update keeps IoT-related screens and controls aligned with a renamed internal interface in the underlying web framework. It is a technical cleanup that helps maintain compatibility and should not change day-to-day user workflows.
Original PR description
In this commit: - The Owl props API has been renamed to useProps. - Updates the affected IoT-related modules accordingly by renaming imports and replacing `props(...)` with `useProps(...)`. Task:6403054 Community PR : https://github.com/odoo/odoo/pull/278327
This update cleans up AI Website code to match project quality standards without changing business functionality. It helps keep the website-building tools easier to maintain and reduces the risk of small code-quality issues affecting future changes.
This update modernizes parts of online bank synchronization and online payment screens to align with the latest Odoo web framework. It is mainly an internal technical refresh, helping keep banking features reliable and maintainable without introducing notable business workflow changes.
Original PR description
- Replace useService("orm") with usePlugin(ORM)
- Convert account_duplicate_transaction_service into
account_duplicate_transaction_plugin; rename
useCheckDuplicateService -> useCheckDuplicatePlugin
- Replace `static props = {...}` with `props = useProps(...)`
- fetch_missing_transactions_cog_menu uses `orm.unscoped.call` instead
of `orm.call` to keep the RPC alive after component
destruction.
task-6350965This update aligns several enterprise app components with a broader internal restructuring of the communication framework. It should not change day-to-day behavior for users, but it helps keep Approvals, Documents, and Knowledge easier to maintain and evolve.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/279133