Friday, May 2, 2025
12 changes · 18.0
Enhancements to existing features
This update ensures store pickup orders can automatically choose the correct warehouse based on the selected pickup location data. It helps keep order fulfillment aligned with the customer’s pickup choice, reducing manual corrections and routing mistakes.
Original PR description
### Issue: Since 6243dd1f5bfef6a23620a0b06610d6f42ef5ede3, the `warehouse_id` of a picked up in stora so with `pickup_location_data` will not be computed: https://github.com/odoo/odoo/blob/406dc2fd1ee5110c2565c1d4b6d88f6bf0277fc8/addons/website_sale_collect/models/sale_order.py#L13-L22 In fact, it is expected to be set manually via the `_set_pickup_location` and then stay untouched. However, certain flow might want to rely on the compute method to set the warehouse from the `pickup_location_data`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Customer invoice PDFs for India can now show the payment method used, such as card or cash. This gives customers and finance teams clearer payment information on the invoice, while keeping the existing layout unchanged for manual payments.
Original PR description
PURPOSE: - Print the Payment Method used by the customer on the Customer Invoice. SPECIFICATION: - Added functionality in the l10n_in module to display the payment method (e.g., Card, Cash, etc.) on the Customer Invoice PDF. - If a payment is made using a specific method, it will be printed inside the invoice. - For Manual Payment, the standard view will be retained (i.e., no changes to the invoice layout). TASK ID: - 4410103
Resolved issues and error corrections
This update brings the spreadsheet component to a newer version with several fixes for charts, pivot tables, formatting reactions, row and column movement previews, and collaborative cursor updates. Business users should see fewer spreadsheet glitches, more accurate Excel exports, and smoother behavior when working with formatted tables or shared spreadsheets.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/5bdf50484 [REL] 18.0.26 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/5bdf50484 [REL] 18.0.26 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/1f7e62bbe [FIX] chart: avoid useless chart update [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/3ddbaaf12 [FIX] Pivot: allowDispatch invalid pivot dataset [Task: 4756759](https://www.odoo.com/odoo/2328/tasks/4756759) https://github.com/odoo/o-spreadsheet/commit/c51985cf7 [FIX] bottom_bar_statistic: react to change in cell format [Task: 4747031](https://www.odoo.com/odoo/2328/tasks/4747031) https://github.com/odoo/o-spreadsheet/commit/e465f8d12 [FIX] tables: react to change in cell format [Task: 4747031](https://www.odoo.com/odoo/2328/tasks/4747031) https://github.com/odoo/o-spreadsheet/commit/6b7684266 [FIX] header_overlay: restore row/col move preview [Task: 4747268](https://www.odoo.com/odoo/2328/tasks/4747268) https://github.com/odoo/o-spreadsheet/commit/918b3cccc [FIX] xlsx: correctly export aggregated charts [Task: 4714410](https://www.odoo.com/odoo/2328/tasks/4714410) https://github.com/odoo/o-spreadsheet/commit/fbd0b9d49 [IMP] sheetview: lazily re-compute viewports on freeze rows [Task: 3600662](https://www.odoo.com/odoo/2328/tasks/3600662) https://github.com/odoo/o-spreadsheet/commit/7591eddd6 [FIX] grid_overlay: stop interval on error [Task: 4746478](https://www.odoo.com/odoo/2328/tasks/4746478) https://github.com/odoo/o-spreadsheet/commit/f3a606429 [FIX] Collaborative: Send client position on activeSheet change [Task: 4736980](https://www.odoo.com/odoo/2328/tasks/4736980) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Point of Sale now checks updates at the individual record level instead of relying only on the overall order timestamp. This helps ensure order lines, loyalty, event, and sales-related changes are correctly refreshed across devices, reducing missed or stale information during PoS operations.
Original PR description
Previously, record synchronization was based on the pos.order model, so if the write_date of the order was more recent on the server, it was re-downloaded with its sub-records. The problem was that by changing an orderline, the order object was not necessarily updated, so its write_date remained the same. Now all records and their write_dates are compared, so that records can be re-downloaded independently of their order. Trusted config commands are also re-downloaded. The records compared are only those that can be created from the PoS frontend.
Point of Sale now correctly assigns the current session when an order is loaded from a different trusted configuration. This prevents orders from getting stuck without available payment methods, helping cashiers complete payments reliably.
Original PR description
When working with trusted config loading an order from another config lead to an unknown session in the order. So no payment method can be used to pay the order. Now when loading an order from another config, the session is replaced by the current session.
This pull request bundles several fixes and improvements across Odoo, including a correction for express checkout when billing and shipping addresses differ, updates to Spanish and Hungarian tax reporting, and smoother website visitor access. It also improves recruitment attachment search, adds an applicant pool action, modernizes IoT box detection, and tidies common action menus for a clearer user experience.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Vendor bills are now correctly included in Purchase Matching when the vendor is an individual linked to a company. This prevents missing bill lines during purchase reconciliation and helps users match purchases and bills more reliably.
Original PR description
**Problem:** When clicking the button Purchase Matching, in a Vendor Bill, if the vendor is an individual but has a company, the bill will not appear below the Purchase Orders. If the vendor is an…
**Problem:** When clicking the button Purchase Matching, in a Vendor Bill, if the vendor is an individual but has a company, the bill will not appear below the Purchase Orders. If the vendor is an individual without a company, the Purchase Matching button will display everything like it should. **Steps to reproduce:** - Make a Purchase Order, the vendor has to be an individual with a company. - Create a bill for the same product and vendor. - Use the Purchase Matching button on the bill. - The bill is not displayed, but the Purchase Orders are. **Cause of the issue:** https://github.com/odoo/odoo/blob/cc9e7cb92f1a6237a496b9acabd93506a8724a62/addons/purchase/models/account_invoice.py#L143-L144 The partner_id for the Purchase Orders are the current individual vendor, but we are trying to match it with the partner_id of an Account Move Line, which is set to be the commercial partner of the individual, meaning the company, as seen below. https://github.com/odoo/odoo/blob/9e9e992698946b75212040ca0ff812194200a8bf/addons/account/models/account_move_line.py#L481-L483 On the matching table, we use the partner of the Account Move Line, and this is the why filtering on the individual doesn't give any result, if we wanted some we would need to filter on the company. https://github.com/odoo/odoo/blob/45533a1c6a70a3b86cf744a0f950c92d8a99afcf/addons/purchase/models/purchase_bill_line_match.py#L109 **Fix:** The domain was updated to take both the individual and the commercial partner (the company). This ensures that the bill will be found even in we are dealing with an individual that is in a company. opw-4577643
Google Calendar synchronization now checks whether an event has already ended before sending invitations or update emails. This prevents users from receiving unnecessary notifications for past meetings while keeping emails for current and future events unchanged.
Original PR description
### Description of the issue/feature this PR addresses: Prevent sending unnecessary invitation or update emails for events that have already ended by introducing a method to check if an event is over. ### Current behavior before PR: Event updates/ new syncs with google_calendar might trigger email notifications, even for past events, causing useless invitations/ updated invitations to users. ### Desired behavior after PR is merged: Email notifications are only sent for active or future events. Creation-from-sync / Updates to past events that have already ended are no longer triggering emails. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr task-4684432
This fix prevents checkout from changing the warehouse selected for a Click & Collect order. It ensures online orders are fulfilled from the store chosen by the customer, avoiding incorrect deliveries and stock handling.
Original PR description
### Steps to reproduce: - In the settings enable: Click & Collect, Multi Steps Routes - Set up a a demo payment provider - Create a second warehouse for the company of your website - Create a…
### Steps to reproduce: - In the settings enable: Click & Collect, Multi Steps Routes - Set up a a demo payment provider - Create a second warehouse for the company of your website - Create a storable product, put units in stock for WH2 and publish it on the website - As an anonymous portal user, add one unit to your chart using the "pickup in store" button > select warehouse 2 - Click on checkout fill the form and pay #### > The sale order was attached to the warehouse 1 and the associated delivery is therefore erroneous. ### Cause of the issue: Once a product is added to the chart, the sale order is created and since you added it using the pick up in store option, the sale order's warehouse_id and pickup location will be correcty updated by these calls: https://github.com/odoo/odoo/blob/785ea79c9ccd655079abeb4b13806e8174968dc3/addons/website_sale_collect/controllers/delivery.py#L22-L36 https://github.com/odoo/odoo/blob/785ea79c9ccd655079abeb4b13806e8174968dc3/addons/website_sale_collect/models/sale_order.py#L34-L36 However, during the checkout you will set a `partner_id` on the SO this will mark the `warhouse_id` field as a field to recompute because of the chain of dependencies of its compute methods: https://github.com/odoo/odoo/blob/785ea79c9ccd655079abeb4b13806e8174968dc3/addons/sale/models/sale_order.py#L463-L464 https://github.com/odoo/odoo/blob/785ea79c9ccd655079abeb4b13806e8174968dc3/addons/sale_stock/models/sale_order.py#L185-L186 And, the computed value of the `warehouse_id` will then override the current one.. opw-4737862 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Canceled point of sale refund orders no longer leave items marked as already refunded. This prevents staff from being blocked or misled when they later process a valid refund for the same sale.
Original PR description
When a refund order is canceled the refunded quantity was not updated accordingly. Steps to reproduce: ------------------- * Make an order in PoS and pay it * Go in the backend * Go to the order and click on "Refund" * Cancel the order * Go back to the PoS and try to refund the order > Observation: There will already be 1 qty refunded opw-4750645
Project budget columns now use clearer labels: Forecast, Actual, and Difference. Projects with an allocated budget but no spending are no longer incorrectly shown as overspent, giving users a more accurate budget status.
Original PR description
**Description** -Replaced table headers string: 'Allocated', 'Spent', 'Remaining' with 'Forecast', 'Actual', 'Difference'. - Currently, when a project only has the budget allocated without any spending, the project task Kanban incorrectly shows it as 'overspent'. - This pr fixes it by adding the correct condition backport of #76320 opw-4722111
The Belgian POS Blackbox now includes a visible navbar button so employees can clock in and out directly from the POS screen. It also fixes printed clock in/out receipts so they contain the expected information instead of appearing empty.
Original PR description
- Add a button to the navbar to allow users to clock in and out (as it's done in latest version). - Fix issue where the printed clock in/out order was empty. Now we remove the clock in/out order after printing it. task-id: 4757307