Daily updates from Odoo
Thursday, March 27, 2025
18 changes
1 change
Resolved issues and error corrections
Filtering records by date and time now handles non-UTC time zones more consistently. This reduces errors for users working with appointments, attendance, planning, projects, timesheets, and sales planning across different regions.
Original PR description
When filtering, always use naive datetimes to avoid errors when the datetime is not in the UTC timezone. odoo/odoo#203047
17 changes
Resolved issues and error corrections
Opening a Point of Sale session no longer gets stuck when a configured product category has no products. This helps staff access the register reliably even when category setup is incomplete or empty.
Original PR description
This commit fixes an issue where we'd experience an infinite loading screen when trying to open a POS instance. This happened when the configuration included a POS product category with no products associated with it. Now, we'll check to make sure that there are products to be looped over before trying to loop over something undefined. opw-4678381
Fixed an issue where invoice emails could fail to include the portal customer after checkout. This ensures customers who complete purchases while logged in through the portal receive the expected invoice communication.
Original PR description
…user Checking out while logged in with a portal user would cause all messages to be created by said portal user. So, when the invoice email would normally be sent it would not include the portal user as a recipient. Accessing the transaction as the superuser instead of just using superuser when running _generate_and_send_invoices fixes this because the invoices were being grabbed with the env.user of portal user and that was being used later down the line as the user to create the messages. opw-4566071
Website forms that create event registrations now avoid showing an error message when the registration was actually saved successfully. This prevents confusion for visitors and staff when event signup emails trigger an internal transaction commit.
Original PR description
Scenario: - install website, event - add a form in website with action "Create Event Registration" - add a field Event in that form - send the form with an event that would accept registration…
Scenario:
- install website, event
- add a form in website with action "Create Event Registration"
- add a field Event in that form
- send the form with an event that would accept registration
Result: the registration is saved but you see "An error has occured, the
form has not been sent." and server side you see this traceback:
File "addons/website/controllers/form.py", line 45, in website_form
with request.env.cr.savepoint():
…
File "/Users/odoo/src/odoo/18.0/odoo/sql_db.py", line 119, in _close
self._cr.execute('RELEASE SAVEPOINT "%s"' % self.name)
…
psycopg2.errors.InvalidSavepointSpecification: savepoint "…" does not
exist
Cause: creating an event.registration calls
event.registration()._update_mail_schedulers which depending on
configurations might end up sending mail after which we commit the
transaction (probably to avoid sending an email two times) but this
deletes all the current savepoints. So even if everything is commited,
successfully, the __exit__ method of the savepoint will raise an error
when trying to close a savepoint that is already deleted.
Fix: ignore cases where there has not been any error, but the savepoint
has been deleted before being released.
opw-4599918Fixes an inventory error that could block location reporting when company-specific products were involved in inter-company transit or other shared locations. Businesses can now reconcile stock reservations more reliably without being stopped by incorrect company validation in these non-company-specific locations.
Original PR description
### Issue: It happens due to many reasons that the `stock.quant` object and the `stock.move.line` loose their synchronization and it could have a difference between the sum of `stock.move.line` and…
### Issue: It happens due to many reasons that the `stock.quant` object and the `stock.move.line` loose their synchronization and it could have a difference between the sum of `stock.move.line` and the quantity/reserved quantity on the stock.quant. Starting from 18.0: Commit 766ec99dbc2701a237f082f3fb124793d9dfe596 the action `_clean_reservations` is called in the `_quant_tasks` to reconcile both. However, this action is performed in `inventory_mode` when we access quant view: https://github.com/odoo/odoo/blob/82aa55b90e64defb6dd6707c5cebf74fba6b74d3/addons/stock/models/stock_quant.py#L394-L398 https://github.com/odoo/odoo/blob/82aa55b90e64defb6dd6707c5cebf74fba6b74d3/addons/stock/models/stock_quant.py#L1301-L1304 In certain cases this causes an invalid operation. For instance because we can not create a quants in a location that does not belong to a company`inventory_move`. This happens because the company_id of the quant will be false: https://github.com/odoo/odoo/blob/82aa55b90e64defb6dd6707c5cebf74fba6b74d3/addons/stock/models/stock_quant.py#L57 But the `company_id` of the product will not and hence will fail the `check_company` performed for inventory_move: https://github.com/odoo/odoo/blob/82aa55b90e64defb6dd6707c5cebf74fba6b74d3/addons/stock/models/stock_quant.py#L306-L311 https://github.com/odoo/odoo/blob/82aa55b90e64defb6dd6707c5cebf74fba6b74d3/odoo/models.py#L4354-L4355 ### Steps to reproduce: - In the settings enable intercompany transactions and multi-step routes - Create a storable product P and set the product company_id - Create an internal transfer from the inter-company transit to stock for 1 unit of P - Confirm the picking and set a quantity of 1 - Delete the quant that was created in inter-company transit with a reserved quantity of 1 (this can be done via a server action). - Inventory > Reporting > Locations > Invalid operation: inter-company transit belongs to company "False" and product "P" belongs to an other company. opw-4635684 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Combo products now correctly show as fully invoiced after their quotation has been invoiced. This prevents users from seeing an unnecessary Create Invoice button and avoids creating incomplete follow-up invoices.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a combo product; 2. confirm a quotation with the combo product; 3. fully invoice confirmed quotation; 4. go back to quotation. Issue ----- The "Create…
Versions -------- - 18.0+ Steps ----- 1. Have a combo product; 2. confirm a quotation with the combo product; 3. fully invoice confirmed quotation; 4. go back to quotation. Issue ----- The "Create Invoice" button is still visible. Clicking on it will create an invoice with only the combo product on it (none of its constituent products). Cause ----- Commit 602ef86b8dcad changed how combo product lines get invoiced. Instead of display type `product`, they get displayed as `line_section` lines. The `_compute_qty_invoiced` method requires the line to have linked `invoice_lines` that have a `quantity` value to properly calculate the quantity invoiced, and later on, the quantity to invoice: https://github.com/odoo/odoo/blob/bac9ed6d84ff64ef39741cb66afdf565c7e9f221/addons/sale/models/sale_order_line.py#L907-L913 Because these values aren't passed when creating an invoice line, the `qty_to_invoice` value of the combo product line will never be 0. Solution -------- Pass the requisite fields to the invoice line create values, along with the `optional_values` to ensure the correct `sequence` value gets used. opw-4633972
The Point of Sale product loading process now respects product access rules instead of failing when some products are restricted. This ensures cashiers can still see and sell the products they are allowed to access, reducing disruptions in store operations.
Original PR description
Before this commit, if you defined a record rule on products, none of the products would be loaded in the POS. This commit fixes this issue by using search over browse because search automatically applies access rights filtering, returning only products the current user has access. This approach avoids the previous all-or-nothing behavior where a single inaccessible product would prevent all products from loading. opw-4662433 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale product screen now handles categories that do not contain any products, such as parent categories. This prevents a blank screen and keeps cashiers able to browse and sell products normally.
Original PR description
Before this commit, get products in product screen was trying to get products in available categories, but if a category has no products like a parent category without products, the method would raise a traceback and the product screen would not display anything (white screen). This commit solves it by checking the return of the getBy and assinging an empty list if the category has no products. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures that when users edit an invoice line label, that custom label is included in electronic tax submissions instead of defaulting to the product name. It helps businesses submit invoices that match their intended descriptions across affected local electronic invoicing flows.
Original PR description
Description of the issue/feature this PR addresses: modified labels are not sent to the ETA Current behavior before PR: -> change an invoice line label -> post the invoice -> send to ETA -> only product name is sent to the ETA Desired behavior after PR is merged: -> change an invoice line label -> post the invoice -> send to ETA -> line label is sent to the ETA this is based on this pr: https://github.com/odoo/odoo/pull/200907 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where certain email templates could lose their formatting after being edited and saved. The editor now handles a specific type of span element correctly, helping preserve the intended appearance of templates such as install request emails.
Original PR description
**Problem**: Some email templates (e.g., "Mail: Install Request") contain self-closing `<span>` elements, which are not parsed correctly in the editor. This leads to broken styles upon saving changes. **Solution**: Convert self-closing `<span>` elements into properly opened and closed `<span>` tags. **Steps to reproduce**: 1. Open the email template **"Mail: Install Request"**. 2. Apply any change and save. - **Issue**: Styles are completely broken. **opw-4633229** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an accounting error that could prevent users from opening or editing vendor bills when cash rounding by tax was selected and no taxes were applied. Businesses can now use cash rounding in this scenario without the bill screen failing.
Original PR description
The Error is reproducible in the runbot here is an attached video with the steps: https://drive.google.com/file/d/1W1ZJG7aYueFa8Y24LSZlsil0caZB9mE5/view?usp=sharing This happens because of : 1- cash rounding is enabled in the settings of accounting 2 - cash rounding by tax is chosen 3 - opening a vendor bill 4 - putting a decimal price and removing taxes 5- then choosing cash rounding by tax The Error : File "/home/odoo/odoo/odoo/addons/account/models/account_move.py", line 1570, in _compute_tax_totals move.tax_totals = self.env['account.tax']._get_tax_totals_summary( File "/home/odoo/odoo/odoo/addons/account/models/account_tax.py", line 2090, in _get_tax_totals_summary max_subtotal, max_tax_group = max( ValueError: max() arg is an empty sequence opw-4558251 (related to ticket) Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged:
Time off requests for employees with flexible schedules now keep the exact daily duration instead of rounding hours upward. This prevents employees from being charged more leave time than intended when their schedule includes uneven daily hours, such as 9 hours and 15 minutes.
Original PR description
### Steps to reproduce: - Create a flexible working schedule with not even hours per day (e.g. 9:15) - Assign this working schedule to one of the employees - Create a time off type its request unit is hours - Create a time off for the employee that has the flexible calendar for one day - Notice the duration of the leave is rounded up ### Cause: This is happening because when calculating the leave duration for a flexible resource we are using ceil() to round up the hours variable https://github.com/odoo/odoo/blob/ece2a795a303a1ce1b837a4b65e1cf99f1b717b5/addons/hr_holidays/models/hr_leave.py#L428-L429 ### Fix: Since we are not really benefiting from using ceil() as we are not using it anyways in case of half-days so it is better to avoid rounding the hours up. opw-4640130
This fix stops shoppers from increasing combo product quantities beyond the available stock during checkout. It keeps online orders aligned with real inventory, reducing overselling and fulfillment issues.
Original PR description
Usecase: Create a combo item with products that are not allowed to be out of stock on ecommerce. In the classic process, it's okay. You are not allow to add more than available quantity. However on the checkout page, you can increase as you want. If the user do it, it will order more stock than available. Fix the flow to ensure that data-max is always equals to the min quantity of the products in combo. opw-4614309 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
Open point-of-sale orders are now shared with trusted POS sessions when a new order is created. This helps staff working across connected registers see the same active orders and avoid duplicate or missing order handling.
Original PR description
Before this commit: ================ - Open orders were not shared across trusted POS sessions. After this commit: ================== - All open orders in the session will be shared with trusted POS when a new order is created. Task: 4550175
Users who only have read access to a document can now post messages on it. This removes an unnecessary permission barrier and makes collaboration easier without requiring broader edit rights.
Original PR description
Purpose ======= Currently, we need a write access on a document to post message in it. We want the reader of the documents to be able to post. Task-4677687
This update resolves several issues affecting WhatsApp messaging, subscriptions, appointments, timesheets, reporting, barcode workflows, Studio reports, and Knowledge articles. Businesses should see fewer errors, smoother daily operations, and better handling of large reports and embedded content.
Original PR description
Fix
This update mostly fixes issues across accounting, documents, expenses, reporting, and online bank synchronization, while also adding support for Japanese Zengin bank payment files. It improves day-to-day reliability for finance teams by reducing blocked bank connections, incorrect currency handling, duplicate detection errors, and reporting inaccuracies.
Original PR description
### Summary This PR introduces a new module, `hotel_restaurant_pms`, designed for hotel and restaurant businesses. The module includes functionalities for managing hotel rooms, guests, bookings, and…
### Summary This PR introduces a new module, `hotel_restaurant_pms`, designed for hotel and restaurant businesses. The module includes functionalities for managing hotel rooms, guests, bookings, and restaurant POS orders. It also integrates with fiscalization printers to ensure compliance with local tax regulations. ### Features 1. **Hotel Room Management**: Manage rooms with attributes like type, rate, and availability. 2. **Guest Management**: Register guest information for tracking and invoicing purposes. 3. **Booking System**: Handle hotel room bookings with check-in/check-out and automated billing. 4. **Restaurant POS Integration**: Provides an interface for menu management and order processing. 5. **Fiscalization Support**: Integrates with fiscal printers to comply with tax regulations, enabling direct printing of invoices with fiscal data. 6. **Real-Time Data Synchronization**: Ensures seamless syncing between the PMS and POS components for smooth operations. ### Technical Details - **Models**: Defines core models for `hotel.room`, `hotel.guest`, `hotel.booking`, `restaurant.menu`, and `restaurant.order`. - **Views**: Provides form views for easy data entry and overview of rooms, guests, bookings, menu items, and orders. - **Fiscal Printer Service**: Adds a service to send invoice data to fiscal printers, enhancing compliance capabilities. - **Dependencies**: Built on top of the Odoo `base` and `point_of_sale` modules. ### Test Instructions 1. Install the module within the Odoo instance. 2. Set up test data in each of the models (rooms, guests, bookings, etc.). 3. Create bookings and restaurant orders to validate that invoices and stock movements are correctly generated. 4. Test fiscalization by printing an invoice with a fiscal printer (requires compatible hardware setup). ### Contribution Checklist - [x] Module code is structured following Odoo guidelines. - [x] Views and models are modular, promoting scalability and maintainability. - [x] Fiscal printer integration has been tested in a local environment. - [x] Documentation included in each model explaining field usage and constraints. ### Additional Notes This module provides a valuable integration for hotel and restaurant businesses, especially in regions where fiscal compliance is essential. Feedback on additional features or improvements is highly welcome. Thank you for reviewing this PR!
German DATEV exports now run much faster for companies with large accounting datasets. The export process avoids unnecessary data loading and formatting work, reducing delays when generating zip files.
Original PR description
When we have a lot of data in the germany company we face a performance issue while exporting as zip file
- modified the l10n_de_datev_export_to_zip function to search for the needed data rather that calling get lines again that improves the performance by 65%.
- modified _format_column_values to add if options.get('export_mode') == 'file' not do formating to save time
task-4502158