Daily updates from Odoo
Wednesday, February 26, 2025
26 changes
2 changes
Resolved issues and error corrections
Resource-based appointments will no longer automatically assign an organizer, preventing calendar sync problems where Microsoft requires the organizer to be part of the event. Notifications still come from an appropriate responsible user, and video call options are hidden for resource appointments to avoid unwanted calendar spam.
Original PR description
It does not make sense for resource appointments to have an organizer this causes issues with microsoft_sync as it requires the organizer to be a partner of the event for syncing purposes. Instead we don't set an organizer for resources, but we add a responsible getter so we can keep notifying users as a relevant regular user instead of odoobot task-4146850
This fix corrects how purchase orders are updated when the approvals integration is active. It avoids unnecessary database work and helps prevent incorrect updates behind the scenes, improving reliability without changing the user workflow.
Original PR description
The `write` method for `purchase.order` was not correctly overridden in `approvals_purchase`. This commit fixes it so as to avoid unnecessary db queries (i.e. `search` calls) and incorrect reassignment of the values of the `self` recordset. Also does a small improvement of using a defaultdict instead of manually recreating its logic for a normal dict. follow-up to: odoo/enterprise#71294 odoo/enterprise#79559
24 changes
Resolved issues and error corrections
Several spreadsheet dashboards now include missing or misplaced formulas, so totals and metrics display correctly. This improves reliability for invoicing, timesheets, warehouse valuation, and ecommerce reporting without changing workflows.
Original PR description
All these issues were spotted using the new irregularity map feature (task 4357729) Task: 4387232 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Deleting a product attribute value that is not used by any product now removes it instead of simply archiving it. This keeps product configuration data cleaner and avoids leaving unnecessary inactive values in the system.
Original PR description
**Avoid archive attribute value when is not been used** Impacted versions: - 18.0 and later ### Steps to reproduce: 1. Create a new attribute with attribute values (ex: value 1) 2. Delete the attribute value 3. Confirm that the attribute value still exists (archived instead of deleted) ### Current behavior: - Attribute value is being archived ### Expected behavior: - Attribute value must be deleted Task: [4551094](https://www.odoo.com/odoo/my-tasks/4551094)
The restaurant point-of-sale test was updated to check for the bill's unique code and portal link instead of relying on a QR code check. This helps keep automated testing aligned with what customers and staff actually see, reducing false failures in quality checks.
Original PR description
In this commit: === - Updated tour test to verify the presence of both the unique code and portal URL instead of a QR code check. runbot: 111424
The Point of Sale screen saver now blocks certain user actions, such as clicks, from reaching the active sales screen behind it. This prevents accidental actions like adding products when a user wakes or interacts with the screen saver.
Original PR description
When the user is on the screen saver, we do not want to propagate some events like click so that his click does not do something unexpected in the POS (like adding a product or something). This commit adds a check in the onAlive method of the pos app to stop the event propagation of some events when the screen saver is active. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents an error when users create an exchange return from a receipt that has no origin reference. Odoo now uses a safe blank fallback, allowing the return process to complete normally instead of showing a traceback.
Original PR description
Currently, a traceback is occurring when the user tries to create an exchange return without giving the origin value in picking. To reproduce this issue: 1) Install `purchase_stock` 2) Create a stock…
Currently, a traceback is occurring when the user tries to create an exchange return without giving the origin value in picking. To reproduce this issue: 1) Install `purchase_stock` 2) Create a stock picking with operation type as `receipts` and don't give the `origin` value 3) Add a product in operation that contains vendor records in the product 4) `Validate` the product and click the `return` button to open a wizard 5) Update the qty to return and click the `Return for Exchange` button Error:- ``` TypeError: sequence item 0: expected str instance, bool found ``` This traceback occurs from the line below because we are getting the origin value as False from the procurements. https://github.com/odoo/odoo/blob/949ed6f30f539dd787594511751bda0e714a5409/addons/purchase_stock/models/stock_rule.py#L119 The origin value of this procurement is directly taken from the origin value of picking. The above traceback occurs because the user didn't provide the origin value in picking. We can resolve this issue by providing a fallback value of an empty string if there is no origin in picking. sentry-6316652948
Point of Sale receipts no longer show lot or batch information twice when an order includes lot-tracked products. This keeps receipts clearer for customers and avoids confusion at checkout.
Original PR description
Before this commit, when validating an order containing a product tracked by lot, the lot information would appear twice on the receipt. opw-4509159 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Canceling a signed Mexican payment from the electronic invoice cancellation table now also cancels the related payment record. This prevents payments from incorrectly remaining posted after their accounting entry has been canceled, improving consistency for Mexican electronic invoicing workflows.
Original PR description
Since Odoo 18.0, account.payment no longer inherits from account.move. As a result, canceling a payment with `_l10n_mx_edi_cfdi_move_post_cancel` does not automatically cancel the associated payment record. Steps to reproduce: - Ensure the Mexican localization is installed and properly configured. - Generate an invoice and sign it with the government (CFDI). - Create and sign a payment for the invoice. - Cancel the payment from the CFDI table. Current behavior: - Odoo cancels the move, but the related payment remains posted. Expected behavior: - The payment should also be canceled when the move is canceled. This fix ensures that the associated payment is canceled correctly. opw-4528910
This fixes an issue in Sales Loyalty where a loyalty card could not be used unless it had an associated rule. Businesses can now honor valid loyalty cards more reliably, reducing checkout or order processing friction for customers and staff.
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
This fixes a crash that could happen when opening a vendor bill using cash rounding by tax after taxes were removed. Users can now continue editing these bills without being blocked by an error.
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)
Public visitors can no longer see the option to add reactions to portal chatter messages. This prevents an error that occurred when logged-out users tried to react to customer reviews or similar messages.
Original PR description
Since [this commit], the backend chatter can be used on the portal. Public users were able to attempt adding reactions to messages, which led to an error. This commit hides the add reaction button for public users to prevent this issue. Steps to reproduce the issue: 1. Install website_sale module. 2. Go to a website page product. 3. Open the edit mode, click on the product. 4. Activate the Rating option and save the page. 5. Scroll down the product page and add a customer review. 6. Log out and go to the product page. 7. Try to add a reaction to the review. => Traceback. [this commit]: https://github.com/odoo/odoo/commit/368eb78a9cedfce0802b64fd2782e1c018541e40 opw-4436633
Invoices now display product serial numbers whenever serialized products are included, regardless of the viewer's user group. This ensures customers and staff can see the required product identification details on invoice documents.
Original PR description
Problem: The Serial Number of a product is not being displayed on an invoice. The Serial number should be displayed on the invoice if there is a product tracked by Serial Number in the invoice. The groups is preventing the display of this Serial Number section: https://github.com/odoo/odoo/blob/d99e44f22634ac589a940d85fab84ca2b2e85332/addons/stock_account/views/report_invoice.xml#L5 Steps to reproduce: -Make a SO of a product with a serial number -Deliver it -Create an invoice -Preview it and the Serial Number of the product won't be displayed Fix: The groups tag was removed so that everyone can see the Serial Number of the product being bought. opw-4489382
This fix ensures quality checks are triggered correctly when warehouse receipts are created and validated through the barcode app. It prevents missed or duplicate checks, helping teams keep inventory validation aligned with required quality controls.
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)This update corrects how pickup delivery configuration rules are checked so they respond to the right setup changes. It helps prevent incorrect validation behavior when businesses configure in-store pickup options for online sales.
The message reaction menu now uses an X icon instead of a trash icon when removing a reaction. This better communicates that only the reaction is being removed and makes the button behavior feel clearer and less alarming.
Original PR description
Before this commit, icon to remove a message reaction in message reaction menu was trash rather than "X". This gave a wrong impression that this button has more implication that it really is. This commit replaces it with a "X". Also adapt slightly the style to have reduced visibility on item hover and full visibility when the button is hovered. This makes it more natural to click on the button. Task-4589558 Before  After 
This fix restores the ability to drag and drop fields in Odoo Studio even when those fields are present only because they are used in view rules or expressions. It helps users adjust Studio layouts more reliably without fields becoming unexpectedly locked in place.
Original PR description
this follows commit 0f9d262fb1de2ea4355fc3a6f6d0152e67ccd37e which forgot a few things to enable drag/dropping for fields that are in the view but because of their automatic addition by ir.ui.view when the field is used in an expression. opw-4578365
Removing a Studio-created field from employee contracts no longer causes salary contract calculations to crash. This keeps contract management stable while still allowing more deliberate custom extensions.
Original PR description
…cies Add a boolean field on hr.contract via studio. Then remove that field from the model. That last operation crashes because _compute_final_yearly_costs has a dynamic depends on it which take many fields of the model. While we don't want to exclude every custom fields (starting with "x_") to continue to allow sufficient extension points we do exclude studio fields specifically, because those are not meant to be used in a complex compute method. After this commit, there is no crash opw-4503855
Several spreadsheet dashboards now include missing or corrected formulas, ensuring totals and tables display the right business information. This improves reliability for CRM, purchasing, stock, and subscription reporting dashboards without changing user workflows.
The Belgian payroll individual account report now separates account lines by payroll structure. This helps businesses review employee payroll details more accurately when multiple structures apply.
This fix improves the Manufacturing Planning Schedule so quantities stay accurate when users switch between days, weeks, months, or years. It reduces misleading totals caused by period changes, helping planners make better replenishment decisions, though very large planning ranges may take longer to calculate.
Original PR description
Context: the MPS only creates records when numbers have been manually input. If the number input is superior to the `max_to_replenish_qty`, the leftover is reported to the next period via…
Context: the MPS only creates records when numbers have been manually input. If the number input is superior to the `max_to_replenish_qty`, the leftover is reported to the next period via computation, meaning no record is created. This means that every time the MPS is opened or refreshed, the computation happens. Issue: with the inclusion of the period switcher, some issues have been revealed concerning quantity computation and period switching. Solution: to be sure that numbers are accurate, the MPS will compute in 2 steps using 2 date ranges: - the `shown_date_range`: it's the one the user sees, the number of period shown is defined in the settings - the `default_date_range`: it's the one selected in the settings it uses the start and end of the `shown_date_range` to build itself E.g. 1: if your `shown_date_range` is month with 6 periods to show and your `default_date_range` is days, the MPS will calculate everything day per day before doing sums for each month. Meaning it will do ~180 computations, one for each day. E.g. 2: if your `shown_date_range` is 12 weeks and your `default_date_range` is in years, the MPS will calculate everything on 2 years (the current year and the next) in case the `shown_date_range` is straddling 2 years. Once the computation is done, it will insert the yearly `forecast_ids` (date == 01/01/2025) and place it in week 1 of 2025 (30/12/2024 to 05/01/2025), all other weeks should show zero. Pros: - it's precise Cons: - it's potentially very slow in extreme cases: if you want to show 4 years and your default period is in days, this means the MPS will calculate quantities for 1461 days before summing them in 4 years. This should be alleviated with task 4370071 where the default period type is not a general setting anymore but defined separately on each MPS product record. - manual input, when not in the default period type, can be displaced to a previous shown period or absorbed in the sum of the previous default period. This is most often because weeks are one of the 2 period types and how they never fit neatly because the Gregorian Calendar is the drunk way of keeping time with some month having 30 days, some having 31 and then there's February who changes its mind once every 4 years. task 4381366
Opening the “Info and tag” panel from a document preview no longer triggers an error when the selected document is not available on screen. This keeps the Documents workflow stable and avoids interruptions for users managing document information.
Original PR description
### Issue: - When we select a document and click on the "Info and tag" button, a traceback is thrown. ### Steps to reproduce: - Open the documents app - Preview a document - Click on the "Info and tag" in the "Action" dropdown menu - a traceback is thrown ### Solution: - When we click on the "Info and tag" button, `onToggleChatter` is called, in it we try getting the element of the selected document and scrolling to it, if the `querySelector` returns null, and we try to call `scrollIntoView` on it, a traceback is thrown. - we fixed this by adding the optional chaining operator `(?.)` to safely call scrollIntoView only if querySelector returns an element. - although not directly related to the issue, we also added a small check to disconnect any previous `MutationObserver` before creating a new one. OPW-4586089
The bank reconciliation manual operation tab has been adjusted to make information easier to scan. Extra spacing was removed and related details were grouped more compactly, improving usability for accounting teams.
Original PR description
This commit will do a backport of: https://github.com/odoo/enterprise/commit/eaf8361f44208346c20e4c50c2d9914ab2d4f3f5 and also remove some margin to have a more compacted view and will put most of the information in one div. task:4542756
The Sign module's automated check was updated to match the current completion message shown after signing a document. This prevents false test failures and helps keep the signing workflow reliable for users.
Original PR description
Before this commit, the runbot would fail with Script Timeout when executing the `shared_sign_request_tour` tour. The main problem was the title of the modal being changed from "All done!" to "It's signed!" without updating the tour itself. The secondary problem was the limitation added in the tour of clicking a button inside a modal: this one is not allowed anymore. After this commit, we removed the 'Download button' trigger in the tour as it is not allowed anymore and updated the string for the correct modal title in the tour, from "All done!" to "It's signed!". runbot-98514
Twitter account metric and stream refresh failures caused repeated error-level logs when the external service returned authorization-related responses. The change downgrades these messages to warnings, reducing unnecessary terminal and monitoring noise while still keeping administrators informed.
Original PR description
Currently, the error message occurs when failed to fetch the account metrics.
```
Error Message: Failed to fetch the account (2) metrics: '{\n \'title\':
\'Unauthorized\',\n \'type\': \'about:..
```
This error message occurs when fetching social stream posts and refreshing statistics, so replace a logger error message with a logger warning message at [1], [2] to prevent more error logs in a terminal.
link [1]: https://github.com/odoo/enterprise/blob/6e581b9dbf0c141e212f1641fc9cb37a05140cff/social_twitter/models/social_live_post.py#L48
link [2]: https://github.com/odoo/enterprise/blob/af2db721417794ccda73ab83da388a782c94a911/social_twitter/models/social_stream.py#L91
sentry-4536687715Followup report title and columns were not added to `.pot` file for translation
Original PR description
Followup report title and columns were not added to `.pot` file for translation