Thursday, November 27, 2025
28 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
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 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 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 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 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 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 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 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 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 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 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 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