Tuesday, September 1, 2026
6 changes · master
Enhancements to existing features
Warehouse operators using the Barcode app can now be prompted to combine a receipt with related receipts when scanned products belong to another incoming order. This helps process mixed vendor deliveries without manually identifying each purchase receipt, while keeping the scanned product selected after the receipts are combined.
Original PR description
Purpose ======= When an operator is doing a vendor purchase receipt, they may receive items from different orders without having a direct clear view on which ones they are. They should be able to do…
Purpose ======= When an operator is doing a vendor purchase receipt, they may receive items from different orders without having a direct clear view on which ones they are. They should be able to do their receipt in the Barcode app without wondering about that and just get a suggested batch if items belong to different orders. Functionnality ============== When an operator scans a product which isn't reserved in the currently opened operation, a prop will be displayed to ask the user if they want to batch the receipt with another receipt which contains the scanned product. The user can either batch with another receipt, either add the product or either discard (do nothing, don't add the scanned product.) If they chose to batch with another receipt, both receipts (the current one and the selected one) will be batched together, either in a new batch (if none were already in a batch), either in one of the pickings' batch. If both receipts are already in a different batch, their both batches should be merged together (whihch can result in more than one added picking.) The same thing happens if the user tries to add a product with the `stock.move.line` form view (with the "Add Product" button), the same confirmation dialog will be displayed, and if the user choses to batch, the created move's `picking_id` will be set on the selected picking, and the batch will be opened instead of going back picking. Once the pickings are batched, one of the batched move lines for the scanned product will be incremented and after that, when the batch is opened in the Barcode app, this move line will be auto-selected. So, for the user, the product they scanned before batching the receipt isn't lost, they don't need to re-scan it. Note that this implementation is very basic, it doesn't handle scan of lot/serial numbers nor packages for now. Also note that this feature doesn't require to enable the batch setting, it should work even if this setting is disabled. How suggest receipts to batch are chosen ======================================== For a receipt to appear in the suggest batch pop-up, it should match following requirement - It must share with the opened receipt the same contact, the same company and the same state (to avoid to batch confirmed pickings with draft pickings); - It can't be done nor cancelled. [task-6154300](https://www.odoo.com/odoo/966/tasks/6154300)
Appointment booking pages are easier to create and maintain with tools to copy existing slots or days, edit slots directly from the calendar, and generate fixed-duration time slots while dragging. A new sidebar centralizes booking page management and sharing options, making it simpler for organizers to configure availability and keep long-running appointments tidy.
Original PR description
Sometimes people want to share some specific slots one after the other without having to tediously set them one by one. ## Add a "clone last slot" / "clone last day" action in the list view This…
Sometimes people want to share some specific slots one after the other without having to tediously set them one by one. ## Add a "clone last slot" / "clone last day" action in the list view This eases the set up when most days look the same. The copying is done based on the timezone of the appointment so that the result is always consistent. ## Rework the slot editor ### Custom appointments Previously you could create an appointment via the calendar view, which would allow you to select some slots visually in the calendar before sharing them. We rework this system to be able to edit existing appointments, move and delete slots. This removes the appointment dropdown at the top of the calendar and replaces it with a sidebar where you can create and manage appointments where you are an organizer, which would previously have been listed in the dropdown. From there you can copy the url to share it, enter edition mode to make sure the correct slots are bookable, or edit some basic settings of the appointment type. In this settings form, a new duration field is available that will automatically create slots every X minutes as the user drags. Which is a common thing users want to do for example for house showings. To prevent users from accidentally creating way too many slots at once, this is limited to 24 hours at a time which should be more than sufficient. ### Recurring appointments It is also possible to edit recurring appointments by going to their form using a new stat button. It works very similarly to the custom appointments except slots are only split around midnight. Bookable slots (those shown in the frontend, called "subslots" in this code) are represented inside each slot. Depending on duration and "create slots every X hours" settings of the appointment type. ## Old slots garbage collection To avoid cluttering the slots for long-lived appointments, a new garbage collection mechanism is added to remove slots older ending over 1 week ago, always leaving the last 40 slots so users can have an idea of what the schedule was like on old unused appointment types. task-5072614
Mexican eCommerce customers now choose invoicing through clearer buttons, and invoice details are only shown and required when needed. Company name and RFC collection is moved into the dedicated invoicing flows for checkout, address pages, and POS tickets, making invoicing data easier to capture and store correctly.
Original PR description
Improve the dedicated Mexican invoicing checkout step: - replace the "need invoice" Yes/No radios with two buttons, and only require and show the invoicing fields when an invoice is requested - add the Company Name field here and hide the B2B fields (Company Name + RFC) from the address form, both in checkout and in /my/address - read and save the invoicing data on the order's invoice contact (partner_invoice_id) instead of the main partner - POS ticket screen: Collect RFC through the localisation fields required to invoice task-[6234716](https://www.odoo.com/odoo/project/967/tasks/6234716)
Point of Sale can now use payment methods linked to different currencies, allowing shops to accept payments in more than one currency without blocking POS setup. Cashiers will see the relevant currency per payment method, while order totals remain shown in the POS configuration currency.
Original PR description
In some countries it's common to accept multiple currencies when making sales, but we don't let users open POS configs if they assigned to the POS payment methods for journals which use different currencies. This should let users create payment methods assigned to multiple currencies and then still open the POS. If there are multiple currencies set up on the POS, the payment screen will show the corresponding currency for each payment method. The totals are still shown in the config currency, but when selecting a payment method in a different currency there will be the price in the new currency between brackets on the payment line. Task-[5110998](https://www.odoo.com/odoo/project/1737/tasks/5110998) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Belgian payroll now calculates home-work transport tax exemptions from the amounts actually taxed on payslips, rather than estimates from contract fields. This prevents employees from being overtaxed on some transport benefits or receiving unintended double benefits, improving legal compliance and payroll accuracy.
Features or functions removed from Odoo
The employee planning portal and planning preview have been removed to simplify how employees access shift information. Internal users invited by email can still view and unassign shifts, and shift assignment emails now include a planning report attachment so employees can see shift details directly from the email.
Original PR description
**Remove employee planning portal** We are moving to a lightweight user flow, so the employee planning portal is removed. - Internal users (invited by email) can still view and unassign shifts. - Removed planning preview from the UI. - Added shift details report in the new shift email so users can easily see shift information. - This change helps keep the system simple and easy to use. **Attach planning report in shift assign email** When a shift assign email is sent,added the planning report as an attachment so resources can directly see shift details from the email without needing to add it to their calendar. If a shift has multiple resources, the same planning report (covering all assigned resources) is attached once per email, allowing employees to understand shared shift allocation. From a technical point of view, we do not create separate attachments for each resource, which helps save space. task-5259643
Original PR description
The withholding tax exemption for the employer intervention in home-work transportation costs (500 EUR/year - 41.70 EUR/month for income year 2026) was estimated from contract fields (car_atn,…
The withholding tax exemption for the employer intervention in home-work transportation costs (500 EUR/year - 41.70 EUR/month for income year 2026) was estimated from contract fields (car_atn, private_car_employee_kilometer) instead of the amounts actually taxed on the payslip. As a consequence: - The fuel card for daily commute was fully taxed: the employee never received the exemption they are legally entitled to. - The private car reimbursement was paid net, never added to the taxable base, yet it still granted the exemption on the yearly taxable: a double benefit. - A bike allowance paid above the exempt rate per km (0.37 EUR/km in 2026) was never taxed. The exemption is now computed from a new TRANSPORTATION_BASE salary rule category accumulating the taxable transportation amounts of the month: - ATN.CAR and FUEL_CARD_COMMUTE (already taxed) are tagged with the category. - New hidden rules CAR.PRIV.TAX and CYCLE.TAX fictively add the private car reimbursement and the above-rate bike excess to the withholding base, after ONSS and before the gross totals, while the reimbursements themselves remain paid net. - TRANSPORT_TAX_DED becomes -min(yearly taxable, yearly threshold, 12 x monthly transportation base), including the transport lines of already validated payslips of the same month so that non-periodic (regularisation) payslips preserve the monthly totals. The termination fees variant uses the category without x12, its base being annual. The obsolete helper _get_be_withholding_taxes_transport_deduction is removed, and the affected payslip validation expectations are updated to the corrected amounts. task-6388103 Forward-Port-Of: odoo/enterprise#124644