Daily updates from Odoo
Thursday, November 27, 2025
44 changes · 19.0
New functionality added to Odoo
This update allows HR professionals to easily incorporate salary information from employee profiles into contract templates. Previously, this required manual data entry, now a dedicated button streamlines the process, ensuring accurate and consistent contract creation. This improves efficiency and reduces the risk of errors when establishing new employee contracts.
Original PR description
Add a button in the contract template form view so salary inputs applicable on employees can also be added to a contract template. [task-5156839](https://www.odoo.com/odoo/project/1251/tasks/5156839)
Enhancements to existing features
This update adjusts the size of the QR code displayed to customers in Odoo Point of Sale. The previous QR code was too small, impacting its visibility and user experience. This change ensures a more consistent and easily scannable QR code for customers.
Original PR description
QR code generated for customer display in Odoo POS is considered too small, therefore need size adjustment for enhanced visibility and user experience. Sizing is adjusted to be more uniformed with the backend popup. task-[5262218](https://www.odoo.com/odoo/project.task/5262218) 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 clarifies the tooltip for the 'Prices' setting in the Odoo configuration. Previously, it stated the setting couldn't be changed after an invoice was created. Now, it correctly indicates the setting locks once a journal entry is created, providing clearer guidance for users. This change enhances usability and reduces potential confusion.
Original PR description
This commit improves the tooltip of the Prices setting in configuration. The old tooltip "This setting cannot be changed after an invoice is created." is changed to "This setting locks once a journal entry is created." task-5354382 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237093
This update simplifies the link editing process by consolidating actions into a single, wider popover. The redesign removes a copy button and streamlines the user interface for easier link creation and management. These changes enhance the overall user experience and improve consistency within the Odoo website builder.
Original PR description
The link popover previously had multiple buttons, making the link editing experience less intuitive. This commit unifies actions into a single wider popover and refactors some logic to improve…
The link popover previously had multiple buttons, making the link editing experience less intuitive. This commit unifies actions into a single wider popover and refactors some logic to improve consistency. ## UI/UX changes: - Replaced three buttons (copy, edit, remove) with one "Edit" button, which opens the link editing view. | Before | After | | ------------- | ------------- | |  |  | - Widened the popover for better readability. - Removed the copy link feature. <br/> ## Changes in link editing view: - Moved the "remove link" button in this view. <kbd></kbd> - Updated URL input placeholder to: "Enter URL, /page, or #anchor". - Auto-focus the URL input when creating a link for selected text. - Auto-focus the label input when creating new links or editing existing links. task-[4862671](https://www.odoo.com/odoo/project/974/tasks/4862671) Co-authored-by: adch-odoo \<adch@odoo.com\> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update resolves a technical issue that caused errors when users closed payment tabs in the Point of Sale (POS) system. Specifically, clearing zero-amount payment lines triggered a problem. The fix ensures the system gracefully handles scenarios with no selected payment line, defaulting to the first payment line if needed, improving stability and preventing errors.
Original PR description
Steps: --- - Enable Tips and "Add tip after payment" in restaurant. - Open a session and add any product(s). - Go to payment and add two card lines (first with full amount, second with 0). - Click on "Close Tab". Issue: --- - After redirecting to the Tip Screen, a traceback appears. Cause: --- - Clicking "Close Tab" clears all 0-amount payment lines. This can leave no selected payment line, but the Tip Screen still tries to access it. Fix: --- - Use the selected payment line if available, otherwise fallback to the first payment line. task-5095825 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237124 Forward-Port-Of: odoo/odoo#227797
This update resolves an issue where alerts added to field descriptions during the checkout process couldn't be edited. The fix utilizes the editor's built-in insert command to ensure alerts are correctly placed within editable text fields, improving the user experience for adding feedback.
Original PR description
Problem: When adding an alert inside a field description in the Extra Step page of the checkout process, the inner content of the alert cannot be modified. Cause: In…
Problem:
When adding an alert inside a field description in the Extra Step page of the checkout process, the inner content of the alert cannot be modified.
Cause:
In
https://github.com/odoo/odoo/blob/1e96a3d127e8f521d3027f7110026ae84e11ed5e/addons/website/static/src/components/wysiwyg_adapter/wysiwyg_adapter.js#L784-L789 the logic determines the block using:
`this.closestElement(range.endContainer, 'p, div, ol, ul, cl, h1, h2, h3, h4, h5, h6');` Since the field description template is:
```html
<div class="s_website_form_field_description small form-text text-muted"
contenteditable="true">
text
</div>
```
and the selection occurs within the text (direct child of the editable `div`), the computed `block` becomes the editable area itself. As a result, the cloned alert is inserted *after* the editable area: `block.after($clonedBody[0]);`, making it non-editable.
Solution:
Use the editor’s built-in `insert` command instead of manually inserting clones. This ensures the alert is correctly inserted within the editable region.
Steps to reproduce:
1. Enable "Extra Step During Checkout" in Settings.
2. Open Website → add a product to the cart → proceed to checkout.
3. In the "Extra info" step, open the editor.
4. Select the "Give us your feedback" field.
5. Enable "Field" → "Description".
6. Run the "/alert" command in the description. → The alert content cannot be edited.
opw-5184309
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#234905
Forward-Port-Of: odoo/odoo#232910This update resolves an issue where the OSS Tax mapping feature would fail if a tax group was missing. The fix ensures the system correctly handles scenarios where tax group information is incomplete, preventing errors and improving the reliability of the tax calculation process. It updates the system to account for both payable and receivable tax accounts when searching for tax groups.
Original PR description
**Steps to Reproduce:** 1. Install the "**Belgium - Accounting**" (`l10n_be`) module with demo data. 2. Switch to the company - **BE Company CoA**. 3. Remove the "**Tax Payable Account**" from all…
**Steps to Reproduce:** 1. Install the "**Belgium - Accounting**" (`l10n_be`) module with demo data. 2. Switch to the company - **BE Company CoA**. 3. Remove the "**Tax Payable Account**" from all the tax groups. 4. In setting, under _EU Intra-community Distance Selling_ section, click on "**OSS Tax mapping**". **Error:** `ValueError - External ID not found in the system: account.1_oss_tax_group_20_0_SK` **Note:** If only the "**Tax Receivable Account**" is removed from all tax groups. The following error occurs; `TypeError: expected string or bytes-like object` **Cause:** At [1], the system searches for a tax group with a defined `tax_payable_account_id`. Also, at [2], the `oss_tax_group_local_xml_id` is created only when the tax group (tg) exists. However, when no tax group is found, the code tries to fetch the missing xml id at [3], resulting in a ValueError. Similarly, when the receivable account is missing, the execution also fails, leading to a TypeError. **Fix:** This commit updated the tax group search condition to include both `tax_payable_account_id` and `tax_receivable_account_id`. Also, added skipping further processing if the related tax group is not found. [1] - https://github.com/odoo/odoo/blob/fb30a9b12667f6b1195e6bd6f8db69f44ad5ca2a/addons/l10n_eu_oss/models/res_company.py#L47-L49 [2] - https://github.com/odoo/odoo/blob/fb30a9b12667f6b1195e6bd6f8db69f44ad5ca2a/addons/l10n_eu_oss/models/res_company.py#L115-L146 [3] - https://github.com/odoo/odoo/blob/fb30a9b12667f6b1195e6bd6f8db69f44ad5ca2a/addons/l10n_eu_oss/models/res_company.py#L164 sentry-6932155430
This update ensures that signature fields added to views within Odoo's Studio correctly display the signature widget. Previously, Studio incorrectly defaulted to a standard binary widget for signature fields. This fix allows users to properly configure signature fields within Studio, improving usability and functionality.
Original PR description
Before this commit: ------------------- When a user added an existing signature field to a view, Studio automatically assigned the default binary widget. The expected signature widget did not appear…
Before this commit: ------------------- When a user added an existing signature field to a view, Studio automatically assigned the default binary widget. The expected signature widget did not appear in the widget selection list. As a result, users could not configure the field as a signature input. <img width="1920" height="938" alt="image" src="https://github.com/user-attachments/assets/35893235-2541-4bd5-a7a5-4feab562acb2" /> Cause: ----- Studio builds the dropdown of available widgets by computing a [widgetKey](https://github.com/odoo/enterprise/blob/17.0/web_studio/static/src/client_action/view_editor/editors/utils.js#L132) based on the field type. Because the signature widget did not declare binary as a supported field type, it was always filtered out for fields of type binary. Thus Studio treated the field like any normal binary field and excluded the signature option. After this commit: ------------------ The signature widget is correctly exposed as a supported widget for fields of type binary. When adding an existing signature field to the view (with developer mode enabled), Studio now shows signature in the widget list. <img width="1917" height="934" alt="image" src="https://github.com/user-attachments/assets/079e0a17-ff5a-4dc6-a12d-e02b9cad013e" /> Why this fix is needed: ---------------------- Signature fields are stored as binary, but they require the dedicated signature widget to render correctly. By marking binary as a supported field type for the signature widget, Studio can properly detect and offer the widget during field configuration. Given that this widget is very domain-specific and not intended for general binary fields, it was not added to [web_studio/static/src/client_action/view_editor/editors/sidebar_safe_fields.js](https://github.com/odoo/enterprise/blob/17.0/web_studio/static/src/client_action/view_editor/editors/sidebar_safe_fields.js) though this may be reconsidered after this fix the option is accessible only when the debugger mode is on, if want to show this widget to all the binary type fields even when the debugger mode is off the we'll have to add it to this file. OPW : 5260188 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237287
This update resolves an issue where the 'Export ZIP' function on customer invoices was failing when the invoice hadn't been sent. The fix ensures that this button is only available for invoices that have been successfully processed and prepared for sending, improving the user experience.
Original PR description
**Steps to reproduce:** * Install the *Accounting* module. * Create a customer invoice. * Post the invoice. * Click the *gear* icon → **Print** → **Export ZIP**. * Observe that the invoice opens a blank page. **Issue:** * Clicking **Export ZIP** on an unsent invoice opens a blank page. **Cause:** * The `account.move.send` model returns an empty dataset when the invoice is not sent, leading to an empty export result. **Fix:** * Add a condition to display **Export ZIP** only when the invoice has been sent. --- opw-5245483 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235934
This update resolves an issue where creating annotations in the Arabic language resulted in a system error. The problem stemmed from how Luxon was formatting dates, specifically using Arabic numerals which are not recognized by PostgreSQL. The fix ensures dates are formatted with the standard Latin numeral system, allowing annotation creation to function correctly for users in Arabic locales.
Original PR description
Steps to reproduce: ------------------- 1. Install `account_reports` 2. Switch the user language to Arabic 3. Go to Accounting > Reporting > General Ledger 4. Click on the 3-dots > Annotate 5. Create a new annotation Issue: ------ A traceback occurs: ```python psycopg2.errors.InvalidDatetimeFormat: invalid input syntax for type date: "٢٠٢٥-١١-٣٠" LINE 1: ... '2025-11-14 07:05:06.400902', 2, '٢٠٢٥-١١-٣٠', ... ``` Cause: ------ In Arabic locale, Luxon formats dates using the Arabic numbering system, which is not a valid date literal for PostgreSQL, leading to an invalid date syntax error. Solution: --------- Use the Latin numbering system (`latn`) when formatting the annotation date. Ticket [link](https://www.odoo.com/odoo/project.task/5244656) opw-5244656 Forward-Port-Of: odoo/enterprise#99493
This update fixes a reporting issue on the Purchase Dashboard where completed receipts were incorrectly included in 'Not Acknowledged' and 'Late Receipt' counters. The fix ensures the dashboard accurately reflects only pending acknowledgments and genuinely late receipts, providing more reliable purchase tracking.
Original PR description
Before this commit: ------------------------- - On the Purchase Dashboard, the 'Not Acknowledged' and 'Late Receipt' counters also included purchase orders whose receipts had already been done. - For…
Before this commit:
-------------------------
- On the Purchase Dashboard, the 'Not Acknowledged' and 'Late Receipt' counters
also included purchase orders whose receipts had already been done.
- For Not Acknowledged:
- Such POs should be implicitly considered acknowledged once their receipts
are done, but they were still shown at the counter.
- Additionally, unacknowledged POs that were locked were incorrectly excluded
from the counter.
- For Late Receipt:
- POs with received products were incorrectly counted as late, even
though their receipts were already done.
- Locked POs with late receipts were also excluded from the counter, which was
an incorrect behavior.
Steps to reproduce:
-------------------------
1. Install the 'purchase_stock' module.
2. Open Purchase module.
3. On the Purchase Dashboard, click on the 'Not Acknowledged' or 'Late
Receipt' card.
4. Notice that POs whose receipts are already completed still appear in the
counters and some locked POs that are unacknowledged or have late receipts
are missing from the counters
Cause of the issue
-------------------------
- The domains for both Not Acknowledged and Late Receipt counters only relied on
the purchase order state without checking whether the receipts were done.
- As a result, POs with done receipts were still included in the counters, while
some locked POs were incorrectly excluded.
After this commit:
-----------------------
- Updated the search domains for both counters to properly exclude POs whose
receipts are done.
- The action_done method now triggers action_acknowledged, ensuring that any
unacknowledged POs with completed receipts are automatically marked as
acknowledged and excluded from the Not Acknowledged counter. Locked POs that
remain unacknowledged will still correctly appear in the counter.
- Now the POs with received products are no longer shown as late once their
receipts are completed and Locked POs with late receipts will now correctly
continue to appear in the counter.
- This ensures that the dashboard accurately reflects only pending
acknowledgments and genuinely late receipts, helping users track POs in
the correct state.
Task ID: 4874116
Forward-Port-Of: odoo/odoo#237305
Forward-Port-Of: odoo/odoo#224180This update fixes an issue where channel names weren't displaying correctly in the invite dialogs accessed from the sidebar. The change ensures the correct channel name is shown by using the channel's display name instead of the previous method. This improves the user experience when inviting members to channels.
Original PR description
Before this commit, certain channels whose names were computed on the client side did not appear correctly as the title of the invite dialog when opened via the sidebar actions. This commit resolves the issue by using the channel’s displayName instead of the thread.name to ensure the correct title is shown in the invite dialog. task-5357104 Forward-Port-Of: odoo/odoo#237278
This update automatically determines the sales order's VAT rate based on the warehouse location, ensuring accurate VAT calculations and compliance with VAT regulations. This eliminates manual configuration and reduces the risk of errors, improving invoicing accuracy and efficiency.
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 update fixes an issue where new users joining group chats weren't receiving the correct welcome message and subtitle. The change ensures all channel types display the appropriate start message and subtitle, enhancing the user experience for group chat participants. This was achieved through a code correction and added testing.
Original PR description
Before this commit, The start message subtitle condition was incorrect for group chats, this commit corrects that condition and also add a test to cover all the channel types to show correct start message and subtitle. Before: <img width="625" height="109" alt="image" src="https://github.com/user-attachments/assets/830f9574-573f-4448-b54f-b70c8a4685ef" /> After: <img width="640" height="133" alt="image" src="https://github.com/user-attachments/assets/bcba270a-88fc-446d-9015-1125872c5748" /> Forward-Port-Of: odoo/odoo#237425 Forward-Port-Of: odoo/odoo#237292
This update fixes an issue where selecting a document in the list view in dark mode resulted in a white background and unreadable text. The fix dynamically adjusts the background color based on the selected theme, ensuring clear visibility for all users.
Original PR description
**Steps:** - open documents in list view in dark mode - select and deselect a record **Observation:** - the selected record's background becomes white and text was already white - hence nothing can…
**Steps:** - open documents in list view in dark mode - select and deselect a record **Observation:** - the selected record's background becomes white and text was already white - hence nothing can be seen clearly **Cause:** - Commit [1] introduces a scss change for list view, but used hardcoded values for color, which works well for light mode but not in dark mode https://github.com/odoo/enterprise/blob/f73626fa778fd96de213a0fae61ced6fd5012d36/documents/static/src/scss/documents_views.scss#L29-L36 [1]: https://github.com/odoo/enterprise/commit/009fddcd20b0e7b81b8959f73e39d840d96167c7 **Fix:** - instead of hardcoding color, we use already available variable, which adjust the color, according to theme. **Before:** <img width="1150" height="176" alt="image" src="https://github.com/user-attachments/assets/33d0688c-d9cd-4266-bcc8-189e830bc391" /> <img width="1319" height="203" alt="image" src="https://github.com/user-attachments/assets/cd8fa68e-76ff-411d-8d37-4e61e2ce99e8" /> <br><br> **After:** <img width="1028" height="141" alt="image" src="https://github.com/user-attachments/assets/470365b0-c18f-497d-b3b2-11cd8fea371a" /> <img width="996" height="164" alt="image" src="https://github.com/user-attachments/assets/74d6b71b-852e-41ee-acb3-4b58d8eace9e" /> opw-5261669 Forward-Port-Of: odoo/enterprise#100114
This update ensures that the status of a sale order is correctly updated to 'Sales Order' in the Sales module after a payment is processed through the Point of Sale (PoS) system. Previously, the status remained as 'Quotation,' leading to potential confusion and errors. This fix maintains the accurate tracking of sales orders regardless of payment method.
Original PR description
**Steps to reproduce:** - Make a quotation in the Sales module - Go to PoS, click Quotation/Order and select your quotation - Select Settle the order - Go through with the payment - Go back to the…
**Steps to reproduce:** - Make a quotation in the Sales module - Go to PoS, click Quotation/Order and select your quotation - Select Settle the order - Go through with the payment - Go back to the Quotation in the Sales module The Status widget still shows Quotation instead of Sales Order **Why the fix:** Since 18.3, the sale_order.state was not updated anymore when the state changed through the PoS. This happened because we would only change the sale_order state if there was a downpayment involved. In 18.2, we always recomputed the sale_order that was linked to the order we are currently settling. The way it is done now is part of the same way it was done in 18.2 and before, meaning we add the linked sale_order regardless of downpayments. In 18.2, we did an action_confirm on the selected sale_orders, but doing that in 18.3 will create another picking for this sale_order. This is not what we want as the picking is now handled and created by the PoS. This fix will just put the related sale orders in the "sale" state, so that users can no longer confirm it in the sales modules, which would create a second picking and create duplicates. opw-5033979 Forward-Port-Of: odoo/odoo#237213 Forward-Port-Of: odoo/odoo#226008
This update fixes an issue where sale order previews incorrectly displayed a down payment percentage even after the online payment setting was turned off. The change ensures the preview accurately reflects the currently active payment percentage, preventing confusion and ensuring accurate order previews for sales teams. This improves the user experience and data accuracy.
Original PR description
****Behavior:**** **Current:** When setting the online payment percentage to something else than 100% and then turning off the setting. The preview of sale orders still show a down payment with the percentage set previously. This is caused because there is no check on wheter the setting is activated or not in the template. ****Steps to reproduce:**** - In Settings->Sales: activate Online Payment. - Set it to somethings else than 100% then save. - Turn the setting off then save. - Create a Sale Order. - There will be a down payment of 0€ with the percentage you set in parentheses. opw-5254575 Forward-Port-Of: odoo/odoo#236763
This update corrects a bug where archived users were incorrectly sending out automated follow-up emails for invoices and partners. The fix ensures that follow-up emails are only sent by active users, preventing confusion and ensuring accurate communication. This improves the reliability of our automated customer outreach.
Original PR description
### Issue: If an archived user is set as the Sales person on an invoice or as the followup responsible on a partner, it will be the one sending the automatic followups. ### Steps to reproduce: - Create a partner and an overdue invoice for this partner - Change the "Salesperson" of the invoice to another user - Archive this user - Accounting > Customer > Followup Reports - Click on the partner created earlier - Click the actions and "Process Automatic Follow-ups" - [17.0] Traceback - [18.0+] The sent message is from the user that was archived ### Cause: `_get_followup_responsible()` does not check is the users it returns are active or not. ### Solution: Create an iterable with all the possibilities and iterate on it to return the first active user in the list. Fallback on `self.env.user`. opw-5153159 Forward-Port-Of: odoo/enterprise#100465 Forward-Port-Of: odoo/enterprise#98807
This update corrects a bug in the demo kiosk's payment process. Previously, the kiosk incorrectly used a 'meal' payment mode, causing the payment screen to be skipped. This change ensures the kiosk always uses the 'each' payment mode when in kiosk mode, guaranteeing the correct payment flow.
Original PR description
The field `self_ordering_pay_after` should always be `each` when the `self_ordering_mode` is set to `kiosk`. This is enforced in the `write` method. However, the demo kiosk is created with a `self_ordering_pay_after` value of `meal`, until the `write` method is run. This results in behaviour such as the payment screen being skipped when it is not expected to. This commit sets the correct `self_ordering_pay_after` value of `each` when creating the demo kiosk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237521
This update resolves issues with Viva wallet integrations across multiple terminals by streamlining data transmission. Previously, concurrent database writes caused errors, but now information is sent directly via websocket, reducing message size and improving reliability. Additionally, the system now handles payment status polling and webhook events more efficiently.
Original PR description
When using many Viva terminals linked to the same DB, there could be many serialization errors due to concurrent writes to the DB. This is because the webhook controller writes to the…
When using many Viva terminals linked to the same DB, there could be many serialization errors due to concurrent writes to the DB. This is because the webhook controller writes to the `viva_wallet_latest_response` field of the payment method. The webhook request would be automatically retried later, but this could result in duplicate notifications being sent to the POS, or notifications being handled too late. This commit stops using the `viva_wallet_latest_response` field, instead sending the information directly via the websocket to the POS. Only the required information is sent to reduce the size of the message. In addition, there are two other minor fixes: - In the event that the initial payment request to Viva failed, the POS will no longer poll the payment status (this resulted in a Session ID not found error). - The webhook controller will now check the event type it receives, and only process the 'Transaction Payment Created' events. This should prevent any unintended behaviour if other webhooks are set up in Viva. opw-5226966 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237411 Forward-Port-Of: odoo/odoo#236454
This update streamlines the print experience by removing interface elements that aren't relevant in printed documents, specifically within the accounting and sales modules. The changes enhance print quality and reduce clutter, ensuring only essential information is included in printed reports and documents.
Original PR description
*: account, sale This change adjusts layouts for print mode and removes interface parts that do not belong on printed documents. Form View: - Removed border on the sheet - Removed actions line at end of list the list view (`o_field_x2many_list_row_add`) - Removed "?" tooltip indicator - Made list view full width in print mode Kanban View: - Removed "new" button (`.o-kanban-button-new`) Specific: - Accounting form view: removed "Add" outstanding credit buttons (`.outstanding_credit_assign`) - Sale form view: removed `.so_button_below_order_lines` ENT: https://github.com/odoo/enterprise/pull/100068 task-5265277 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue with accounting reports when printed, removing unnecessary borders and padding. This results in cleaner, more professional-looking reports for users, improving the overall user experience. The change is a straightforward fix to enhance the visual presentation of these reports.
Original PR description
This commit removes the padding and the border of the accounting reports when in print mode. COM: https://github.com/odoo/odoo/pull/236748 task-5265277
This update resolves a minor visual issue on the product pages where the 'out-of-stock' message wasn't properly spaced. The fix adds a margin bottom, ensuring the product page layout appears consistent and professional. This improves the overall user experience.
Original PR description
The out_of_stock_message div doesn't have a margin bottom, and it looks like something is off in the product page. Steps To Reproduce: 1.Go to a product with no inventory. 2.Add a out-of-stock message in the sale tab. 3.Go to the product page on the website. We can see that the message div has no margin bottom. To fix this we just add a margin bottom, as it was before. The PR that affected the margin bottom: https://github.com/odoo/odoo/pull/220506 opw-5259994
This update resolves an issue where clicking on message links outside of a conversation thread would open the link in a new browser tab. The fix ensures that message links always open within the existing Odoo window, improving user experience and workflow efficiency. This was a minor bug fix related to how Odoo handles internal links.
Original PR description
Before this commit, clicking on a message link for a message outside of the current thread would open a new tab. This unwanted behavior is caused by a missing return value on an override of Thread's `open` introduced in [1], breaking the chain of returns. This commit fixes the issue by correctly returning the super call in said override. [1] https://github.com/odoo/odoo/pull/223004 task-5268790
This update corrects a technical issue in the account reports module that was causing errors when generating reports. The change ensures that report data correctly references the selected return type, preventing a 'Expected singleton' error. This improves report stability and accuracy.
Original PR description
In this fwp https://github.com/odoo/enterprise/pull/100353, we change the `self.return_type_ids` by a browse, but we're still using `self.return_type_ids.id` in the new `return_type_id` key, introduced in 19.0, instead of the browse result, which could lead to a `Expected singleton` error. This commit replace the old self.return_type by the browse result. no-task
This update fixes a bug where time logs were incorrectly assigned to the user marking work orders as done, instead of the assigned employee. Now, time logs accurately reflect the employee who actually worked on the order, improving data accuracy and reducing user confusion. This ensures proper tracking of labor costs.
Original PR description
## **Issue Before This Commit:** When a work order is assigned to an employee (not linked to the current user), and the current user marks it as done, the time log is wrongly created under the…
## **Issue Before This Commit:** When a work order is assigned to an employee (not linked to the current user), and the current user marks it as done, the time log is wrongly created under the current user’s employee instead of the assigned one. This behavior caused confusion for the user as the wrong person was shown as working on the order. ## **Steps to Reproduce:** - Create an MO with work orders and confirm it. - Assign another employee to a work order. - Mark the work order as done with the current user from the work order line. - Open the workorder and notice that the time log is created for the current user’s employee. ## **Cause of the Issue:** The bug was introduced in PR (https://github.com/odoo/enterprise/pull/84790), where the logic for assigning the main employee was overridden, ignoring the case of an already assigned employee. ## **With This Commit:** The time log is now created for the assigned employee, This resolves the confusion by ensuring the right person is tracked on the work order. TaskID: 4983514 Forward-Port-Of: odoo/enterprise#100467 Forward-Port-Of: odoo/enterprise#93378
This update corrects an issue where the Odoo system was sending incorrect data in electronic invoices to the Hungarian tax authority (NAV). The system now adheres to specific documentation requirements, omitting the state name and only sending the required province code as defined by the ISO standard. This ensures compliance and accurate invoice submissions.
Original PR description
Purpose: According to documentation, in region tag in address details, we need to send that county's province code as per the ISO 3166-2 alpha 2 standard. E.g. 'HU-BU'. But we were sending state's name E.g. 'Budapest'. But since region tag is not mandatory for edi, we choose not to send that. Before this commit: In region tag, state's name was sent. After this commit: We stopped sending region tag. EDI Documentation(page-87): https://onlineszamla.nav.gov.hu/files/container/download/2025.10.09.%20EN_Online%20Invoice%20System%203.0%20Interface%20Specification%20.pdf task-5270199 Forward-Port-Of: odoo/odoo#236218
This update adds a notification to inform users when they are utilizing the Chorus Pro feature but haven't installed the necessary module. This ensures they receive all the required checks and functionality, preventing potential errors or omissions in their accounting processes. It's a proactive measure to maintain data integrity and user experience.
Original PR description
This commit will add an alert when the customer use Chorus pro but don't have the module installed, and so don't have all the additional checks <img width="982" height="242" alt="image" src="https://github.com/user-attachments/assets/fc35d4ee-9a8b-41b8-8ee3-cbc32b266379" /> task-5223874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237201 Forward-Port-Of: odoo/odoo#236856
This update enhances the portal experience for subcontractors by granting them the necessary permissions to create and manage serial numbers, view related stock movements, and register components for multiple manufacturing orders. The changes include security enhancements and database optimizations to ensure seamless operation for this user group. This improves efficiency and accuracy in subcontracting workflows.
Original PR description
Make sure that portal subcontractors can do what they need to: - create new serial numbers and assign them to SMLs -> new ACL for sequences (READ and WRITE) -> new ACL for mrp.production.serials to open the wizard - see SML serials in the Detailed Operations popup -> add context to portal view - open the MO list view for registering components for multiple MOs -> add the missing js file in the manifest - save the changes on the DB -> call `_has_workorders` before doing some workorder operations -> add sudo for MO unlink because a portal user doesn't have DELETE ACL -> add sudo for MO assign when using lots/serials -> skip writing the state field if there's no record to write - correctly increment sequence -> added the changes from https://github.com/odoo/odoo/pull/227095 to the subcontracting serial wizard task 5107873 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents Odoo from automatically canceling workorders when a subcontracting manufacturing order (MO) is created or modified through the portal. Previously, this caused unnecessary MO duplication. Now, the system correctly avoids workorders on subcontracted MOs, aligning with the intended product structure.
Original PR description
When adding/changing serial number on a subcontracting MO via portal view, Odoo will cancel and unlink the old MO(s) to recreate new ones. This include cancelling workorders, which a portal user doesn't have access to. Since subcontracted MO should not have workorders because the bom should not have operations, this PR adds a call to `_has_workorders` before searching for workorders.
This update fixes an issue where portal users couldn't properly unsubscribe from leads marked as spam. It now allows users to access and manage tags on leads when they identify them as spam, ensuring a smoother unsubscribe process and improved user experience. This change enhances the portal's functionality for managing unwanted communications.
Original PR description
Allow a portal user to read tags on the lead when he mentions that it is spam. Correct access for the unsubscribe process with child partner for the commercial partner of the portal user. task-5347166
This update resolves a bug that occurred during Odoo upgrades when a default confirmation template wasn't available. The error stemmed from incorrectly attempting to use a boolean value (False) as if it were an object with an 'exists' method. This fix ensures a smoother and more reliable upgrade process.
Original PR description
When there is no default confirmation template,
An error is raised:
AttributeError: 'bool' object has no attribute 'exists'. This happens because default_template is False,
So calling default_template.exists() results in the error. The issue occurs during the upgrade process.
```
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3142, in _init_column
value = field.default(self)
File "/home/odoo/src/odoo/19.0/addons/website_sale/models/website.py", line 52, in _default_confirmation_email_template
if default_template.exists():
AttributeError: 'bool' object has no attribute 'exists'
```
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-prThis update resolves an issue that occurred when users deleted all overtime rules before installing the 'hr_work_entry_attendance' module. The fix prevents a parsing error by intelligently handling the absence of required records, ensuring smooth module installation. This improves the user experience and avoids installation failures.
Original PR description
Currently a `ParseError` arises when the user installs the `hr_work_entry_attendance` module after deleting all `Overtime Rules' in the 'Rulesets` Configuration. Steps to reproduce: --- - Install…
Currently a `ParseError` arises when the user installs the `hr_work_entry_attendance` module after deleting all `Overtime Rules' in the 'Rulesets` Configuration.
Steps to reproduce:
---
- Install `hr_attendance` module(without demo)
- Attendance > Configurations > Overtime Rulesets
- Delete all `Overtime Rules` in `Default Ruleset`
- Now install `hr_work_entry_attendance` module
Traceback:
---
```py
Exception: Cannot update missing record 'hr_attendance.hr_attendance_overtime_employee_schedule_rule'
ParseError
while parsing /home/odoo/src/enterprise/19.0/hr_work_entry_attendance/data/hr_attendance_overtime_rule_data.xml:4, somewhere inside <record id="hr_attendance.hr_attendance_overtime_employee_schedule_rule" model="hr.attendance.overtime.rule">
<field name="work_entry_type_id" model="hr.attendance.overtime.rule" eval="obj()._get_default_work_entry_type_id()"/>
</record>
```
The error occurs because the user deleted all `Overtime Rules` and then installed the `hr_work_entry_attendance` module. which requires particular records.
This commit solves the above issue by using `noupdate="1"`and `forcecreate="0"` to skip the creation of record if it doesn't exists.
https://github.com/odoo/odoo/blob/b794f0f332f473deb2c04eba60baf4761db3b508/odoo/tools/convert.py#L364-L366
sentry-7023182659This update ensures the change line (difference between paid and total) is correctly displayed on the receipt when using languages other than English in Point of Sale. Previously, the system incorrectly skipped this line when the payment line was translated, leading to inaccurate receipts. This fix guarantees accurate receipt totals regardless of the POS user's language setting.
Original PR description
When using another language than english, the change line wasn't displayed on the receipt. Steps to reproduce: ------------------- * Set the POS user language to fr_BE (or any none english) * Pay an order in cash with an amount greater than the total. > Observation: Change line was not visible on the receipt Why the fix: ------------ The frontend was checking `paymentLine.name !== "return"`, so once the backend translated the name to “Retour”, the change line was skipped. By checking `is_change` we get the correct amount and we ensure `order.showChange` still returns true even when the “return” payment line is translated (e.g. in fr_BE). opw-5247079
This update fixes a technical error that occurred when validating online payments with invoices in the Point of Sale (POS) system. The fix involved correcting how invoice PDF downloads and cashbox actions were handled, ensuring smoother online payment processing for customers. This resolves a previous error that prevented successful order validation.
Original PR description
steps to reproduce: - Create an Online Payment payment method. - Open POS, create an order, and validate it using the Online Payment method with Invoice enabled. issue: - A traceback error is displayed after validating the order. fix: - Fixed the `invoice PDF download` actions so it use the correct service. - Also, corrected for the cashbox action. task: 5269502
This update corrects a calculation error related to PFA (Pension Funds Account) computations within the Belgian payroll module. The fix ensures accurate tax deductions are applied, improving the reliability of payroll processing for Belgian employees. This change addresses a previously identified issue and enhances compliance.
Original PR description
This commit refactors and fixes the PFA computation. task-5103485
This update corrects a technical error in how Odoo processes webhook events related to expense reports using Stripe virtual cards. Specifically, the system was incorrectly interpreting 'None' shipping values as dictionaries. This fix ensures accurate data handling and prevents potential disruptions to expense reporting workflows.
Original PR description
Add a fix to a pattern of error found in webhook events where virtual cards whose shipping value is "None" would be accessed as dict
This update removes a redundant filter in the HR work entry system, resolving an issue that caused problems with localization (l10n_BE). The change ensures accurate leave calculations by allowing the system to correctly handle variations in work entry types.
Original PR description
This filter was not necessary and was causing some issues in l10n_BE as the work entry type can change depending on various reasons. If it changed, the leave_id would not be copied to the new work entry. task-5103485 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 restores the ability for users to manually mark financial moves as 'to review' within the Odoo system. Previously, this functionality was hidden, but this change ensures users can accurately track and manage moves requiring review. This improves workflow efficiency for financial processes.
Original PR description
This commit restores the visibility of the `Reviewed` boolean on account.move (Other Info) so users can manually uncheck it and mark moves as 'to review'. Applies only to 19.0. task-5361487
This update resolves an error that occurred when setting a partner on a bank statement line, specifically when dealing with draft invoices lacking an invoice date. The fix ensures the system correctly compares invoice and statement dates, preventing a 'TypeError' and allowing for accurate reconciliation. This improves the stability of bank statement processing.
Original PR description
Currently, an error occurs when a user sets the partner on a statement line. **Steps to Reproduce**([video](https://drive.google.com/file/d/1ZQBBh4yjSljeqqL_jT8dh_QJ6LtFZdPb/view)): - Install the…
Currently, an error occurs when a user sets the partner on a statement line.
**Steps to Reproduce**([video](https://drive.google.com/file/d/1ZQBBh4yjSljeqqL_jT8dh_QJ6LtFZdPb/view)):
- Install the `account_accountant` module.
- Go to `Invoices` and create `two invoices` with the `same partner` and the `same total amount` by adding
an `invoice line`.
- Go to the `Dashboard` and click `Last Statement` under the `Bank journal`.
- Create a `new statement line` with the `same amount` as the `invoice amount`.
- Click `Set Partner` and select the `same partner` used in the invoices.
`TypeError: '<=' not supported between instances of 'bool' and 'datetime.date'`
After [this commit], when a user sets the partner on the statement line, the system attempts to automatically reconcile the line. It then searches for a single invoice matching the statement line amount [1] and tries to select the one with the closest prior or equal date. However, draft invoices have not an invoice_date, and when the system attempts to filter on this field, and the error is raised [2].
This commit ensures that the comparison between invoice date and statement date occurs only when the invoice date is present.
[this commit]: https://github.com/odoo/enterprise/pull/98269
[1]- https://github.com/odoo/enterprise/blob/84ccb807852ab6b118466d12c8f02ea4da7fa3db/account_accountant/models/account_bank_statement.py#L585
[2]- https://github.com/odoo/enterprise/blob/84ccb807852ab6b118466d12c8f02ea4da7fa3db/account_accountant/models/account_bank_statement.py#L249
sentry-7063516380This update ensures selection fields in list views can now be cleared to display an empty state, mirroring how many2one fields behave. Previously, clearing a selection field caused an error. This change provides a more consistent user experience and allows users to accurately represent the absence of a value.
Original PR description
Steps: - Install studio - Open any list view - Make sure multi_edit is enabled (or edit the view with debug menu) - Add a new selection field to the list view with studio with several values - Get…
Steps: - Install studio - Open any list view - Make sure multi_edit is enabled (or edit the view with debug menu) - Add a new selection field to the list view with studio with several values - Get back to the list view, select at least two record and edit the new selection field - Put any value, it will edit all selected record correctly - select at least two record and edit the field again - Try to clear the value (to have it empty) - Traceback Since this change https://github.com/odoo/odoo/pull/214422, selection fields no longer display “empty” values, to be consistent with many2one fields. Now, to set a selection field to a null value, you have to clear it, just as you would clear a many2one field. The problem arose because when you clear an input, `onInputClear` is called and triggers an onchange with the value `null`, but the `selection_field` code expects to receive a `false` if there is no value otherwise it searches for the value in the list of possible choices which is why the traceback is raised when `null` is received, because it is not in the list of choices. This comimt change the onchange of `selection_field` to change the value to `false` if it is equal to `null`. opw-5226200
This update resolves a bug where Google Calendar events weren't syncing correctly when created by a user with Google sync disabled, even if another user had it enabled. Previously, events created by one user wouldn't appear in the organizer's Google Calendar. The fix ensures the event sync is triggered based on the organizer's Google sync status, improving event visibility.
Original PR description
**Issue** Events were not synchonized if created by a user with google synchronization stopped, for a user with an active google synchronization. To reproduce: - Have user A with google synchronization stopped and user B with google synchronization enabled. - With user A, create an event with user B as the organizer. - Open the Google calendar of user B and notice the event is not present. In our own database, it was causing issues for meetings booked from website and created by the public user. **Change** The user returned by `_get_event_user` is the one who needs to perform the sync to google, so we check the status of its google sync. opw-4795476
This update resolves a bug that prevented POS orders with products using different units of measure from being correctly settled. Previously, the system would encounter errors. Now, POS orders with mixed units of measure can be settled successfully, ensuring accurate order processing and preventing disruptions to the sales process.
Original PR description
When a POS order contains products with different units of measure, the system was unable to settle the order properly, leading to errors. opw-5357109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where inserting a form snippet (like a 'Contact us' form) into an existing form created a broken HTML structure. The fix prevents this nesting, ensuring valid HTML and preventing errors when editing fields within the inserted form. This improves the stability and usability of the website builder.
Original PR description
When a snippet containing a `<form>` (e.g. “Contact us” form) is dropped inside an existing form element, the inner form is invalid HTML (see [1]). Steps to reproduce: =================== 1- Go to a…
When a snippet containing a `<form>` (e.g. “Contact us” form) is dropped inside an existing form element, the inner form is invalid HTML (see [1]). Steps to reproduce: =================== 1- Go to a Shop page and open a Product page. 2- Drag and drop a “Contact us” form snippet inside the existing product form (e.g. in description_ecommerce, which is an HTML field with `sanitize_form=False`). 3- Save the page, re-enter edit mode. 4- Click on any field of the inserted “Contact us” form. → traceback. Cause: ====== HTML does not support nested `<form>` elements. As soon as the browser parses the dropped snippet inside an existing `<form>`, it normalizes the DOM and strips or moves the inner `<form>` tag, keeping only its contents. The inner form therefore loses its attributes (action, method, data-model_name, etc.). When editing a field, `fetchAuthorizedFields` needs the form’s model it used to rely directly on `formEl.dataset.model_name`, which is missing in this broken structure, causing a crash. Solution: ======== Prevent dropping the snippets that contain a form inside another form, by filtering out the `selectorSiblings/Children` (which are used to make the dropzones appear) that are in forms, when they are dragged. This commit also uses the `getModelName(formEl)` helper wherever we need the form model instead of accessing `dataset.model_name` directly. [1]: https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Forms/How_to_structure_a_web_form opw-5256576