Daily updates from Odoo
Tuesday, September 16, 2025
13 changes · master
Enhancements to existing features
Recruitment reports now include an option to exclude duplicate candidate records. This helps teams focus on unique candidates and improves the accuracy of hiring pipeline analysis.
Original PR description
This commit adds the fetching of the `is_obsolete` variable when generating the report and adds the filter 'Exclude Duplicates' in order to filter the unique candidates. [Community PR](https://github.com/odoo/odoo/pull/225578) task-4535862
VoIP user preference settings have been improved to make configuration clearer and more consistent, including for OnSIP users. This helps businesses reduce setup friction and makes it easier for users to manage their calling preferences in Odoo.
Original PR description
Task-5075195 Forward-Port-Of: odoo/enterprise#94319
The Barcode app now better supports putting packages inside other packages, including scanning multiple packages into a new or existing package. Users can also unpack package lines more easily and see package moves grouped by the outermost package, making warehouse operations clearer.
Original PR description
Add some improvement for the pack in pack feature in the Barcode app, like an "Unpack" button or the package lines groupement by their outermost package dest. See commits' message for more details. [task-5065193](https://www.odoo.com/odoo/966/tasks/5065193) Forward-Port-Of: odoo/enterprise#94091
Notifications have been redesigned to be smaller, clearer, and less intrusive for users. They now include a progress indicator so users can easily see when a message will disappear, improving day-to-day usability across affected Odoo apps.
Original PR description
A big part of the notification behaviour that was in the notification service has been move to the component "Notification". With this comes also a visual cleaning of the notification. Smaller, more compact and with a progress bar that show when the notification will disappear. TASK-ID: 4334047 Forward-Port-Of: odoo/enterprise#94561
The point-of-sale order status screen now adapts its layout to the screen orientation, showing a left-to-right timeline on wider displays and the existing vertical view on taller displays. Refined status colors make it easier for staff and customers to understand order progress at a glance.
Original PR description
In this commit:
---------------
- We introduced the order status screen new UI where orders now progress from left to right for a natural timeline flow.
- The color scheme has been refined with lighter and darker tones, making different statuses easier to distinguish at a glance.
- A new vertical separation layout has been added, adapting automatically to screen dimensions:
- If the screen’s height is greater than its width, the older vertical UI will be shown.
- If the screen’s width is greater than its height, the new horizontal UI will be displayed.
task:5033472
| Horizontal seperation | Vertical Seperation |
|--------|--------|
| <img width="475" height="717" alt="image" src="https://github.com/user-attachments/assets/575aefc4-896b-4926-8b58-9d2296b94f54" /> | <img width="475" height="783" alt="image" src="https://github.com/user-attachments/assets/825908be-6bfe-4af0-8a82-552f96a02ad8" /> |Audit working files can now be exported in PDF format, giving auditors the documentation they need when reviewing completed internal audits. This makes audit evidence easier to share and helps support compliance review processes beyond the existing Trial Balance export.
Original PR description
When verifying internal audits that have been done, auditors may request reports of Audit Working files. The working file must be available in PDF. The export currently only contains the Trial Balance with the audit state and last comments (more recent annotation) during the audit. task-id: 4993075 Forward-Port-Of: odoo/enterprise#94449
Adds US-specific profit and loss and balance sheet reports so companies can view financial statements in the format expected under US GAAP rather than generic IFRS-based layouts. Related report tests were adjusted to keep automated checks focused on the intended report variants.
Original PR description
The generic reports are based on International Financial Reporting Standards (IFRS) whereas the US expects reports based on Generally Accepted Accounting Principles (GAAP). This also includes some changes to the account_reports tests to avoid _init_options_variants() from automatically picking these new reports in the tour tests. task-5068369 Forward-Port-Of: odoo/enterprise#94507
Resolved issues and error corrections
Fixed an issue where customers booking paid appointments could be incorrectly told a slot was unavailable when the selected resource still had capacity. This ensures upfront-payment appointment bookings respect the intended simultaneous booking limit and avoids unnecessary checkout failures.
Original PR description
ISSUE ===== Introduced in odoo/enterprise@bce7e94650c337a9046958a7689c81db5b2a4c73 , we now allow configuring a number of max simulatenous appointments per resource / user per slot, when…
ISSUE ===== Introduced in odoo/enterprise@bce7e94650c337a9046958a7689c81db5b2a4c73 , we now allow configuring a number of max simulatenous appointments per resource / user per slot, when manage_capacity is False. However, this broke the booking flow when enabling a payment on the appointment type as well, for resources with capacity > 1. More specifically, as soon as the remaining capacity is lower than the resource's own capacity. STEPS TO REPRODUCE ================== 0. Install payment_demo, in order to be able to test the payment issue. Install website_appointment_sale to ease the testing too. 1. Create an appointment type for 'Resources', enable 'Up-front payment'. 2. Set a new resource with capacity = 2 on the appointment type. 3. Make sure manage_capacity is False, and number of simultaneous appointments (max_bookings) is set to 1. 4. Go to the front end and pick any slot. 5. Fill the form and 'proceed to payment' 6. Try to 'pay now' 7. You get a validation error message telling you that the slot is not available anymore. But it is not the case since it is a new type and new resource. FIX === For resources, created booking lines were setting capacity_used to the resource's capacity, unless shared. (meaning: the resource is completely used, even if the reserved quantity is smaller). It made sense before but not for this new feature. It should only use 1 capacity, as we count the number of different simulatenous appointments, and it is unrelated to the resource's own capacity. When creating the meeting at the end of the regular flow, the computed field on capacity_used on appointment.booking.line will set it to 1 when manage_capacity is False. Hence, no issue will happen there in practice as the meeting is always created in that case and capacity_used updated. However, when enabling a payment, we create a calendar.booking instead, with calendar.booking.lines. And based on those, we evaluate availability when checking the cart before going to payment. Those are simply created from values in the controller, and the model is much simpler. Therefore, we fix the issue by manually setting the capacity_used to 1 when creating the booking lines in the front-end booking flow, in the case of an appointment without capacity management. Task-4963012 Forward-Port-Of: odoo/enterprise#94434 Forward-Port-Of: odoo/enterprise#91700
This fix ensures POS orders receive cancellation confirmations from Worldline payment terminals even if the cashier refreshes the browser during a transaction. It prevents orders from getting stuck and adds clearer terminal error messages to help staff understand payment issues faster.
Original PR description
This PR fixes a bug where the point of sale didn't receive notifications from the Worldline payment terminal for the cancellations if the browser webpage was refreshed How to reproduce: 1. Open a POS session with Worldline terminal 2. Send a transaction to the terminal 3. Refresh the browser webpage before paying 4. Click on "Cancel" on the POS screen --> your order will be stuck and never receive the confirmation This PR removes the check for the iot longpolling action identifier which changes on refresh of the webpage + adds more error messages for Worldline terminals Related PR in v17 -> saas-18.2: https://github.com/odoo/enterprise/pull/94635 task-5075860 Forward-Port-Of: odoo/enterprise#94629
This update fixes access errors that could prevent non-administrator users from opening employee-related information in Appraisals, Planning, and Manufacturing Shop Floor. Affected users can now continue their normal workflows without needing unnecessary administrator permissions.
Original PR description
Forward-Port-Of: odoo/enterprise#94536
This fixes the structure of Swiss ISO20022 payment XML files so bank clearing numbers are placed in the expected nested field. The change helps reduce validation issues when exporting Swiss batch payments, though broader country-specific formatting may still need follow-up work.
Original PR description
### Steps to reproduce: - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor…
### Steps to reproduce: - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor bill for a Swiss partner - Pay with "Swiss ISO20022" - Create a batch payment with that payment and validate - In the XML the field `ClrSysMmbId` contains the clearing number, but it should be in a nested field ([src](https://www.mx-message.com/m/pacs-010-001-05/FIDrctDbt/CdtInstr/Cdtr/FinInstnId/ClrSysMmbId)) ### Cause: The code directly inputs the value of `clearing_number` in `ClrSysMmbId`. ### Solution: Add `MmbId` to contain the clearing number. ### Note: The field `MmbId` when alone is supposed to contain the country's payment system prefix and the clearing number. This commit only input the value of the field `clearing_number` in `MmbId`, so it may be invalid, but at least the architecture is valid. See [this link](https://knowledge.xmldation.com/support/iso20022/general_rules/clearing_codes) for the documentation of `ClrSysMmbId`. This [commit](https://github.com/odoo/enterprise/commit/c277ffa81644b79d95e67a70f7170f5f39c30898#diff-568a46f66108a66d58d845c0e1e00b22db21507ac52576f75b83398112ad10f5) implemented the correct way to set up `ClrSysMmbId` for the Swedish localization. To be always valid, we would need to implement this on all localizations. opw-4872507 Forward-Port-Of: odoo/enterprise#94460
This fixes an error that prevented Ecuadorian delivery guides from being generated when barcode scanning was turned off in Inventory settings. Businesses can now create and print these delivery documents reliably regardless of whether they use barcode scanning.
Original PR description
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch…
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch to the `EC company`. - Uncheck `Barcode Scanner` in the Inventory `settings`. - Create a new warehouse and set the `Entity` and `Emission Point`. - Navigate to Inventory > Operations > Deliveries and create a new delivery. - Add details > mark as Todo > Validate > Generate Delivery Guide. **Error:** `AttributeError: 'stock.move.line' object has no attribute 'qty_done'` **Root Cause:** At [1], the code references `line.qty_done`, but this field is defined in the `stock_barcode` module at [2]. When the Barcode Scanner is `disabled`, the field is not available, leading to the `error`. **Fix:** This commit updates the delivery guide values to use `line.quantity` instead of `line.qty_done` at [1] and at [4]. Since in the `stock_barcode` module at [3], `qty_done` is derived from `quantity`. [1]: https://github.com/odoo/enterprise/blob/ba5b9790f28e2f7eabda22e5992737eab0e82c6e/l10n_ec_edi_stock/models/stock_picking.py#L354 [2]: https://github.com/odoo/enterprise/blob/8c53e50df1cf9dc6d3ca4cae19c39135ac85d4e4/stock_barcode/models/stock_move_line.py#L23 [3]: https://github.com/odoo/enterprise/blob/8c53e50df1cf9dc6d3ca4cae19c39135ac85d4e4/stock_barcode/models/stock_move_line.py#L48-L50 [4]: https://github.com/odoo/enterprise/blob/8b72fdef63f634ccf436b49adbac5c1f9358c127/l10n_ec_edi_stock/views/report_delivery_guide.xml#L165 sentry-6851008674 Forward-Port-Of: odoo/enterprise#93775
The workcenter planning view now shows totals based on the workcenter's defined working hours instead of always showing a full 24-hour day. This gives manufacturing planners a more accurate view of available capacity and helps avoid scheduling confusion.
Original PR description
## **Issue Before This Commit:** In the workcenter planning view, the total hours displayed were misleading, as they always showed 24 hours of the day instead of the workcenter’s defined working…
## **Issue Before This Commit:** In the workcenter planning view, the total hours displayed were misleading, as they always showed 24 hours of the day instead of the workcenter’s defined working hours. This caused confusion for users since the displayed total hours did not match the actual available working time of the workcenter. ## **Steps to Reproduce:** - Create a Manufacturing Order (MO). - Add "Drawer" as the product. - Add a "SEC-ASSEM: [FURN_8855] Drawer" BOM. - Set the quantity to produce as 10. - Confirm the MO and plan it. - Open the planning view and notice that the total hours count incorrectly shows 24 hours instead of the defined working hours. ## **Cause of the issue:** The bug was introduced by this PR (https://github.com/odoo/odoo/pull/205486), as the related changes were not adapted here. Because of that, pill.record.workcenter_id[0] returns an undefined value. ## **With This Commit:** The calculation of total hours has been corrected to consider only the workcenter’s defined working hours. Users now see accurate hours in the planning view, making it easier to plan and schedule work orders reliably. task - 4900885 Forward-Port-Of: odoo/enterprise#93035