Friday, October 17, 2025
8 changes · saas-18.4
Enhancements to existing features
Refreshing webhooks from the settings now clears the existing product links from the point of sale before sending a fresh menu to UrbanPiper. This helps ensure the external ordering platform receives an up-to-date menu and avoids stale product mappings.
Original PR description
Following this commit: - On refreshing webhooks from settings, products will be unlinked from pos. - Fresh menu will be updated to Urbanpiper platform task-5163764 Forward-Port-Of: odoo/enterprise#97000
Payroll users can now see and manage contract offers directly from the employee form without needing recruitment permissions. This gives payroll officers the access they need for offer and contract work while keeping responsibilities aligned with their role.
Original PR description
Previously, the Offers smart button on the employee form was only available to recruitment users. This limited visibility for payroll officers who also need access to contract offers. This commit Changes the button visibility to hr_payroll.group_hr_payroll_user in hr_employee_views.xml. Adds missing access rights in ir.model.access.csv for hr.group_hr_user (inherited by payroll users). Updates the module manifest to include the new security CSV. The goal is to ensure payroll users can access and manage offers directly without requiring recruitment rights. task-5085078
Users can now choose which IoT printer is used for shipping labels instead of the system automatically using the first available matching printer. This helps warehouses route labels to the correct printer for each operation type and avoids confusing errors when no printer is linked.
Original PR description
Printing shipping labels is performed from the backend, once the shipping info are received in the chatter. The printing command is sent to the frontend via the user bus, then though longpolling to the iot box. This commit adds the possibility to select a printer instead of choosing automatically the first (with the right report associated) on the list. As the change is made on a stable version, we are using system parameters to store the selected printer without adding a new field. We associate a printer with the picking type, in order for to be able to have different printers by default on different picking types. backport of odoo/enterprise#86818 Task: 4792491 Forward-Port-Of: odoo/enterprise#97269 Forward-Port-Of: odoo/enterprise#95794
Changing inventory valuation settings on very large product categories is now much faster. This reduces delays and timeouts for businesses managing many product variants, making stock accounting configuration changes more reliable.
Original PR description
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish…
Changing a product.category's valuation from manual to real-time or real-time to manual does mainly two things. The first one is emptying the current stock and valuation. The second is to replenish the stock according to the new valuation. This process can be heavy when the number of product.products related to the active product.category is big. This can happen when product.attributes are set to "Creation: Instantly" for instance. This commit aims at improving the overall speed of this change in some cases. A first optimization is to use `product_tmpl_id` to retrieve the `product_variant_ids`. When there are a lot of products, it's faster to explicitely use the delegated field `product_tmpl_id`. This avoids lots of calls to `__getitem`/`__setitem__` in `_compute_related`. The downside of doing this is that subsequent calls to `self.product_variant_ids` are gonna raise a CacheMiss. So we have to explicitely use `product_tmpl_id.product_variant_ids` every time. We argue that it's not really an issue here as retrieving the variant_ids from a product.product itself is not that frequent in the codebase. A second optimization is to avoid calling `product.qty_available` in `_compute_value_svl` in case `avg_cost = 0`. With an avg_cost of 0, the total_value is always going to be 0. So there's no point in calling the heavy compute method `_compute_quantities` to retrieve `qty_available` here. #### speedup In a database with 228 000 product.products linked to the same product.category, the time to switch the category valuation from manual to real-time: +15min (timeout) -> 18s --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231206
This update adds test coverage for Indian electronic invoicing when exports are made without a Letter of Undertaking and prices already include tax. It helps ensure the taxable base is reported consistently with the invoice total, reducing the risk of incorrect compliance data.
Original PR description
Add test for export without LUT and price included tax, but base should be equal to invoice total. Forward-Port-Of: odoo/odoo#231943 Forward-Port-Of: odoo/odoo#231614
Bank journals now highlight invalid statements more clearly and avoid showing misleading statement or balance information. This helps accounting teams spot issues sooner, keep imported statement files attached, and prevent accidental deletion of transactions linked to valid statements.
Original PR description
This commit brings more clarity on invalid statements. The reflected changes are : - Hiding Last Statement if its date is <= Lock Date - "Invalid Statement(s)" alert on the journal dashboard - Red balance amount and warning in the BankRecW when it contains invalid statements (clicking on the warning applies the filter) - Possibility to choose a statement when creating a transaction - Invalid statement warning in the statement creation form - Displays all warnings in the statement form view - When a file generate a statement, it is kept in its attachments - Prevent deletion of transactions if they belong to a valid statement - Empty statement are not taken into account for the dashboard Last Statement and the BankRecW balance task-4413473 Forward-Port-Of: odoo/odoo#222447
Bank statement screens now make invalid statements easier to spot and act on, including dashboard alerts, warning indicators, and clearer balance highlighting. The update also protects valid statement transactions from deletion and keeps imported statement files attached for better traceability.
Original PR description
* accountant|bank_statement_import This commit brings more clarity on invalid statements. The reflected changes are : - Hiding Last Statement if its date is <= Lock Date - "Invalid Statement(s)" alert on the journal dashboard - Red balance amount and warning in the BankRecW when it contains invalid statements (clicking on the warning applies the filter) - Possibility to choose a statement when creating a transaction - Invalid statement warning in the statement creation form - Displays all warnings in the statement form view - When a file generate a statement, it is kept in its attachments - Prevent deletion of transactions if they belong to a valid statement - Empty statement are not taken into account for the dashboard Last Statement and the BankRecW balance task-4413473 Forward-Port-Of: odoo/enterprise#92078
This update adjusts tax rounding behavior for Mexican electronic invoicing so totals align more reliably with localization requirements. It helps reduce discrepancies in invoices and tax reporting when amounts are rounded.
Original PR description
Forward-Port-Of: odoo/enterprise#97220 Forward-Port-Of: odoo/enterprise#96809