Daily updates from Odoo
Wednesday, January 28, 2026
34 changes · master
Enhancements to existing features
This update enhances the clarity of settings related to group discussions within Odoo Enterprise. The PR has updated the help text across these settings to be more user-friendly and consistent. This improves the overall user experience and makes it easier for users to configure and manage their discussion groups.
Original PR description
**Description of the issue this PR addresses:** Revamp Discuss Settings **Desired behaviour after PR is merged:** This PR includes: - Updated help strings across settings for consistent and user-friendly phrasing. Community PR: https://github.com/odoo/odoo/pull/234674 part of - [5227387](https://www.odoo.com/odoo/project/1519/tasks/5227387) **Before**: <img width="556" height="524" alt="image" src="https://github.com/user-attachments/assets/7d853b01-68b7-4591-9492-604fc9c01ee2" /> **After**: <img width="554" height="500" alt="image" src="https://github.com/user-attachments/assets/11175f5c-3875-4e57-96fe-3ff81be86bec" />
This update replaces outdated inline links with proper button elements in the Odoo Enterprise interface. This change improves the user experience and aligns with best practices for interactive web elements, ensuring a more consistent and accessible design.
Original PR description
This commit is based on the community one which introduces the `.btn-link-inline` class to reproduce the inline styling of a `<a href="...">` tag as a variant of Bootstrap's `.btn.btn-link`. This allows to properly uses `<button>` element for interactive DOM elements instead of relying on a "hacky" and non-semantic `<a href="#">` (tl;dr: `<a>` HTML tag are for navigation, `<button>` are for interactivity). task-4380519
Resolved issues and error corrections
This update addresses a situation where quality checks wouldn't display a helpful message if no IoT device was connected. Now, a notification appears when a measure quality check doesn't have an associated IoT device, preventing confusion and ensuring users are aware of the setup.
Original PR description
We now display a notification when no device is configured for a measure quality check. opw-5409775 Forward-Port-Of: odoo/enterprise#105280 Forward-Port-Of: odoo/enterprise#105207
This update fixes an issue preventing bookings from being scheduled for the last hour of the day. The system was incorrectly interpreting the end of the day as an unavailable slot, blocking appointments. The fix adjusts a calculation to accurately recognize the 23:00-00:00 time range as available.
Original PR description
**Steps to reproduce:** - Go to Appointment app - Edit an appointment type - Ensure its availability is on resources - Set duration to 1 hour - Add a schedule slot ending in 00:00 - Save and go to…
**Steps to reproduce:** - Go to Appointment app - Edit an appointment type - Ensure its availability is on resources - Set duration to 1 hour - Add a schedule slot ending in 00:00 - Save and go to the website page of the appointment - Last slot is not showing (23:00-00:00) **Issue:** When computing the appointment slots of a resource using time range, the end of day is considered as an unavaibility resource slot with this interval in `_get_unavailable_intervals`: `i_start = 23:59:59.999999` `i_stop = 00:00` this conflicts with the given range (23:00-00:00) in `self._slot_availability_is_resource_available` It comes from `_attendance_intervals_batch`, as `float_to_time(24.0)` is converted to `time.max` (23:59:59.999999) by: `day_to = datetime.combine(day, float_to_time(attendance.hour_to))` This introduces the microsecond unavaibility at the end of the day, which blocks the booking. (it's working properly for availability on users appointments) **Fix:** Changed the condition so that 23:59:59.999999 is considered as equal to 00:00. opw-5163892 Forward-Port-Of: odoo/enterprise#104927 Forward-Port-Of: odoo/enterprise#100853
This update resolves an issue where creating new contract templates in Odoo would trigger an error requiring a filing status. The change ensures contract templates don't need a filing status, aligning with the correct process of determining this setting per employee. This prevents unnecessary errors and simplifies template creation.
Original PR description
1. Set "My US Company" state to California, 2. Go to Employees > Employees > Contract Templates, 3. Click New, 4. Fill in a name and save, 5. Invalid Operation: "The employee state filing status is…
1. Set "My US Company" state to California, 2. Go to Employees > Employees > Contract Templates, 3. Click New, 4. Fill in a name and save, 5. Invalid Operation: "The employee state filing status is empty..." A constraint ensures an l10n_us_state_filing_status is set on `hr.version`. The field is used by the salary rules. This field used to be on `hr.employee` and was moved to `hr.version` [1]. There's two types of `hr.version` records: templates without employee_id and actual contract versions linked to an employee. We don't want to evaluate the constraint for the templates, the only way to set a filing status is through the employee so it will always raise. This is functionally correct as well, contract templates should not have a hardcoded filing status, this should be determined per employee. The constraint will now only raise when loading a contract template on the employee or editing the field through the employee. [1] odoo/enterprise#83136 opw-5458566 Forward-Port-Of: odoo/enterprise#105575 Forward-Port-Of: odoo/enterprise#104990
This change ensures the `account_number` field is consistently stored as a string, replacing the previous use of `False` when no account number is provided. The test case has been updated to account for this new behavior, improving the reliability of bank statement imports.
Original PR description
Due to the sanitization of the `account_number` field, the value is now consistently stored as a string. When no account number is available, an empty string (`''`) is used instead of `False`. The test case has been updated to reflect this behavior. Related: https://github.com/odoo/odoo/pull/245180 task-4872851
This update resolves minor UI issues related to the ActivityWatch download screen within the timesheet grid. It ensures a smoother and more reliable user experience when accessing and downloading timesheet data. This fix was previously deferred and is now implemented.
Original PR description
This PR fixes some minor stuff that didn't make it into the previous PR. Forward-Port-Of: odoo/enterprise#105300
This update resolves an issue where generating recruitment offers for new applicants in the 'Experienced Developer' role resulted in a multi-company error. The fix created a specific demo data record for the Belgian version of this job position, ensuring accurate offer generation within the US company setup. This resolves a reported bug impacting recruitment workflows.
Original PR description
## Issue: When we go to recruitment and try to generate offer for a new applicant for job position 'Experienced Developer', it shows multi company error. ## Steps to reproduce: 1. Go to recruitment for US company 2. Make a new applicant for the position 'Experienced Developer'. 3. Then generate offer for that applicant, multi company error will come. ## Cause: The job was inherited and given `contract_template_id`. ## Fix: Made a new record for Belgium Job position 'Experienced Devloper(BE)'. backport of task-4885755 task-5445798 Forward-Port-Of: odoo/enterprise#104186 Forward-Port-Of: odoo/enterprise#102991
This update resolves a misleading duplicate order warning that appeared when users upsell subscriptions in version 19.0. The change specifically excludes upsell quotes from the duplicate order check, ensuring that users aren't incorrectly alerted about potential duplicates. This improves the user experience and prevents unnecessary notifications.
Original PR description
Version: - 19.0 Steps to reproduce: 1. Create a subscription. 2. Set a customer reference 3. Confirm the subscription and create an invoice. 4. Upsell the subscription to generate a upsell quote (state '7_upsell'). Issue: A duplicate order warning is displayed when upsell a subscription Solution: Exclude upsell quotes (`subscription_state == '7_upsell'`) from the duplicate order check in `_fetch_duplicate_orders`. This prevents incorrect warnings when creating or opening upsell quotes. taskid-5438769 Forward-Port-Of: odoo/enterprise#102795
This update enhances the website editor by ensuring all images attached to a website are accessible, not just those automatically included. This prevents lost images from being unavailable to users, improving website content management and flexibility. It's a simple change to ensure a more complete and user-friendly experience.
Original PR description
Make it so that every image attachment is accessible in the website editor instead of just the ones present in the generated website. This is done to make sure that even if an image has been left over during the matching it is still accessible to the user.
This update resolves a test failure in the web_studio module caused by a dependency issue. The test incorrectly checked for models that weren't part of the installed modules, specifically due to the 'account_edi' module. The fix ensures the test accurately reflects the modules that are actually present, preventing false failures.
Original PR description
`RELATED_MODELS_TO_EXCLUDE` contains `account.edi.document`, which is installed by `account_edi`, which is neither in the `needed_modules` set nor a dependency of any of them. Therefore the test can fail because `account_edi` is not installed even though every module in the set is. Improve the test by checking that the models or fields we're checking for actually belong to the modules we've listed. Also add the missing module in the list. Forward-Port-Of: odoo/enterprise#105504 Forward-Port-Of: odoo/enterprise#104879
This update removes potentially problematic 'bare except' clauses in several Odoo modules. These clauses could inadvertently suppress critical errors like system exits, leading to instability. The change ensures more robust error handling and prevents unexpected application behavior.
Original PR description
Using bare except clauses is dangerous. They will also catch `BaseException` exceptions and may therefore suppress exceptions such as `SystemExit`, `KeyboardInterrupt`, etc. It is therefore good practice to explicitly mention the type of exception we want to catch. It is possible to use `except BaseException` if necessary. task-5008738
This update clarifies how SCSS variables are defined, ensuring only one of the !global or !default flags can be used. This change improves the consistency and predictability of our stylesheets, reducing potential styling issues. The update aligns with a recent Sass documentation change.
Original PR description
Variables will only allow a single !global or !default flag. Duplicate flags never had any additional effect, this just ensures that stylesheets are more consistent. Reference: https://sass-lang.com/documentation/breaking-changes/duplicate-var-flags/
This update resolves an issue in Odoo's Web Studio where incorrectly configured related fields could cause errors and warnings. The change ensures that related fields are only created when linked to searchable fields, preventing these technical problems and improving stability for business users. This resolves a previous vulnerability.
Original PR description
Before this commit studio allowed to make a related field with a non-searchable field (ie standard computed fields) in the the chain. This triggered a warning at creation (at fields.py:resolve_depends) and errors when using in a business setting. After this commit, the filter to build the relational field is modified to take into account this. opw-5436158 Forward-Port-Of: odoo/enterprise#105668 Forward-Port-Of: odoo/enterprise#105607
This update resolves a problem where the demo call tour wasn't functioning correctly with the standard demo data. The code was adjusted to ensure the correct contact and activity were selected during the tour, and the tour file was moved to the appropriate location for improved functionality. This ensures a smoother experience for users running the demo.
Original PR description
Make sure we select correct contact/activity when with demo data. Also move the tour to correct file. Forward-Port-Of: odoo/enterprise#105609
This update fixes an issue where applicant stage changes weren't correctly displayed in the recruitment reports demo data. The fix ensures that stage change messages appear with the correct 'Stage changed' label and uses the accurate 'Qualification' stage name, improving the clarity of applicant communication history.
Original PR description
…records in hr_recruitment_reports demo data Steps to reproduce: 1. Load demo data for hr_recruitment_reports module 2. Check applicant records in chatter 3. Observe that stage change messages don't…
…records in hr_recruitment_reports demo data Steps to reproduce: 1. Load demo data for hr_recruitment_reports module 2. Check applicant records in chatter 3. Observe that stage change messages don't show "Stage changed" label 4. Review mail.tracking.value records for applicant stage changes 5. Observe incorrect stage name "Initial Qualification" instead of "Qualification" Bug cause: mail.message records for applicant stage changes were missing the subtype_id field, which defaults to an incorrect subtype (mt_note instead of mt_applicant_stage_changed). This caused the messages to be treated as internal notes rather than stage change notifications. Additionally, mail.tracking.value records used "Initial Qualification" as the old_value_char or new_value_char, which doesn't match the actual stage name defined in hr_recruitment module. The correct stage name is simply "Qualification" (ref: hr_recruitment.stage_job1). Solution: - Add subtype_id field with reference to hr_recruitment.mt_applicant_stage_changed to all mail.message records that track applicant stage transitions - This ensures stage change events are properly identified and displayed in chatter with the correct "Stage changed" label - Update old_value_char and new_value_char fields in mail.tracking.value records to use the correct stage name "Qualification" instead of "Initial Qualification" - Ensures consistency with actual stage names and proper display in applicant chatter history Affected records: 20 mail.message records in hr_recruitment_reports_demo.xml Task Id:5454691 Forward-Port-Of: odoo/enterprise#105278
This update corrects a problem in the testing process for payroll documents. The original setup incorrectly assumed contract end dates were always false, leading to test failures. The fix ensures contract end dates are automatically set to two years from the contract start date, aligning with standard payroll practices.
Original PR description
### Cause: Apparently the contract ends automatically after a period if `contract_date_end == False` ### Solution: Set `contract_end_date` to ` Date.today() + relativedelta(years=2)` like in `hr_payroll/tests/common.py` runbot-237945 runbot-237894 Forward-Port-Of: odoo/enterprise#104627
This update fixes a problem that occurred when installing new chart of accounts. Previously, creating a new payroll database with a specific chart (ZA) would trigger an error. Now, the system correctly handles deleting and replacing old records during chart of account installations, ensuring smoother payroll database setup.
Original PR description
When installing a chart of account, previous records are deleted to be replaced by the one of the installed chart. Since odoo/odoo@4400130eb32, we need to explicitly check for force_delete flag. Before this commit, creating a new payroll database with the ZA chart of account was raising this constraint. opw-5879978 Forward-Port-Of: odoo/enterprise#105633
This update resolves an issue where outdated sign requests were incorrectly sending notifications to the wrong users due to missing email information. The fix ensures that sign requests are only sent to users with matching email addresses, improving the accuracy and reliability of the sign request process. This prevents unnecessary notifications and streamlines document signing.
Original PR description
This commits fix the problem where the `signer_email` field of old sign items don't have a value defined then showed up as "next documents to be signed" for other users, even when the email doesn't match. task-5487349 Forward-Port-Of: odoo/enterprise#104755
This update resolves a technical issue that could cause errors when generating Peruvian VAT (PE) documents. The fix ensures that the system handles cases where a required text field is missing, preventing a traceback and improving the reliability of the l10n_pe_edi module. This ensures accurate VAT reporting for our Peruvian customers.
Original PR description
Forward-Port-Of: odoo/enterprise#105610 Forward-Port-Of: odoo/enterprise#105462
This update addresses a technical adjustment to the checksum associated with the EU IoT Scale certification module. The underlying code for the scale component was modified to resolve a bug, necessitating a corresponding update to the checksum to maintain data integrity. This ensures accurate reporting and compliance.
Original PR description
Checksum needs to be updated as the code of the scale changed for a bugfix Cummunity PR: https://github.com/odoo/odoo/pull/245048 Forward-Port-Of: odoo/enterprise#105328
This update resolves a technical issue preventing the correct generation of events related to timesheets. The problem stemmed from an outdated categorization method, which has now been corrected. This ensures accurate tracking and reporting of timesheet activity.
Original PR description
Fake events generation was broken since we categorized events by category instead of watcher in https://github.com/odoo/enterprise/pull/105263. Also something else that we shall not mention Forward-Port-Of: odoo/enterprise#105724
A small correction was made to the names of reports used in the Spanish tax reporting module (l10n_es_reports). This change was a result of a recent system update and ensures the reports function correctly. The updated names are now consistent and accurate.
Original PR description
Problem --------- During the FWP moving the dictionnary definition from in-class to standalone, the naming of the wizards was wrongly updated. Solution --------- Change the naming from `l10n_es_reports_2025` to `l10n_es_reports`. error-237536 Forward-Port-Of: odoo/enterprise#105537
This update ensures accurate payslip data by adding a necessary 'sudo' call to access employee records. Previously, users lacked the correct permissions to update their own payroll information, leading to errors. This change corrects a technical issue and improves data reliability.
Original PR description
From a previous PR (103147), the payslip update logic was moved to the write function which gets called when a field is changed. In doing so, a sudo call is necessary to avoid problems with users modifying their own record (and not having access rights to read slip_ids). This also applies to tests and solves the following runbot error: Runbot Error: 237743 Forward-Port-Of: odoo/enterprise#105287
This update corrects a bug where the website generation process wasn't correctly setting a key value. The fix ensures that the website creation process is always enabled, preventing issues with new website setups. This improves the reliability of the website generation feature.
Original PR description
Missing the 'import_website' value, and since /startwebsite always creates a website it should always be True. Forward-Port-Of: odoo/enterprise#104894
This update fixes a technical issue where Greek translations were incorrectly using the 'gr' language code instead of the correct 'el' code. This ensures that all Greek language content within the Odoo Enterprise system is accurately translated and displayed. The fix was part of a larger effort to improve the consistency of our internationalization efforts.
Original PR description
~~Modules added into stable without being properly added to .weblate.json file = never translatable.~~ Fix Greek translations using the wrong language code. `gr` => `el` Forward-Port-Of: odoo/enterprise#105578 Forward-Port-Of: odoo/enterprise#104890
A recent bug in the Point of Sale appointment tour was causing it to fail when tests were run close to midnight. This was due to the system scheduling appointments for the next day, which the POS frontend then filtered out. This fix ensures the tour functions correctly regardless of the time of day.
Original PR description
The `test_pos_restaurant_appointment_tour_basic` test was failing when run late in the day. The test creates an appointment 30 minutes in the future and expects a corresponding label to appear underneath the table in the POS floor plan. However, if the test is executed near midnight (e.g. 23:45 UTC), the appointment is scheduled for the following day. Since the Point of Sale frontend only displays appointments for the current day, it filters the booking out, causing the tour to timeout while waiting for the label. runbot-232601 Forward-Port-Of: odoo/enterprise#105738
Features or functions removed from Odoo
This update removes the 'New' button from the DIMONA Declaration List view in the odoo/enterprise module. This change simplifies the user interface and streamlines the process of creating DIMONA declarations, aligning with best practices for user experience. It addresses a minor UI inconsistency.
Original PR description
. Remove the New button on DIMONA Declaration List view task-5471873
This pull request removes a broken widget that was previously used for scanning product quantities during receiving. The recommended approach now utilizes the dedicated Barcode app, streamlining the process and eliminating a source of potential errors. This change improves efficiency and simplifies inventory management.
Original PR description
This widget has been broken for some time and can be removed. It was probably used when receiving products, allowing the operator to scan a product and its quantity, and to send a barcode command to move to the next line. In any case, the new recommended approach is to use the Barcode app.
Code cleanup and technical improvements
This update enhances the tracking tests within Odoo's enterprise modules, primarily by simplifying the checks for message content and adding new tests for appointment creation. The changes streamline test maintenance and ensure consistent tracking across various modules, improving the reliability of our email tracking functionality.
Original PR description
Use higher level helper for message content check, including tracking values. That way all checks are globally hidden in tools and it is easier to update / adapt tests if somehow modeling of tracking values change (yay). Add tests for creation, which currently generates no tracking message. Remove some duplicated / useless test or test parts when possible. Batch-ize some tests, just to cover tracking when creating or updating records in batch. Update a bit duration mixin tests, trying to make them easier to update if model has to change (yay). Task-5503121 Prepares Task-3645865
This update refactors stock tests to exclusively use local data, improving test stability and reducing reliance on external systems. This change simplifies testing and ensures consistent results, leading to more reliable stock management processes within Odoo.
This update refactors the WhatsApp channel model and removes a previous patch related to thread management. This change streamlines the handling of data within WhatsApp channels, improving the overall system's efficiency and organization. It's a technical update focused on internal improvements to the WhatsApp functionality.
Original PR description
This commit move the fields to discuss channel model and remove thread_model_patch.
This update removes the use of 'Cache view of fields' within several Odoo reports. This change is part of a broader effort to streamline Odoo's codebase and improve performance. While the reports continue to function as before, this refactoring prepares for future updates and optimizations.
Original PR description
https://github.com/odoo/odoo/pull/246069
This update reorganizes the structure of portal chatter code to better align with how it's used across Odoo. The changes clarify which parts of the chatter system are for website-only functionality versus those shared with project sharing, improving code organization and maintainability. This ensures smoother performance and future updates.
Original PR description
When the portal chatter conversion began, code was split into `core` and `frontend` folders for chatter in portal. `core` was intended for shared logic between website and project sharing while `frontend` was reserved for website only usage. With this commit, the boot service which is responsible for lazy loading the portal chatter in frontend is now located in the `frontend` folder. Those that are `portal specific` or common between `portal` and `project sharing` are located in the `portal` and `portal_project` folders respectively. Accordingly, `web_portal` subfolder has been renamed to `web_portal_project` to reflect the actual usage. The folder tree structure will look like this: In portal: ``` src/ |-- chatter/ | |-- frontend/ | |-- portal/ | |-- portal_project/ ``` In mail: ``` src/ |-- chatter/ | |-- web/ | |-- web_portal_project/ ``` [Comunity PR](https://github.com/odoo/odoo/pull/206284)