Daily updates from Odoo
Navigate
Branch
Monday, April 7, 2025
24 changes
15 changes
Enhancements to existing features
Saved filters can now be shared with specific users instead of being limited to one owner or broadly shared. This improves collaboration by giving businesses finer control over who can access shared views and favorites across affected apps.
Original PR description
This commit adapts code related to ir.filters by replacing the user_id m2o field by user_ids which is a m2m and updating a patch related to the "Shared" checkbox which is now useless. See https://github.com/odoo/odoo/pull/202373 task-4610809
The UAE payroll module now distinguishes public holidays from other work entries and updates how unpaid leave is calculated. This helps payroll teams produce more accurate salary calculations when employee absences overlap with holidays or unpaid leave periods.
Original PR description
- added new work entry type: Public Holiday(AEPUBLICH) - update salary rule for Unpaid Leave(AEUNPAID) task-4555368
This update aligns the HR contract signing tests with a related change in how activity names are displayed. It helps ensure the system continues to validate the expected activity label format correctly.
Original PR description
In this PR, According to the Community PR, the activity name will be 'Activity Plan name - summary' That's why we need to change the test case Task-4327533
Resolved issues and error corrections
Shared Field Service tasks linked to sales order lines now open correctly for portal users. This prevents customers or external users from getting stuck when accessing shared task details, while keeping access limited to the specific internal data needed.
Original PR description
Steps to reproduce: - Install Field Service - Share a project that has tasks with sol. - Open task with portal user in portal Issue: - No error and task doesn't open. Reason: - Due to changes in field value getting in the python framework. PR: https://github.com/odoo/odoo/pull/201565 - In this PR the changes are that when ever a field is read/fetched then access is checked even record is cached. Fix: - Add sudo when reading that field because not every task can have this so giving read access is not that good. task-4690463
Code cleanup and technical improvements
The spreadsheet edition module was adjusted to stay compatible with recent internal changes to how spreadsheet ranges are handled. This keeps global filter editing working reliably while preparing the codebase for ongoing spreadsheet improvements.
Original PR description
Task: 4676075
Internal automated tests were adjusted to work with stricter blocking of unexpected web requests. This helps keep testing more reliable for accounting reports and document workflows without changing day-to-day user features.
Original PR description
See https://github.com/odoo/odoo/pull/202835
The IoT app now uses a single status field to track whether devices are connected. This removes duplicate information, reducing maintenance risk and helping keep device status displays consistent across IoT and Point of Sale flows.
Original PR description
In #81180, a `connected_status` field was added to the `iot.device` model in order to show the status as a banner widget. However, this meant that there were two separate fields for the connection status, `connected` and `connected_status`. This commit removes the `connected` field and replaces all usages of it with `connected_status`. Upgrade PR: https://github.com/odoo/upgrade/pull/7484 task-4652455
The partner ledger report has been reworked to use a dedicated reporting engine. This is an internal cleanup intended to make the report easier to maintain and evolve without changing the business workflow.
Miscellaneous changes
The Issue: Before this commit, the _onchange_type function in the account journal was not triggered, leading to inconsistencies in expected behavior, such as the failure to update the alias_name field when changing the journal type. The Fix: Invoke the _onchange_type super method. runbot-116669 Forward-Port-Of: odoo/enterprise#82446
Original PR description
The Issue: Before this commit, the _onchange_type function in the account journal was not triggered, leading to inconsistencies in expected behavior, such as the failure to update the alias_name field when changing the journal type. The Fix: Invoke the _onchange_type super method. runbot-116669 Forward-Port-Of: odoo/enterprise#82446
This commit is the counterpart of odoo/odoo#204833 which ignores the `t-translation` attributes in view compilers. As a consequence, this directive should no longer be in the list of accepted directives. Forward-Port-Of: odoo/enterprise#82898
Original PR description
This commit is the counterpart of odoo/odoo#204833 which ignores the `t-translation` attributes in view compilers. As a consequence, this directive should no longer be in the list of accepted directives. Forward-Port-Of: odoo/enterprise#82898
…with empty working schedule **Issue** When setting the working schedule to empty, opening the Gantt view is not possible as an error is displayed Steps to Reproduce: 1. Login as Mitchell Admin 2. Install Employees and Project apps 3. Go to Employees > Contracts 4. Select a contract from Mitchell Admin 5. Empty the Working Schedule Field 6. Set Planning or Attendances as work entries > Save 7. Go to project app 8. Select a project 9. Switch to the Gantt view 10. An error messa
Original PR description
…with empty working schedule **Issue** When setting the working schedule to empty, opening the Gantt view is not possible as an error is displayed Steps to Reproduce: 1. Login as Mitchell Admin 2.…
…with empty working schedule **Issue** When setting the working schedule to empty, opening the Gantt view is not possible as an error is displayed Steps to Reproduce: 1. Login as Mitchell Admin 2. Install Employees and Project apps 3. Go to Employees > Contracts 4. Select a contract from Mitchell Admin 5. Empty the Working Schedule Field 6. Set Planning or Attendances as work entries > Save 7. Go to project app 8. Select a project 9. Switch to the Gantt view 10. An error message appears 11. Expected Behavior: Gantt view should be displayed without errors. Actual Behavior: Gantt view is not displayed, and an error message appears. **Root Cause** The issue occurs because before processing the work intervals, the system checks for the presence and uniqueness of a calendar. If a user has no assigned schedule, the function attempts to process a None value, which results in an error when calling ensure_one in _attendance_intervals_batch. **Fix** To prevent the error, users without a working schedule are skipped when computing valid work intervals. If a user has no assigned schedule, they will not be included in _work_intervals_batch, ensuring the function executes correctly without attempting to process an empty calendar. opw-4462241 Forward-Port-Of: odoo/enterprise#81883 Forward-Port-Of: odoo/enterprise#79159
Issue: ======== There is an issue during the generation of invoices from subscription that causes the is_invoice_cron field on the sale order to remain `True`. This prevents the processing of transactions and, as a result, does not mark the invoices as paid. Furthermore, this issue blocks the generation of subsequent invoices. To reproduce: ============= 1. Create a subscription that does not require initial client payment, (can generate an invoice on the next invoice date). 2. Creat
Original PR description
Issue: ======== There is an issue during the generation of invoices from subscription that causes the is_invoice_cron field on the sale order to remain `True`. This prevents the processing of…
Issue: ======== There is an issue during the generation of invoices from subscription that causes the is_invoice_cron field on the sale order to remain `True`. This prevents the processing of transactions and, as a result, does not mark the invoices as paid. Furthermore, this issue blocks the generation of subsequent invoices. To reproduce: ============= 1. Create a subscription that does not require initial client payment, (can generate an invoice on the next invoice date). 2. Create 30 other subscriptions (equal to the batch size value) that cannot generate invoice until the client has made a payment. 3. Run the scheduled action “Sale Subscription: generate recurring invoices and payments.” 4. You will notice that the first Sale Order remains to “is_invoice_cron” as True Problem: ======== the condition to trigger the cron to invoice subscriptions is based on the number of subscriptions that can be invoiced in a batch. But we are taking all the subscriptions while it should be only the subscriptions that can be invoiced. Solution: ========= filter the subscriptions that can be invoiced before checking the condition to trigger the cron to invoice subscriptions. opw-4559250 Forward-Port-Of: odoo/enterprise#82477 Forward-Port-Of: odoo/enterprise#82340
According to the DATEV Format documentation, the VAT needs to be split into two columns instead of one. The first column being the country code (ISO 3166), and the second one being the remaining numbers. task-4600047 runbot : https://runbot.odoo.com/runbot/bundle/16-0-datev-export-roto-352476 Forward-Port-Of: odoo/enterprise#82104 Forward-Port-Of: odoo/enterprise#80843
Original PR description
According to the DATEV Format documentation, the VAT needs to be split into two columns instead of one. The first column being the country code (ISO 3166), and the second one being the remaining numbers. task-4600047 runbot : https://runbot.odoo.com/runbot/bundle/16-0-datev-export-roto-352476 Forward-Port-Of: odoo/enterprise#82104 Forward-Port-Of: odoo/enterprise#80843
Fix runbot error in `l10n_br_edi_pos` module. Some override were not takin into account the possibility to have several records in self. runbot error ID: 161535 Forward-Port-Of: odoo/enterprise#82299
Original PR description
Fix runbot error in `l10n_br_edi_pos` module. Some override were not takin into account the possibility to have several records in self. runbot error ID: 161535 Forward-Port-Of: odoo/enterprise#82299
Steps to Produce: - Generate offer contract from recruitment. - Sign the contract and submit it. - Open an existing offer and click on the stat button. issue: - stat button opens new contract from view as employee contract is False. Fix: - return applicant's newly created contract to the stat button. task-4610751 Forward-Port-Of: odoo/enterprise#80943
Original PR description
Steps to Produce: - Generate offer contract from recruitment. - Sign the contract and submit it. - Open an existing offer and click on the stat button. issue: - stat button opens new contract from view as employee contract is False. Fix: - return applicant's newly created contract to the stat button. task-4610751 Forward-Port-Of: odoo/enterprise#80943
9 changes
Enhancements to existing features
Canadian EFT payment files now automatically replace special characters with standard plain-text equivalents. This helps files meet CPA005 banking requirements and reduces the risk of payment file rejection.
Original PR description
- Replacing all special characters in generated EFT files with normal ascii counterparts to fit the requirements of the CPA005 standard. - Adding an assert for it in tests. task-4609483
Resolved issues and error corrections
The point-of-sale certification flow now handles connection failures properly when the required server cannot be reached. This prevents automated checks and related operations from crashing, improving reliability for German POS certification setups.
Original PR description
Before this commit, the fetch error was not correctly caught, leading to a crash of the runbot when the server was not reachable. runbot: 160959
Bulk document actions that create journal entries now return users to the journal list instead of opening only the last created entry. This makes processing multiple documents at once more predictable and avoids extra navigation for accounting users.
Original PR description
When you apply a journal entry action (e.g. Create Vendor Bill) to several documents at once, you should be redirected to the journal list view. Since version 18.0, you're redirected to the form view of the last entry you've just created. The corresponding actions have several sub-actions and cannot be launched on several records at the same time. The selected documents are processed individually and the last sub-action returns systematically a form view. To fix this, we inject a context key containing the ids of the selection.Then the last sub-action uses it to determine the appropriate view(s) to return. task-4606751
This update adjusts accounting-related automated tests so they work correctly with recent changes to the internal test tooling. It helps keep Odoo's test suite reliable while limiting the change to test code only, reducing risk for business operations.
Original PR description
## Pull Request HOOT (PRHOOT) 30 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/203713 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a manufacturing planning issue where component demand could be missed when the finished product and its component used different unit rounding precision. Planning now uses the more precise rounding, helping ensure required components are correctly forecast and replenished.
Original PR description
When the parent product has a less precise rounding than its component, the indirect demand may sometimes be bypassed because float_compare will round one value to zero and compare it to zero, making them equal. Steps: - create product FINAL, UoM rounding at 1.0 - create product COMPONENT, different UoM with rounding at 0.01 - create a BoM for 16 units of FINAL, with COMPONENT at 0.4 on bom line - create MPS record for FINAL with its new BoM - set the safety stock of MPS FINAL at 10 and its minimum to replenish at 16 Issue: The indirect demand of MPS COMPONENT is not computed because float_compare will round (0.025*16) to zero and compare it with 0, thus bypassing the creation of indirect demand. Fix: Always use the more precise rounding between a product and its component. opw-4654955
Closing a subscription no longer removes previously earned MRR-based commission from the report. This prevents cancellation records from incorrectly offsetting commissions for subscriptions that were already invoiced.
Original PR description
To reproduce ============ 1- create commission plan based on MRR 2- create subscription and invoice it 3- go to the commission report for that plan, the commission for that subs is there 4- close the subscription and check the report again -> the commission is not there anymore even that the sub is invoiced Problem ======= when closing a subscription we create a `sale_order_log` with `amount_signed` equals to negative value of the original sale order, these logs are taken into account in the commission report Solution ======== exclude `sale_order_line` with `event_type == 2_churn` from commission report opw-4650466
Miscellaneous changes
Before this commit, the `Europe/Brussels` timezone was applied 2 times on the calculation of the end_datetime when the slot is linked to a template and so the end date time of the slot could suddenly be before the start date time, which should not be possible. The timezone is applied 2 times, because the start date time computed already got the right timezone, so it is not needed to apply again the timezone since the timezone is already defined thanks to the start date time used in the co
Original PR description
Before this commit, the `Europe/Brussels` timezone was applied 2 times on the calculation of the end_datetime when the slot is linked to a template and so the end date time of the slot could suddenly be before the start date time, which should not be possible. The timezone is applied 2 times, because the start date time computed already got the right timezone, so it is not needed to apply again the timezone since the timezone is already defined thanks to the start date time used in the computation. This commit makes sure the timezone is applied once during the calculation of the end datetime, to be sure the difference between UTC and the timezone to apply is not applied 2 times on the end date time. runbot-error-162055 Forward-Port-Of: odoo/enterprise#82529
According to the DATEV Format documentation, the VAT needs to be split into two columns instead of one. The first column being the country code (ISO 3166), and the second one being the remaining numbers. task-4600047 runbot : https://runbot.odoo.com/runbot/bundle/16-0-datev-export-roto-352476 Forward-Port-Of: odoo/enterprise#82104 Forward-Port-Of: odoo/enterprise#80843
Original PR description
According to the DATEV Format documentation, the VAT needs to be split into two columns instead of one. The first column being the country code (ISO 3166), and the second one being the remaining numbers. task-4600047 runbot : https://runbot.odoo.com/runbot/bundle/16-0-datev-export-roto-352476 Forward-Port-Of: odoo/enterprise#82104 Forward-Port-Of: odoo/enterprise#80843
Steps to Produce: - Generate offer contract from recruitment. - Sign the contract and submit it. - Open an existing offer and click on the stat button. issue: - stat button opens new contract from view as employee contract is False. Fix: - return applicant's newly created contract to the stat button. task-4610751 Forward-Port-Of: odoo/enterprise#80943
Original PR description
Steps to Produce: - Generate offer contract from recruitment. - Sign the contract and submit it. - Open an existing offer and click on the stat button. issue: - stat button opens new contract from view as employee contract is False. Fix: - return applicant's newly created contract to the stat button. task-4610751 Forward-Port-Of: odoo/enterprise#80943