Friday, November 21, 2025
12 changes · master
Enhancements to existing features
Brazilian service invoices can now include the delivery address as the place where the service was provided. This helps calculate taxes and generate electronic service invoices more accurately when services are sold in one city but delivered in another.
Original PR description
Purpose: In Brazil, it is common for companies to sell services in one city and provide the services in another city, thus, it is necessary to inform the place of service provision in NFS-e. Users can specify where the service was provided through the delivery addresss on either sale order or invoice. The delivery address will be sent in the request to the tax calculation and edi. Outline of additional attributes being sent: - header.locations.rendered.address.street --> partner_shipping_id.street - header.locations.rendered.address.neighborhood --> partner_shipping_id.street2 - header.locations.rendered.address.zipcode --> partner_shipping_id.zip - header.locations.rendered.address.cityName --> partner_shipping_id.city - header.locations.rendered.address.state --> partner_shipping_id.state_id.code - header.locations.rendered.address.countryCode --> partner_shipping_id.country_id.l10n_br_edi_code task-5124608 Forward-Port-Of: odoo/enterprise#99214
UrbanPiper menu synchronization now clears existing product menu links before rebuilding them. This helps ensure the menu sent from Odoo to UrbanPiper is accurate and avoids stale or mismatched product connections.
Original PR description
Following this commit: - Flush out all existing UrbanPiper product menu linkages and performs a fresh menu sync. task-5231247 Forward-Port-Of: odoo/enterprise#99982 Forward-Port-Of: odoo/enterprise#98994
Manufacturing planners can now quickly filter the MPS dashboard by product category. This makes it easier to organize production planning, find relevant products faster, and avoid manually creating category filters.
Original PR description
A quick access filter for `Product Category` is added to the `MPS dashboard`. This allows users to easily organize and plan products by category, saving time and eliminating the need to manually create filters for product categories. The change enhances usability and improves efficiency in daily production planning. TaskID-5179615
Point of Sale now loads IoT Box information in advance so connected device requests can keep working when connectivity is limited. This also reduces repeated database calls, improving reliability and efficiency for stores using IoT hardware.
Original PR description
In order to allow iot requests to work offline, and also reduce the amount of orm requests sent to the db, we now preload IoT Box records in the `iot_http` service. Task: 5258886 Forward-Port-Of: odoo/enterprise#99910
Salary attachment estimates now use the expected number and schedule of payslips instead of a simple monthly estimate. This gives payroll teams a more accurate projected end date for salary adjustments, especially when employees are paid on non-monthly schedules.
Original PR description
Instead of having the date estimation of a payslip as months, it will be as payslips. Also calculating the end date by having into account the payment schedule of the payslips. task-5135624
The Colombian electronic invoicing PDF layout now displays the QR code more clearly and consistently. The QR code is included on every page, making invoices easier to verify and reducing confusion when documents span multiple pages.
Original PR description
This commit improves QR display in invoice layout. It also ensures that the QR shows on every page of the PDF. task-5239536
This update improves the Six payment terminal integration for Point of Sale by adding an end-of-day balance report command and support for refunds or payment reversals. It also speeds up transaction handling, improves receipt formatting, and updates the underlying terminal libraries for better reliability.
Original PR description
Based on the feedback received from our partners we are missing some features in our Six terminal integration. This PR adds them 1. Send balance command to print end-of-day report 2. Adapt the code to reduce the sleep delay after each transaction 3. Refunds/payment reversals for Six + it also adds some minor code improvements like a) Card brand is now saved in pos payments instead of the card number b) Card number is still being sent to PoS and while not stored in v17 will be stored from v18 c) The code of ctypes_terminal_driver and Six Driver was improved to reuse the buffer size and improve the buffer usage d) Fixes the receipt size for the Six terminals e) updates the Six C libraries used to the latest version to get all the newest fixes Related C PR: https://github.com/odoo/worldline-lib/pull/9 Related community PR: https://github.com/odoo/odoo/pull/236488 Forward-Port-Of: odoo/enterprise#98203 Forward-Port-Of: odoo/enterprise#96748
Belgian SODA imports can now use department information from social secretariat files to assign analytic accounts automatically. This helps businesses analyze payroll-related entries by department, while files without department data continue to import as before.
Original PR description
Maps the SODA file's `<Department>` field (from the social secretariat) to an analytic account. This addresses customer requests to use employee department data for analytics. Ignores mapping if the `<Department>` field is absent. task-5126179
Rental schedules now stay cleaner by fully excluding canceled rental orders, even when users adjust the confirmed orders filter. Rental orders created from leads also carry over the lead’s tags, helping teams keep sales context and reporting consistent.
Original PR description
- Completely remove canceled rental orders from the schedule view even when removing the confirmed orders filter. - When creating a rental order from a lead, the tags will be copied similar to what happens when creating a normal sale order. task-4384655
Users can now interact with tags while editing rows in list views, bringing list behavior closer to form views. Depending on configuration, clicking a tag can open its form, open a color selector, or do nothing, making tag management faster and more consistent across apps.
Original PR description
In this commit, we add the feature to edit tags when a row is in edition in list view like form view. We also change API options for many2many_tags. According to the selected on_click option, it opens either the color picker or the form view related to the selected record. on_click option can have : - edit_color : to open the color picker if color_field is filled. - open_form : to open the related form view - do_nothing : to do nothing (by default) task~5163167
The EC Sales List report has been redesigned to work more consistently across country-specific versions, with clearer grouping of sales by customer and sale type. This improves reporting flexibility, auditability, and return generation for businesses managing EU sales declarations.
Original PR description
The EC Sales List report and its variants have been refactored to use a custom engine instead of dynamic line generators. This change offers several benefits, including the ability to modify grouping…
The EC Sales List report and its variants have been refactored to use a custom engine instead of dynamic line generators. This change offers several benefits, including the ability to modify grouping keys and better integration with the accounting reports engine. The audit of cell has also been implemented. The key improvement is that report now has a single line with a defined grouping key that can be modified as needed. Two grouping systems have been identified across EC sales reports in localizations: Grouping by partner, displaying the sum of EC sales categories (goods, services, etc.) per partner. Grouping by partner and EC sales category, allowing multiple lines per partner. A custom grouping key (partner_id_and_sale_type) handles this scenario. For code clarity, the generic EC Sales Report has been moved to a separate custom handler. Unlike localization-specific reports based on account tags, this report derives its values from taxes. An additional enhancements is the improved options generation for the report, allowing localization variants to easily declare their requirements. Examples of specific declarations by variants include: - Sale types (e.g., goods, services), with localizations defining required categories. Most of the reports use by default the three main categories, i.e. goods, services, and triangular, but some localization (like l10n_si), adds categories to it. It was therefore decided that variants are responsible for defining which categories are required for them. - Custom names for categories in reports grouped by partner ID and EC sales categories. - Options to display or filter specific EC sales categories. - Formatting for partner VAT and changing partner country codes as needed. EC sales list returns generation has also been slightly refactored. Most localizations just need the EC sales returns to be generated if data are present in the report for the corresponding period. Since most modules shared the same code and multiple issues were found, the commit generalize the generation of this type of return based on what was done for Belgium, i.e. creating EC sales return for the past three months if data are found in these period and if no return already exist. Additional notes: - The filter to select specific sale types has been improved to select all types if none are selected, having therefore a similar behavior than other filters. - For Denmark, partner's vat should not contain the country code according to https://info.skat.dk/data.aspx?oid=392&chk=217608. This behavior has been fixed. - For Ireland, changes has been done to add triangular tag and create EC Sales variant report which makes distinctions for goods/services/triangular sales. task-4260016
Website product imports can now handle larger product catalogs more reliably by processing image files in smaller chunks and reducing memory usage. Long-running imports are less likely to time out, and problematic products can be skipped while errors are reported for follow-up.
Original PR description
The goal of these improvements is to support the import of more products as well as making the entire import process more reliable. The first improvement is the stream and live decompression of files that are directly saved as attachment one by one. This reduces the memory footprint of this process which can be substantial given the quantity and size of images being imported. The second is the heavy use of the '_commit_progress' of crons. This is necessary because the importing of products can be very long due to the creation of many records as well as image resizing. This long process often timed out the old cron which would end up being disabled by the orm. Lastly this process is now more reliable, it can now skip products in case of errors and send a crash report to our server.