Daily updates from Odoo
Monday, September 29, 2025
34 changes
6 changes
Enhancements to existing features
The tax search view now includes the tax amount field, so users can find taxes by entering their configured percentage or fixed amount in the search bar. This makes tax setup easier to navigate and reduces time spent locating the right tax records.
Original PR description
This commit improves the usability of the tax search view by including the `amount` field. Users can filter taxes based on their configured percentage or amount directly from the search bar. task-5088050 Forward-Port-Of: odoo/odoo#227131
Hong Kong Payroll users can now download the IR56B report as an XML file directly from the relevant payroll screens. This makes statutory reporting preparation easier by reducing manual steps to retrieve the required file.
Original PR description
Add ir56b report download button for downloading .xml file in Hong Kong Payroll. task - 5081474 Forward-Port-Of: odoo/enterprise#95294 Forward-Port-Of: odoo/enterprise#95013
Repair orders now create required quality checks much faster when many quality rules exist. This reduces long delays or timeouts in large databases, improving day-to-day repair processing performance.
Original PR description
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when…
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when processing linear the records to compute the intersection between the all points and the points that should be associated with the repair. This commit rewrites `_create_quality_checks_for_repair` to use a `search` instead if necessary, to offload the intersection search in the database. We also split the ids to not inject a large list of ids in the query. Benchmark --------- For a database that will have 500k `quality.point` that satisfies the domain of `quality.point._get_domain`, the invocation of `_create_quality_checks_for_repair` for creating a Repair takes (excluding the `create` call time): | | Before | After | |---------|------------------|-------| | Timings | Timeout (15+min) | 1 min | Reference --------- opw-4980036 Forward-Port-Of: odoo/enterprise#95631 Forward-Port-Of: odoo/enterprise#91729
Italian e-invoice imports now keep the document type from supplier bill XML without relying on whether the entry is an incoming or outgoing invoice. This reduces duplicate document type records and helps imported invoices be classified more consistently.
Original PR description
In the FatturaPA XML, the Document Type (Tipo Documento) doesn't indicate the direction of the journal entry. A `TD01` can be an `in_invoice` or `out_invoice` depending on whether the company is set to be the seller or the buyer. That's what we consider when importing invoices from the EDI. - saved the `l10n_it_document_type` from the imported bills' XML - removed the filter in the view - removed the `l10n_it_document_type` duplicates that just differed by `l10n_it_document_type.type` - updated the invoices to point to the original `l10n_it_document_type` if there were duplicates We will have to remove the field in `master` See odoo/upgrade#8484 Forward-Port-Of: odoo/odoo#228802 Forward-Port-Of: odoo/odoo#225425
Restaurant point-of-sale users can now retry kitchen receipt printing when a printer issue occurs. The retry only sends the receipt to printers that failed previously, avoiding duplicate prints from printers that already succeeded.
Original PR description
Before this commit: = - There was no option to retry printing kitchen receipts if a printer failed. After this commit: = - Users can now manually retry printing kitchen receipts that failed due to printer issues. - The `Retry` button targets only the printers that previously failed, ensuring other successful prints are not repeated. Task: 4717776 Forward-Port-Of: odoo/odoo#206432
EPSON receipt printer setup can now derive the secure printer address from the printer serial number when no IP address or URL is provided. This makes configuration easier for businesses using EPSON's Automatic Certificate Update option and helps support HTTPS connections without manual address entry.
Original PR description
On EPSON printers, we can enable an option ('Automatic Certificate Update') to get a certified (https) url resolving to the ip address of the printer. This domain is computed based on the serial number of the printer.
We updated the configuration to compute the domain if a serial number has been provided instead of an IP address or an url.
Task: 4384790
Forward-Port-Of: odoo/odoo#228844
Forward-Port-Of: odoo/odoo#2287105 changes
Enhancements to existing features
Tax records can now be found by entering their configured percentage or fixed amount in the search bar. This makes it faster for accounting users to locate the right tax setup without browsing through tax lists manually.
Original PR description
This commit improves the usability of the tax search view by including the `amount` field. Users can filter taxes based on their configured percentage or amount directly from the search bar. task-5088050 Forward-Port-Of: odoo/odoo#227131
Hong Kong Payroll now includes a button to download IR56B report files in XML format. This makes it easier for payroll teams to retrieve the required tax reporting file directly from the relevant report screen.
Original PR description
Add ir56b report download button for downloading .xml file in Hong Kong Payroll. task - 5081474 Forward-Port-Of: odoo/enterprise#95294 Forward-Port-Of: odoo/enterprise#95013
Repair creation is now faster when many quality rules are present. The change moves heavy matching work to the database and avoids oversized queries, reducing long delays or timeouts for large quality setups.
Original PR description
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when…
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when processing linear the records to compute the intersection between the all points and the points that should be associated with the repair. This commit rewrites `_create_quality_checks_for_repair` to use a `search` instead if necessary, to offload the intersection search in the database. We also split the ids to not inject a large list of ids in the query. Benchmark --------- For a database that will have 500k `quality.point` that satisfies the domain of `quality.point._get_domain`, the invocation of `_create_quality_checks_for_repair` for creating a Repair takes (excluding the `create` call time): | | Before | After | |---------|------------------|-------| | Timings | Timeout (15+min) | 1 min | Reference --------- opw-4980036 Forward-Port-Of: odoo/enterprise#95631 Forward-Port-Of: odoo/enterprise#91729
Italian electronic invoices now keep the document type from imported XML without relying on whether the entry is a customer invoice or vendor bill. This reduces duplicate document type records and helps imported invoices be classified more accurately.
Original PR description
In the FatturaPA XML, the Document Type (Tipo Documento) doesn't indicate the direction of the journal entry. A `TD01` can be an `in_invoice` or `out_invoice` depending on whether the company is set to be the seller or the buyer. That's what we consider when importing invoices from the EDI. - saved the `l10n_it_document_type` from the imported bills' XML - removed the filter in the view - removed the `l10n_it_document_type` duplicates that just differed by `l10n_it_document_type.type` - updated the invoices to point to the original `l10n_it_document_type` if there were duplicates We will have to remove the field in `master` See odoo/upgrade#8484 Forward-Port-Of: odoo/odoo#228802 Forward-Port-Of: odoo/odoo#225425
Point of Sale Epson printer settings can now use a printer serial number to automatically compute the secure certificate domain. This makes HTTPS printer configuration simpler and reduces the need to manually enter an IP address or URL.
Original PR description
On EPSON printers, we can enable an option ('Automatic Certificate Update') to get a certified (https) url resolving to the ip address of the printer. This domain is computed based on the serial number of the printer.
We updated the configuration to compute the domain if a serial number has been provided instead of an IP address or an url.
Task: 4384790
Forward-Port-Of: odoo/odoo#228844
Forward-Port-Of: odoo/odoo#2287106 changes
Enhancements to existing features
The German DateV export has been optimized to process large accounting exports much faster. This reduces waiting time for finance teams when exporting high-volume accounting data, with testing showing export time cut by more than half on around one million entries.
Original PR description
The DateV export implementation is known to be slow. This commit improves performance by relying on SQL queries to fetch the data instead of using the ORM. Based on profiler results, the `record.__get__()` call was the slowest part. By converting records to dicts, we avoid `record.__get__()` completely, resulting in a massive performance improvement. - Tested with ~1M move lines: performance improved from ~150s to ~70s
The Belgian payroll accounting test was updated to reflect that a work entry type is now required. This keeps internal validation aligned with the latest payroll requirements and helps prevent test failures during future changes.
Original PR description
Adjusted the test in order to follow the new requirement of work entry type Task-5075308
The Helpdesk demo data now includes realistic message exchanges for three sample tickets, helping users better understand response time metrics in demo environments. The update also ensures ticket acknowledgment emails appear before the customer conversation, making the sample ticket history clearer and more accurate.
Original PR description
[IMP] helpdesk: add demo data in helpdesk module - Added messages in 3 tickets for demo data of the first hour to respond and the average hour to respond. - ticket 1: Warranty (Sent 2 hours later,…
[IMP] helpdesk: add demo data in helpdesk module - Added messages in 3 tickets for demo data of the first hour to respond and the average hour to respond. - ticket 1: Warranty (Sent 2 hours later, ticket creation) User: Thank you for your inquiry. Our products typically come with a one-year limited warranty. For more details, could you specify which product you're interested in? (Sent 30 minutes later) Customer: I'm interested in purchasing a desk. Does the warranty cover assembly-related issues? (Sent 1.5 hours later) User: Yes, our warranty covers any defects related to assembly or materials. Please let us know if you need assistance with your purchase. (Sent 2 hours later) Customer: That's great to hear. Could you also provide information on extended warranty options? (Sent 1 hour later) User: We offer extended warranty options for up to three years. Feel free to contact us for more details and pricing. (Sent 1 hour later) Customer: Thank you for the information. I'll consider the extended warranty option for my desk purchase. - same as the above ticket added messages in the below two tickets: 1. Lost key 2. Table legs are unbalanced task-3566757
Field service tasks marked as under warranty now set related sales order line prices to zero when appropriate. If the warranty status is removed, the original product pricing is restored, helping ensure customers are billed correctly without manual price changes.
Original PR description
- When a task is marked as under warranty, the related sale order line's price is set to 0, unless the task is completed, the sale order is locked, or the order line has already been fully invoiced. - If the warranty is removed, the original product prices are restored. task-4755822
Internal users can now access Helpdesk tickets when they are directly connected to them, such as being the creator, linked customer contact, or a follower. This helps employees see the tickets relevant to their work while keeping access limited to appropriate records.
Original PR description
This rule ensures internal users can access helpdesk tickets if: - They are the creator of the ticket, - They are the partner linked to the ticket, - They are followers via the team or directly on the ticket. task-4586753
The Indian reports module now shows the IRN number in a more appropriate location on vendor bill forms instead of disrupting the title area. This keeps the bill layout consistent with standard Odoo forms and makes the number easier to copy when needed.
Original PR description
During testing in 19, I saw that the IRN field was in the title and that totally disturbs the standard layout of how a vendor bill form should look like in Odoo. In order to easily copy paste we add a class text-break (l10n_ec_edi has the same case for the authorization number) Forward-Port-Of: odoo/enterprise#95454
11 changes
Enhancements to existing features
Hong Kong Payroll now includes a dedicated button to download IR56B report files in XML format. This makes it easier for payroll users to retrieve the required tax reporting file directly from the relevant screens.
Original PR description
Add ir56b report download button for downloading .xml file in Hong Kong Payroll. task - 5081474 Forward-Port-Of: odoo/enterprise#95294 Forward-Port-Of: odoo/enterprise#95013
The tax search screen now includes the configured tax amount in search results. This makes it easier for users to quickly find taxes by their percentage rate or fixed amount directly from the search bar.
Original PR description
This commit improves the usability of the tax search view by including the `amount` field. Users can filter taxes based on their configured percentage or amount directly from the search bar. task-5088050 Forward-Port-Of: odoo/odoo#227131
The point of sale closing process has been reorganized so order cancellation is handled in a separate, reusable step. This does not change the cashier experience, but it makes future customizations easier for businesses with specialized closing workflows.
Original PR description
In this commit: =============== - Extract the order cancellation logic during session closing into a new method `cancelOrders`. - This makes it possible to override the method in other modules if needed. Task: 4966693 Related Enterprise PR: https://github.com/odoo/enterprise/pull/95074
Employee-related version records now automatically track changes to most business-relevant fields across HR, payroll, contracts, attendance, sign, and localization modules. This improves auditability by making it easier to see what employee data changed, when it changed, and supporting stronger compliance records.
Original PR description
Most fields in hr.version represent business-relevant employee data that should be tracked to ensure a complete audit trail. This commit adds `tracking=True` by default on hr.version fields across community and enterprise modules. task-5022109 Forward-Port-Of: odoo/enterprise#92601
New tables added on the restaurant floor screen now receive a number after the highest existing table number instead of reusing gaps from deleted tables. This makes table numbering more predictable for staff and avoids confusion when tables have been removed.
Original PR description
Before this commit: ------------- - When adding a new table in the floor screen, the system reused missing number. - For example, if table 2 was deleted, the next added table would again be number 2. - Logic: find the minimum missing number starting from 1. After this commit: -------------------- - A new table in the floor screen always gets the next number after the biggest existing one. - For example, with tables [1, 3, 4], the next table becomes 5 (not 2). Task-5056800
Employee history records now track changes to more business-relevant fields by default. This strengthens audit trails for employee information across HR, attendance, and work entry areas, making it easier to review what changed and when.
Original PR description
Most fields in hr.version represent business-relevant employee data that should be tracked to ensure a complete audit trail. This commit adds `tracking=True` by default on hr.version fields across community and enterprise modules. task-5022109 Forward-Port-Of: odoo/odoo#223342
Payroll payslip line and worked days reports have been adjusted so users can no longer edit report data directly. This helps preserve payroll data accuracy while making the reports easier to navigate and search.
Original PR description
-In payslip line report, some fields can be edited, which should not be allowed. -Views have been adjusted to prevent the navigation from pivot to list view. -Search view has been modified for easier data reaching. Forward-Port-Of: odoo/enterprise#94284
The Documents screen can now show a larger fixed list of related items in its selector, so users can see all relevant options without needing an unavailable “Search more” action. This keeps existing behavior unchanged elsewhere while improving visibility in Documents.
Original PR description
In Documents, we have a static list of 9 items to show with this widget. As there is no "Search more" available, and we're in stable, this is the minimal change to not change behavior. Task-5075200 See related ENT PR (includes an integration test). Forward-Port-Of: odoo/odoo#227509 Forward-Port-Of: odoo/odoo#226608
Italian electronic invoice imports now use the document type from the XML without relying on whether the invoice is incoming or outgoing. This reduces duplicate document type records and helps bills and invoices be classified more consistently during import.
Original PR description
In the FatturaPA XML, the Document Type (Tipo Documento) doesn't indicate the direction of the journal entry. A `TD01` can be an `in_invoice` or `out_invoice` depending on whether the company is set to be the seller or the buyer. That's what we consider when importing invoices from the EDI. - saved the `l10n_it_document_type` from the imported bills' XML - removed the filter in the view - removed the `l10n_it_document_type` duplicates that just differed by `l10n_it_document_type.type` - updated the invoices to point to the original `l10n_it_document_type` if there were duplicates We will have to remove the field in `master` See odoo/upgrade#8484 Forward-Port-Of: odoo/odoo#228802 Forward-Port-Of: odoo/odoo#225425
The Documents details panel now shows the full list of available model labels instead of a shortened static list. This makes it easier for users to see their options immediately without guessing whether more choices exist.
Original PR description
As the list is static and there are only a few and searching for more is not supported, this enables to show all labels so that users don't have to guess what is available or not. Task-5075200 Forward-Port-Of: odoo/enterprise#94934 Forward-Port-Of: odoo/enterprise#94180
Repair orders now create their required quality checks much faster when a company has a very large number of quality control points. This reduces long waits or timeouts during repair creation, improving reliability for high-volume quality setups.
Original PR description
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when…
Description ----------- Creating a repair creates new `quality.check` based on `quality. point`s. When you have many matching points to explore, the `filtered_domain` can be pretty slow when processing linear the records to compute the intersection between the all points and the points that should be associated with the repair. This commit rewrites `_create_quality_checks_for_repair` to use a `search` instead if necessary, to offload the intersection search in the database. We also split the ids to not inject a large list of ids in the query. Benchmark --------- For a database that will have 500k `quality.point` that satisfies the domain of `quality.point._get_domain`, the invocation of `_create_quality_checks_for_repair` for creating a Repair takes (excluding the `create` call time): | | Before | After | |---------|------------------|-------| | Timings | Timeout (15+min) | 1 min | Reference --------- opw-4980036 Forward-Port-Of: odoo/enterprise#95631 Forward-Port-Of: odoo/enterprise#91729
3 changes
Enhancements to existing features
The tax search now includes the configured tax amount, so users can quickly find taxes by entering a percentage or fixed amount in the search bar. This makes tax setup and review faster, especially for companies with many tax records.
Original PR description
This commit improves the usability of the tax search view by including the `amount` field. Users can filter taxes based on their configured percentage or amount directly from the search bar. task-5088050 Forward-Port-Of: odoo/odoo#227131
The update aligns enterprise localization tests with a recent change that adds delivery party information to UBL electronic documents. This helps ensure electronic invoice and related document checks remain reliable for affected localizations, especially Peru.
Original PR description
The community commit introduced the `<cac:DeliveryParty>` element under `<cac:Delivery>` in UBL XML. This enterprise commit improves test coverage for the element and updates existing UBL tests that were failing due to the additional tag. ---- Community PR: odoo/odoo#223756 task-5022404
This update improves how borders are carried into emails so images and styled content appear as intended. It helps ensure email designs remain visually consistent for recipients across email clients.
Original PR description
This commit ports the following fixes to `convert_inline` of `mail`: - https://github.com/odoo/odoo/commit/8923f32426fc64e90db249fad47d7ca7e338adef [FIX] web_editor: adapt border-style value based on border widths - https://github.com/odoo/odoo/commit/7de31c6261d2fe9f58b0c6cb635977e77eecd9d6 [FIX] web_editor: ensure image border visible in emails --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
3 changes
Enhancements to existing features
This update restructures how product stock valuation fields are calculated so custom modules can adapt the behavior more easily. It mainly benefits implementations that need tailored inventory accounting logic without changing core code.
Original PR description
FWP of https://github.com/odoo/odoo/pull/160201 cc @pfertyk @svs-odoo --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian POS fiscal blackbox devices are now read more efficiently to avoid delays caused by repeated serial port timeouts. The update also improves device detection and buffer handling, reducing the risk that a blackbox is mistaken for another connected device.
Original PR description
This commit is a backport of some parts of odoo/enterprise#93614. The goal is to ensure that we don't read too many different times from the serial port, as each read has a timeout of 3 seconds: if 2 read fail, we exceed the longpolling's timeout. We then backport the `read_until(char)` instead of `read(n)` allowing us to read not more than once (except for the lrc, which is read only if first read is successful). We also backport the supported retry, which ensures we detect a blackbox when we plug one (prevent detecting it as an Adam Scale), and correctly flush buffers after writing/reading. Task: 5116854
Link tracking redirects now encode certain repeated dot characters that some web server setups may block as suspicious. This helps ensure tracked links continue to open reliably for users behind stricter nginx configurations.
Original PR description
Purpose ======= It has been reported that some nginx configuration detect '...' as malicious. When testing, encoding the '...' solve the issue, and so we force the encoding for the redirection URL. Task-4920533