Daily updates from Odoo
Monday, December 8, 2025
29 changes · saas-18.4
Resolved issues and error corrections
This fix resolves an issue where stock valuations were incorrect after splitting a purchase order receipt into a batch. The problem stemmed from how the system calculated values during batch validation, leading to inaccurate stock valuation amounts. This update ensures correct stock valuation calculations when using batch billing with split receipts.
Original PR description
…n batch billed on ordered qty **Problem:** When the picking of a purchase order (of a product billed on ordered quantity) is split into different moves and put in a batch, at batch validation, svls…
…n batch billed on ordered qty
**Problem:**
When the picking of a purchase order (of a product billed on ordered quantity) is split into different
moves and put in a batch, at batch validation, svls are created with the wrong values.
**Steps to reproduce:**
- enable "Batch, Wave & Cluster Transfers" settings
- create a storable product with a standard price of 1
- set the category as avco
- in the Purchase tab select the control policy as
"on ordered quantities"
- create and confirm a purchase order for 50 of this product
- on the Receipt, change the quantity to 20 and split the
picking
- go back the the PO and create and confirm a bill for
the full amount
- click on the receipt smart button
- select the two pickings and then the 'Action' button
- select add to batch
- check 'new batch transfer' and confirm
- open the batch and validate it
- open stock valuation
**Current behavior:**
the newly created svls have total values of
50 and 50.10
**Expected behavior:**
it should be 20 and 30
**Cause of the issue:**
When the batch is validated, _action_done is called
on the two stock moves.
https://github.com/odoo/odoo/blob/dc57ea4d306f8745d37f2c5d2c3d3fa4bcaf7253/addons/stock/models/stock_picking.py#L1258
In the stock_account override:
- first the super method is called
As a consequence the state of the two moves becomes 'done'
and the qty_received of the linked purchase order line becomes 50.
- then product_price_update_before_done is called before creating
the svls.
Inside product_price_update_before_done we call _get_price_unit.
In the purchase_stock override of _get_price_unit :
- because the super method of action_done was already called,
qty_received of the purchase order line is 50, so _get_qty_received_without_self
will return 30.
https://github.com/odoo/odoo/blob/dc57ea4d306f8745d37f2c5d2c3d3fa4bcaf7253/addons/purchase_stock/models/stock_move.py#L50
So received_qty is 30 and later remaining_qty will be 20
https://github.com/odoo/odoo/blob/dc57ea4d306f8745d37f2c5d2c3d3fa4bcaf7253/addons/purchase_stock/models/stock_move.py#L86
- but because no svl was created yet receipt_value will stay 0 and later
remaining_value will be 50
https://github.com/odoo/odoo/blob/dc57ea4d306f8745d37f2c5d2c3d3fa4bcaf7253/addons/purchase_stock/models/stock_move.py#L55-L63
Therefore price_unit will be 2.5 (50/20) instead of 1
**fix**
We do not take into account the move(s) of the
same batch in the remaining value (because svls are not created yet)
so we should not take them into account in the remaining quantity.
opw-5179581
Forward-Port-Of: odoo/odoo#238222
Forward-Port-Of: odoo/odoo#235601This update resolves an error that occurred when sending invoices for Taiwan customers who didn't have a phone number listed. The fix prevents the system from attempting to access a missing field, ensuring invoices can be successfully generated and sent to Ecpay. This improves the reliability of the Taiwan Electronic Invoicing process.
Original PR description
This error occurs when the user try to send invoice. Steps to reproduce: - Install `l10n_tw_edi_ecpay` module > Switch to `Taiwan` company - SetUp `Taiwan Electronic Invoicing` in settings - Create a…
This error occurs when the user try to send invoice. Steps to reproduce: - Install `l10n_tw_edi_ecpay` module > Switch to `Taiwan` company - SetUp `Taiwan Electronic Invoicing` in settings - Create a New Customer with `Email` and `Tax ID` (eg: 12345678) - and no `phone` number. - Create New Invoice with created Customer > Confirm > Send > `Send to Ecpay` > Generate Traceback: `AttributeError: 'res.partner' object has no attribute 'mobile'` This issue occurs at [1] because when the `phone` field is not set, the system tries to fall back to the `mobile` field. However, the `mobile` field was removed from `res.partner` (see related reference), and it was reintroduced in the referenced [commit]. This commit cleans up the logic to avoid referencing a non-existent field. [1]: https://github.com/odoo/odoo/blob/f1deed16e2355a74fea522439826625535eb7052/addons/l10n_tw_edi_ecpay/models/account_move.py#L677-L678 reference- https://github.com/odoo/odoo/pull/189739 [commit]: https://github.com/odoo/odoo/pull/236938/commits/c7404dff58f232103af4271a445d3841a82be8a3 sentry-7086174794 Forward-Port-Of: odoo/odoo#238657
This update simplifies the appointment calendar by showing only one period (day, week, month, quarter, or year) at a time, instead of three. This change reduces visual clutter and provides users with a clearer view of their appointments, improving usability.
Original PR description
This PR displays one period of the requested scale (day, week, month, quarter and year) in the calendar instead of three. It avoids displaying unwanted periods and overwhelming users with information. Task-5022091 Forward-Port-Of: odoo/enterprise#98796
This update resolves a minor visual glitch in the Email Marketing app when creating campaigns with plain text templates. The fix ensures the snippet menu is initially folded, preventing a brief, distracting appearance. This improves the overall user experience and consistency within the application.
Original PR description
**Steps to reproduce:** - Go to the Email Marketing app - Create a new campaign and select the "Plain Text" Mail body for the template - Change between Mail body and Settings tabs - On Mail body tab, the right-hand building block section appears briefly (1 second) and then disappears **Issue:** Default state of the snippet menu has `snippetsMenuFolded` set to False before being inserted. **Fix:** As described in the comment just after the insert: ``` // Hide the snippetsMenu at first, other code will handle // if it should be shown or not. ``` So the fix ensure the menu is folded by default (not sure as to why the state was changed after inserting, so maybe it's expected). opw-5130191 Forward-Port-Of: odoo/odoo#238766
This update fixes a potential error in the Razorpay payment integration. If the Razorpay secret key is missing, the system would previously fail. The change now gracefully handles this situation by logging a warning and preventing signature calculations, ensuring smooth transaction processing.
Original PR description
An error is expected to occur at line [1] if the secret is missing when a transaction is processed through Razorpay and the page is redirected. **Error:** `AttributeError:'bool' object has no attribute 'encode'` **Solution:** * Added a check to log a warning and return None to abort signature calculation if the secret is missing similar to [2]. [1]: https://github.com/odoo/odoo/blob/bb37b3e320395c6e96b6a0c0c96367bd87d1c702/addons/payment_razorpay/models/payment_provider.py#L232 [2]: https://github.com/odoo/odoo/blob/bb37b3e320395c6e96b6a0c0c96367bd87d1c702/addons/payment_razorpay/models/payment_provider.py#L236-L238 **Sentry-6767571136**
A recent change to exclude US-specific report variants from account_reports tests has inadvertently introduced a bug in the 18.4 version. This fix removes the variant exclusions from the tests, resolving the issue. This change was originally intended for the 19.0 release.
Original PR description
In this commit f030cbefb8885ad023d40dcc5a023a04014f6715, we decided to exclude all the report variant in some account_reports test, because we only want to test with the generic tax report, and not the specific localizations variants. This has been merged in 19.0, but it's breaking tests in 18.4 as well, since this change https://github.com/odoo/enterprise/pull/100063 This commit remove the variants from the tests as well. runbot-234444
This update fixes a bug where old work entries persisted across different versions of our scheduling system. The change ensures that outdated work entries are automatically removed when a new version with a different schedule is created, maintaining data accuracy and preventing confusion.
Original PR description
Problem ---------- When we create a new version with a new working schedule, it will generate correct work entries (because no one was generated for this version before) But it will not remove the previous one for the other previous versions. Solution ---------- Nullify work entries if outside the valid period of the version if they were already created before. task-5065139
A recent test failure related to task scheduling was caused by incorrect timezone calculations. This update corrects the system to use UTC for interval computation, ensuring accurate task planning and preventing scheduling discrepancies. This resolves a potential issue impacting task scheduling accuracy.
Original PR description
The test `test_plan_task_in_calendar` failed with a one-hour difference in `planned_date_begin`. The error occurred because the work intervals were computed using the resource's timezone (`Europe/Brussels`) instead of `UTC`, leading to a shifted planned date. Setting the resource timezone to `UTC` ensures consistent interval computation and resolves the test failure. [RB-227059](https://runbot.odoo.com/odoo/error/227059)
This update resolves an issue where a warning banner appeared during SEPA batch payments if a linked employee lacked an address. The change ensures the system correctly uses the employee's address, eliminating the misleading warning and improving the payment process. This change was made to enhance user experience and data accuracy.
Original PR description
…oyee has an address Doing batch payment for sepa payment would generate a warning banner if the partner has no address ( city and country ) However in reality ( already working ) the xml report will be generated with the linked employee address in the case of absence of the partner address thus it should not show a warning. The change removes the warning in this case. task: 5266346 Forward-Port-Of: odoo/enterprise#99928
This update resolves an issue preventing users from adding products from the parent company to quotation templates within the multi-company setup. Previously, this was allowed in standard sales orders, but not quotation templates. This change aligns the quotation template functionality with the existing sales order flow, improving usability and flexibility for our business users.
Original PR description
### Issue In this issue, having multi-company setup, we cannot make a quotation template with a product from the parent company. While this is allowed in sale order. #### To reproduce: 1- Create a product and in the product form, set the the company field to the parent company. 2- Create a quotation template and set the company field to the child branch. 3- In the quotation template, add a line and use the created product from the parent company. 4- Saving the form will raise an error. Talked with PO about the issue and he agreed that the quotation template should allow product from the parent company. This is already the flow in the quotation itself. opw-5177590 Forward-Port-Of: odoo/odoo#237732
This update resolves a technical issue within the HTML editor that prevented users from successfully coloring text when selecting a link containing a specific character (feff). The fix ensures the editor accurately handles selections and avoids a traceback, improving the overall coloring functionality. This change was made to enhance the stability and reliability of the HTML editor.
Original PR description
Problem: When the user selects a link to color and the selection falls on a `feff` character, a traceback occurs. Cause: After commit 927f4b973932d14961c148e13473017651a60dc0, we preserve the…
Problem: When the user selects a link to color and the selection falls on a `feff` character, a traceback occurs. Cause: After commit 927f4b973932d14961c148e13473017651a60dc0, we preserve the selection at: https://github.com/odoo/odoo/blob/bee7fc1f955c52a88b527ad9a2ddf0021529bbc7/addons/html_editor/static/src/main/font/color_plugin.js#L247-L247 and then call `getFonts()`, which internally uses `this.dependencies.split.splitAroundUntil()`. If the selection is on a `feff` node, `splitAroundUntil()` can clear those nodes because `splitElement()` inside it dispatches to `clean_handlers` with the selected element containing the `feff`. Since the preserved cursor offset refers to the node before the `feff` was removed, restoring it throws: `The offset x is larger than the node's length (y).` Solution: After `splitAroundUntil()`, adjust the preserved cursor offsets if the nodes were mutated to ensure they remain valid. Steps to reproduce: It is difficult to reproduce manually, but the issue occurs when coloring a link with the selection on a `feff`. A test case replicating the situation can be based on the original failing template in the customer’s database. opw-4953943 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238450 Forward-Port-Of: odoo/odoo#234328
This update resolves an issue where the SAFT export process would fail when a journal entry lacked a partner but included a receivable account. The fix ensures the system can now correctly generate SAFT files in these scenarios, preventing export errors and improving compliance. This impacts companies using the SAFT reporting feature.
Original PR description
If we try to export a SAF-T file when a line doesn't have any partner but having a receivable account, then a traceback is displayed.
(Backport of #98240)
How to reproduce?
1. Use a company with a localization using SAF-T (e.g. l10n_dk)
2. Create and post a journal entry with no partner, and with a line having a receivable account.
3. Go on the general ledger, and export in the SAF-T format
opw-5260937
Forward-Port-Of: odoo/enterprise#100960
Forward-Port-Of: odoo/enterprise#100296This update resolves an issue where marking multiple manufacturing orders as done resulted in an error. The fix ensures accurate precision rounding when handling multiple units of measure within the manufacturing process, preventing data inconsistencies.
Original PR description
Currently, an error occurs when user marks multiple Manufacturing Orders as Done. **Steps to Reproduce…
Currently, an error occurs when user marks multiple Manufacturing Orders as Done.
**Steps to Reproduce ([Video](https://drive.google.com/file/d/1XfkMB001rMiyulRGrP4dlJFDYByo_5Bv/view?usp=drive_link)):**
- Install the `mrp` module.
- Go to `Settings` and enable `Units of Measure & Packagings`.
- Go to `Products and `create two products` with different `units of measure`.
- Go to `Manufacturing Orders`, create a manufacturing order by `adding one of the products`, and then `create work order` in the Work Orders section and `confirm` it.
- Create another `manufacturing order` with the `same quantity` for the second product and add a `Work Order` for it as well and `confirm` it.
- Go to the `list view`, select `both orders`, and click `Mark as Done` from the `Actions` menu.
**Error:**
```
ValueError: ValueError('Expected singleton: uom.uom(4, 6)') while evaluating
"if records:\n res = records.filtered(lambda mo: mo.state in {'confirmed', 'to_close', 'progress'}).button_mark_done()\n if res is not True:\n action = res"
ValueError: Expected singleton: uom.uom(4, 6)
```
After [this commit], which improves the performance of button_finish, when a user marks multiple orders as done with the same quantity but different uom , it creates all_vals_dict based on the vals[1] data as the key and the work order as the value[2]. Then it stores two or more work orders with different UoMs under the same vals key. When attempting to write multiple work orders[3], the precision rounding is calculated, which raises the error[4] due to multiple UoMs.
The commit ensures that when writing records, precision_rounding is calculated separately for each Work Order's UoM.
[this commit]: https://github.com/odoo/odoo/pull/223715/commits/b857d192085a38b612335223d04f8bdff91b898c
[1]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L698-L703
[2]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L706
[3]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L708
[4]- https://github.com/odoo/odoo/blob/186a9eb4a6c55c9c4c2178d4b2492a9a23a267fe/addons/mrp/models/mrp_workorder.py#L477
sentry-7050854871
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238086This update ensures POS orders are processed immediately after online payments, regardless of whether the user views a confirmation page. Previously, delays caused confusion for customers and cashiers. Now, transactions are processed directly after payment confirmation, maintaining accurate order status.
Original PR description
..., pos_online_payment_self_order Task: [#5217268](https://www.odoo.com/odoo/project/1737/tasks/5217268) --- Previously, when an online payment was made, the user was supposed to be redirected to a…
..., pos_online_payment_self_order Task: [#5217268](https://www.odoo.com/odoo/project/1737/tasks/5217268) --- Previously, when an online payment was made, the user was supposed to be redirected to a payment confirmation page, which triggered the payment transaction post-processing. However, in some cases, the user never reaches this page. For example: the user sees that the payment succeeded in their banking app and closes the tab before being redirected to the confirmation page. To still process the orders, a cron runs every 10 minutes to post-process transactions that were not processed yet. However, for POS self-orders this is not ideal: we need the order to be processed as soon as possible since we are in direct contact with the user. A situation where the customer insists their payment went through but the cashier sees no updated order creates unnecessary confusion. --- To fix this, we now trigger the cron directly after receiving the callback from the payment provider. This ensures that the transaction (and therefore the order) is always post-processed immediately and kept up-to-date, even if the user never reaches the confirmation page. Forward-Port-Of: odoo/odoo#235254
This update ensures that orders are automatically sent to the kitchen (PDIS) after a self-order payment is confirmed, regardless of whether the user sees a confirmation page. Previously, reliance on the confirmation page was unreliable, leading to potential delays and confusion. This change improves the overall POS experience by guaranteeing timely order processing.
Original PR description
pos_online_payment* = pos_online_payment_self_order_preparation_display Task: [#5217268](https://www.odoo.com/odoo/project/1737/tasks/5217268) --- Previously, when an online payment was made, the…
pos_online_payment* = pos_online_payment_self_order_preparation_display Task: [#5217268](https://www.odoo.com/odoo/project/1737/tasks/5217268) --- Previously, when an online payment was made, the user was supposed to be redirected to a payment confirmation page which, once the transaction succeeded, sent the related order to the kitchen (PDIS). However, in some cases, the user never reaches this page. For example, the user may see the payment succeed in their banking app and close the tab before the redirection happens. For POS self-orders, we must send the order to the kitchen as soon as the payment is confirmed to avoid confusion between the customer, the cashier, and the kitchen staff. Relying solely on the confirmation page was therefore unreliable. --- To fix this, we now leverage the cron that post-processes payment transactions: we gather all transactions made in self-order or kiosk mode that are not yet post-processed, and send their corresponding orders to the kitchen. This ensures that orders reach the PDIS even when the user never lands on the confirmation page. Forward-Port-Of: odoo/enterprise#99249
This update fixes a bug where form fields without labels were not being submitted correctly. Now, all form fields, even those without labels, are reliably captured and sent when the 'send' button is clicked. Additionally, the system now prevents users from removing labels on form fields, ensuring data integrity.
Original PR description
Before this commit, a form input without a label would not send its data when clicking send. Steps to reproduce - go to the website editor - add a form - choose any field - delete the field label - save and exit the editor - now in the website, fill the form and click send => the fields without a name label are not sent After this commit fields without a label get sent with a placeholder "unknown_field" task-5062575 Forward-Port-Of: odoo/odoo#237805 Forward-Port-Of: odoo/odoo#225545
This update corrects a bug where inactive accounts were hidden from reports. The change reflects a new setting ('active') for account status, which previously caused the reporting engine to ignore inactive accounts. This ensures all accounts, active or inactive, are accurately reflected in reports.
Original PR description
In replacing the deprecated field with the special `active` field the account_codes prefix engine no longer displays values for accounts that are inactive.
This disables the active test in:
- computing the domain for accounts
- auditing the value (since the domain is `('account_id.code', 'in'...)`
opw-5226153
Forward-Port-Of: odoo/enterprise#100885A recent update to Odoo's security features caused a problem where users couldn't successfully revoke trusted devices through the portal. This fix corrects two typos in the system's dynamic content, ensuring that users can now properly remove previously trusted devices from their accounts. This resolves a potential security concern.
Original PR description
After public widgets have been rewritten as Interactions [1], there were 2 typos in `dynamicContent` that led to the wrong behavior. Because of that, we couldn't revoke a trusted device, or all of them. Steps to see the issue, - Turn the 2FA on - Add a trusted device, for example, by checking `Don't ask again on this device` when prompted to enter the authentication code while logging in. - Go to /my/security - Try to revoke a trusted device, either just by clicking on the trash icon button, or the 'Revoke all' button. => Nothing happens. [1]: https://github.com/odoo/odoo/commit/22e777c046521f3f89b62caa5876680beb7f5aba Forward-Port-Of: odoo/odoo#238830
This update fixes an issue where the keyboard would unexpectedly appear on mobile date fields, causing a frustrating user experience. The change prevents the keyboard from opening and hides the cursor, resulting in a smoother and more intuitive date selection on smaller screens.
Original PR description
Before this commit:
- The cursor was shown inside the date/datetime input field on mobile,
which triggered the keyboard unnecessarily and degraded the user
experience.
Steps to reproduce:
1. Add a form snippet.
2. Add a Date/Datetime field.
3. Click on the Date field.
- The virtual keyboard appears and the datepicker popover may be
clipped or partially hidden.
After this commit:
- The virtual keyboard is now prevented from opening on date/datetime
inputs, and the text cursor within these fields is also hidden.
task-[4745714](https://www.odoo.com/odoo/project/974/tasks/4745714)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238771
Forward-Port-Of: odoo/odoo#212053This update resolves an issue where the automatic link between purchase orders and repair orders breaks when a purchase order is confirmed. The fix ensures the smart link remains active, streamlining the process of managing stock and related orders. This improves efficiency and accuracy in order fulfillment.
Original PR description
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the…
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the MTO route * Create a product with the MTO route enabled * Create a Repair * On the Repair Order, in part add: - type : ADD - product : mto product * Save the RO * Go to Purchase Order * Confirm the PO -> Issue Smart link between PO and RO broken. ### Observation: The smart link is defined on: RO -> PO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/repair_order.py#L15-L17 PO -> RO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/purchase_order.py#L15-L17 When we confirm the PO, from the picking information it will create new moves: https://github.com/odoo/odoo/blob/2c87f3b2b397f268f0e50cb73cd81de992ddd42e/addons/purchase_stock/models/purchase_order.py#L293-L298 To create those stock moves, we go into_create_stock_moves where, for each POL, we will generate their values and erase the smart link: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_stock/models/purchase_order_line.py#L362-L365 ### Origin: In this commit https://github.com/odoo/odoo/commit/9d98c43581e2579f43b35541b43264866dede5a5: "`created_purchase_line_id` is cleared after confirming the RFQ. This allows to merge more in `_merge_moves`." This breaks the link between PO <-> RO to maybe merge the move in the future. This issue is not present in 19.0 since it was solve in this commit : https://github.com/odoo/odoo/commit/2713876dbc70d3984e584a9037a2206dcda4e84a ### About the fix: The root cause of this issue remains ambiguous despite the analysis. Therefore, in the interest of stability and caution, we opted to implement the fix in a safer location. opw-5121816 Forward-Port-Of: odoo/odoo#232999
This update fixes an issue where holiday pay recovery was incorrectly applied to older employees when contract start and end dates were changed. The fix ensures that holiday pay recovery is applied appropriately based on the employee's start date, aligning with standard payroll practices. This improves the accuracy of payroll calculations.
Original PR description
Purpose ======= Normally contracts start and end dates should be configured without being closed and reopened at each version date. But, if it is the case, holiday pay recovery could be applied on older employees because it is considered the employee just joined the company, and there is an amount to recover.
This update resolves an issue where user notifications within the messaging menu were failing to function correctly. The fix ensures that notifications triggered by duplicate record searches properly open the correct chat window, improving the user experience for data management tasks. This was caused by a mismatch in how message threads were created and assigned.
Original PR description
**Steps to reproduce:** - Install `Data Cleaning` app - Activate notification in Odoo in the admin user profile - Create a few duplicate contacts - Go the the "Data Merge: Find Duplicate Records"…
**Steps to reproduce:**
- Install `Data Cleaning` app
- Activate notification in Odoo in the admin user profile
- Create a few duplicate contacts
- Go the the "Data Merge: Find Duplicate Records" scheduled action
- Run the action manually
- You should see new notifications telling you that they found potential duplicates
- In the top right MessaginMenu click on the notification, it opens a chatter
- Try to send a message in the chat window
- Traceback : `AttributeError: 'data_merge.model' object has no attribute '_get_thread_with_access'`
**Issue:**
The model doesn't inherit `mail.thread` so it uses `self.env['mail.thread']` directly to send notification:
```
self.env['mail.thread'].sudo().message_notify(
...
model=self._name,
notify_author=True,
partner_ids=partner_ids,
res_id=self.id,
)
```
But when sending the information with the `model` and `res_id` parameters the newly created `Store` uses `self.add("mail.thread", {"id": data.id, "model": data._name, **values})` and the message is assigned to a non-existing thread in the frontend.
**Fix:**
Explicitly check if the message is a `user_notification` and redirect the user to the discuss inbox if it's the case by reapplyng part of https://github.com/odoo/odoo/commit/b3be992c57dc5e412a127d05fc50b059814523aa
opw-5101510
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238563
Forward-Port-Of: odoo/odoo#234737This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company information is used on shipping labels, improving order accuracy and customer experience. This resolves a problem where the system wasn't properly capturing company names from the ecommerce form.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update resolves an issue preventing the payroll demo data installation from working correctly at the start of the year. The fix sets a fixed past year for Mitchell Admin's contract, ensuring accurate demo data generation. This resolves a technical error reported by automated testing.
Original PR description
Before this commit, the relative date used to generate Mitchell Admin's contract was always at January 1st of the current year, making the payroll demo data install fail when at the start of the year. This commit sets a fixed year in the past for Mitchell's contract. runbot error 234623 and 234612
This update resolves an issue where setting image field widths in list views caused a system crash during development. The change clarifies that image field widths should be controlled through list view configurations, not the image field itself, ensuring stability and proper functionality.
Original PR description
Before this commit, if one set the `width` attribute on an image field in a list view arch, there was a props validation crash (in debug mode). The `width` attribute is relevant to be set in list view archs as it allows to specify the width of the column. That attribute isn't meant to be used by the image field itself, where the option `size` can be used to specify the size of the image as a pair `[width, height]`. opw~5392068 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 update fixes an issue where Vimeo video settings (loop and hide controls) weren't being applied after saving a website page. The problem stemmed from an unnecessary escaping of URL characters in the video source, which was preventing Vimeo from correctly interpreting the settings. Now, these settings work as expected.
Original PR description
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to…
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to the Website editor. - Drag and drop a "Media List" or similar snippet. - Double-click the video placeholder to open the media dialog. - In the "Video" tab, paste a Vimeo URL. - Enable "Loop" and/or "Hide Player Controls". - Save the page. -> Observe that the video does not loop and the controls are still visible. Cause: ====== When rebuilding the iframe, `generateVideoIframe` was processing the video's `src` URL through using `escape()` function. This function is designed to prevent XSS by converting characters like `&` into their HTML entity equivalent, `&`. However, Vimeo video URLs use the `&` character to separate query parameters (e.g., `?loop=1&controls=0`). The `escape()` function was converting this URL to `?loop=1&controls=0`. but `setAttribute` already handles URL values safely. so Vimeo player will receive url containing &amp;. This broke the URL's structure. The Vimeo player received a malformed URL, could not parse the parameters correctly, and therefore ignored the options for looping and controls. escape was used before cause The original code was adding the iframe using `.html(...)` see commit: https://github.com/odoo-dev/odoo/commit/8749410b1033ddec1207ce1db42d1889a0d2ea33 side note 1: before saving the vimeo video works because we render it without the double escaping of & (as will be the case for saved video if this PR is applied) side note 2: the issue of double escaping also apply to youtube, but it seems to be ok with superfluous & in URL while in vimeo: https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1 has the video that doesn't loop, is not muted (so doesn't auto play in an iframe on most browser) and show controls https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1: all option works Solution: ========= The unnecessary `escape()` call has been removed. since the video should be only added using media dialog and the `setAttribute(...)` will escape it by default opw-5225261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238040 Forward-Port-Of: odoo/odoo#236677
This update fixes an issue where invoices containing special characters would fail to send to Peppol, causing errors. The change ensures that all invoice data conforms to XML standards, preventing these failures and guaranteeing successful Peppol invoice transmissions. This improves the reliability of our Peppol integration.
Original PR description
## Issue: When a character that's not compatible with XML is in an invoice, and you send it to Peppol, a traceback was raised: `ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters` ## Cause: `dict_to_xml` converts each invoice field into XML, but certain control characters (e.g., `\x02`) are not allowed in XML according to the specification: https://www.w3.org/TR/xml/#charsets If such a character appears in the data (e.g., imported through a product CSV), the XML generation crashes ## Steps to produce: - Install `account_peppol` and `l10n_be` (to get the BE Company CoA) - Import a product containing a control character: `echo -e "name,default_code\nTest\x02Product,ABC123" > products.csv` - Create an invoice for the BE company using the product `Test\x02Product` - Send it via Send > by Peppol - A traceback is raised opw-5114648 Forward-Port-Of: odoo/odoo#238978 Forward-Port-Of: odoo/odoo#236836
This update corrects an issue in the l10n_ar_stock delivery guide report where a critical disclaimer about invoice validity was missing. Additionally, the report's name and number were being duplicated, causing potential confusion. This ensures the report accurately reflects invoice status and improves data consistency.
Original PR description
The mention "Document not valid as an invoice" is missing in the delivery guide report. And we shouldn't duplicatethe report name and number. opw-5004345
A recent test was failing due to timing issues when switching users in the MRP work order system. This fix addresses this by splitting the test steps to ensure records are fully loaded before checks are performed, improving overall test reliability.
Original PR description
The test `test_shop_floor_my_wo_filter_with_pin_user` sometimes fails on these steps:…
The test `test_shop_floor_my_wo_filter_with_pin_user` sometimes fails on these steps: https://github.com/odoo/enterprise/blob/422ac3d5b10c44233321010b9ecb8e37735b3ea3/mrp_workorder/static/tests/tours/tour_shopfloor.js#L177-L190 https://github.com/odoo/enterprise/blob/422ac3d5b10c44233321010b9ecb8e37735b3ea3/mrp_workorder/static/tests/tours/tour_shopfloor.js#L196-L206 https://github.com/odoo/enterprise/blob/422ac3d5b10c44233321010b9ecb8e37735b3ea3/mrp_workorder/static/tests/tours/tour_shopfloor.js#L212-L221 This happends since changing the user requires some time to display the related shopfloor records, but the steps check the number of visible records as soon as it has switched rather than when it is sure that the records are displayed. #### Fix: Since switching employees will first empty the recordset and later display the related records, we can split the steps in two. We first check that we switched users, then we check the existence of a record that is not present for the previous user, and only then perform the related checks. #### runbot-226734 Forward-Port-Of: odoo/enterprise#101268 Forward-Port-Of: odoo/enterprise#100746