Daily updates from Odoo
Saturday, May 9, 2026
64 changes
11 changes
Resolved issues and error corrections
This update fixes a bug in how tax reports calculate balances. Previously, a leading hyphen in a tax tag formula caused incorrect results, often returning a value of 0. Now, the system correctly interprets hyphens to negate balances, ensuring accurate tax report calculations.
Original PR description
When writing a new formula on a tax_tags expression, if the tag is not shared by other expressions, the tag should be renamed accordingly. Before this commit, when the new formula started with a '-' sign, the tag ended up with that same '-' at the beginning of its name. This was wrong: from 19.0 on, a tax tags formula starting with '-' means we want to negate the balance of the move lines having that tag. Because of that, when computing the report, the expression would look for a tag without the '-' in its name, not find it and essentially always compute a result of 0. Forward-Port-Of: odoo/odoo#262371 Forward-Port-Of: odoo/odoo#262059
This update resolves an issue that caused errors when closing all conversations in the chat application. The fix prevents a re-render from triggering a traceback by adding optional chaining to access channel data. This ensures a smoother and more reliable chat closing experience for users.
Original PR description
When closing all conversations from ChatHub, setting `confirmCloseResolver` to `null` in `_canClose()` starts a re-render of ChatHub and ChatWindow, but the render does not complete and `requestClose()` continues. During this flow, `close()` deletes the chat window, and when the re-render of ChatWindow actions continues, the call and camera-call action name callbacks try to access `channel.hasRtcSessionActive`, causing a traceback. This commit fixes the issue by adding optional chaining on channel in the name functions of the call and camera-call thread actions. Task-[6120744](https://www.odoo.com/odoo/project/1519/tasks/6120744) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260308
This update fixes an issue where some UBL invoices were being processed incorrectly. The system now intelligently checks for a specific 'CustomizationID' to determine if an invoice is a BIS3 format, improving the accuracy of invoice processing. A fallback mechanism remains in place for unknown formats.
Original PR description
Some UBL invoices we receive both have a node CustomizationID signifying that it's a bis3 and a UBLVersionID 2.1 (which should be illegal). We don't block malformed bis3 invoices. But we should try to guess that it's a bis3 if it has the perfect customization. We can keep the fallback in case it's an unknown bis3 format. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263527 Forward-Port-Of: odoo/odoo#263285
This update resolves a bug where users with limited permissions experienced errors when accessing task details within subscription timesheets. The fix involves simplifying data retrieval to prevent privilege-related access issues, ensuring smoother operation for all users.
Original PR description
The change in e75bc6a1fac056d72fe9e73513635f9e0ba7db22 may cause some access errors when the user don't have the proper privileges. STR: 1. Having a user (demo) with minimal permissions: sales own documents, timesheets and project user 2. Having a sales order for customer that demo user can read with services in it. 3. Having that customer a task with a sale that the demo user can't read. 4. When the user tries to change the line to one that he can actually read, an error raises. The display_name function tries to fetch data from the lines related order. Let's just sudo that fetch to avoid these kind of issues. A demo video: https://www.loom.com/share/ddd02d72bcea4652b79549aba47d5334 opw-5969767 cc @moduon MT-14483 Forward-Port-Of: odoo/enterprise#113996
This update resolves an issue where a single error during website editing would lock the editor, preventing users from making changes. The fix ensures that errors during interaction cleanup are handled gracefully, allowing the editor to recover and continue functioning correctly. This improves the overall reliability and usability of the website editing feature.
Original PR description
When entering website edit mode, `websiteEditService.handleEditPage()` calls `InteractionService.stopInteractions()`. Currently, a failure while destroying a single interaction aborts the entire stop sequence. This prevents the editor from loading, leaving users unable to modify or delete the element that caused the failure. Any errors encountered during destruction are caught and stored so the remaining cleanup can complete, and then they are rethrown. This ensures the transition to edit mode is not blocked by a single element's failure. task-5180598 Forward-Port-Of: odoo/odoo#263098
This update fixes a minor usability issue in the Helpdesk module. Previously, users couldn't easily delete a stage in a Kanban view due to a missing keyboard shortcut. This commit adds the necessary shortcut, streamlining the stage deletion process and improving user efficiency.
Original PR description
Before this commit, when the user tries to delete a kanban column in ticket kanban view when the group by is stage_id. A pop-up appears when there is at least one ticket in that stage to notify the user it would be better to archive the stage or remove all tickets from that stage before deleting it. The Confirm and Discard buttons of that wizard does not have keyboard shortcut as the other discard button in the other views/wizards. This commit makes sure the keyboard shortcut is correctly assigned to those buttons. task-4885677 Forward-Port-Of: odoo/enterprise#116297 Forward-Port-Of: odoo/enterprise#89141
This update fixes an issue where taxes were incorrectly assigned to the wrong company due to a change in how the system cached tax information. By partitioning the cache based on company ID, we ensure that taxes are now correctly associated with the appropriate business, improving data accuracy and financial reporting.
Original PR description
Details and steps to reproduce are in Issue #262709 Cause: In #248680 the cache was changed to be global (per cr), meaning it is shared across companies. We need to partition the cache by company_id to prevent the assignment of taxes from the wrong company. OPW-6189579 Forward-Port-Of: odoo/odoo#262779
This update resolves issues with the WPS report generated for Saudi payroll, specifically ensuring accurate data submission. It now requires necessary identification documents and automatically maps bank information based on the employee's location, improving compliance and report reliability.
Original PR description
this commit includes the following fixes for the WPS report in SA: - Make the Saudi National / IQAMA ID required for generating the WPS file. - Remove the condition on the field [57 - BANK] and have it always filled if the SARIE code is set. - If the employee bank account is from a different country (other than KSA or null), map the field [57 - BANK] to the swift code. task-6144299 Forward-Port-Of: odoo/enterprise#116725 Forward-Port-Of: odoo/enterprise#116419
This update significantly speeds up the calculation of employee rate warnings by optimizing how the system checks for missing sales order links. The previous method was inefficient and slow, especially with large projects. This change uses a more targeted SQL query, resulting in a 33x performance improvement.
Original PR description
Previously, computing warning_employee_rate fetched all analytic lines associated with projects.task_ids to check if any employee lacked a sale_order_line in project.sale.line.employee.map. This…
Previously, computing warning_employee_rate fetched all analytic lines associated with projects.task_ids to check if any employee lacked a sale_order_line in project.sale.line.employee.map. This approach had two major flaws: 1- Iterating over all accessible tasks is highly inefficient for large projects, especially since many tasks do not even have associated analytic lines. 2- Fetching analytic lines blindly by task_id could pull in lines linked to a completely different project_id adding performance issues. **Solution**: Since the compute method for the `project_id` field for the `account.analytic.line` model is making sure that the field `project_id` equal the project for the task, then we can remove the domain matching for the `task_id`. We now can replace the `_read_group` with a simple SQL query, filtering out the unmapped projects directly. The benchmark done below was on a database that had around 10M analytic lines, 2K `project_sale_line_employee_map` records and 1M tasks with the top 80 projects in terms of the number of `analytic.lines` + projects that had the most records in the `project_sale_line_employee_map`. | Before | After | | :--- | :--- | | 33.0s | 170.0ms | Forward-Port-Of: odoo/odoo#260935
This update resolves an issue where standard users couldn't create projects from templates due to restricted access permissions. Adding 'sudo' ensures the necessary changes to project settings can be made correctly, preventing errors and maintaining the functionality for all users. This improves the overall user experience and avoids disruptions.
Original PR description
Steps to reproduce: - Ensure: - Marc Demo is a “Project” admin - All projects have “allow_task_dependencies” set to false. This will remove the “Use Task Dependencies” group from Role / User, so the…
Steps to reproduce: - Ensure: - Marc Demo is a “Project” admin - All projects have “allow_task_dependencies” set to false. This will remove the “Use Task Dependencies” group from Role / User, so the order of these steps is important - Add Role / User implies “Use Task Dependencies” - Sign in as Marc Demo and attempt to create a new project from the “Product Launch Campaign” template Description: `_inverse_allow_task_dependencies()` uses `_check_project_group_with_field()` to determine if task dependency features should be enabled/disabled by modifying the `hidden` field on `mail.message.subtype` records (e.g. `mt_task_waiting`). This occurs whenever a project is created from templates. However write access to these records are restricted to admins, so we need elevated permissions when attempting to do so. Without `sudo`, access errors are thrown if non-admin users attempt to create projects under specific scenarios (i.e. when `_check_project_group_with_field()` adds or removes a group from the user base group). The search within `_check_project_group_with_field()` also needs elevated permissions to prevent false negatives. Without `sudo`, this search is restricted by the user's record rules. If the user cannot see the specific projects where dependencies are active, the system may incorrectly assume that no projects use these dependencies, and will forcefully unlink the dependency group from `base.group_user`, breaking the feature globally for all users. Applying `.sudo()` to the subtype modification and the project search ensures standard users can create projects from templates without crashing and prevents the accidental global removal of the dependency group. opw-6099425 Forward-Port-Of: odoo/odoo#263203 Forward-Port-Of: odoo/odoo#258996
This update fixes an issue where portal users couldn't view timesheet information associated with tasks. The change adjusts how timesheet visibility is managed within the system, aligning with a recent portal refactor. Now, portal users correctly see the timesheets linked to their tasks.
Original PR description
Steps to reproduce: - Install `website_timesheet` - Enable timesheets from website - Share a task with a portal user - Log in as the portal user - Open the tasks on the portal Issue: The Timesheets is not visible. Root cause: Earlier, portal card visibility and existence were controlled directly in the QWeb template. After the portal refactoring, their visibility and existence are now managed by `portal.entry` records. Fix: Determine timesheet visibility using the corresponding `portal.entry` record. task-5455588 Forward-Port-Of: odoo/odoo#241832
14 changes
Resolved issues and error corrections
This update resolves an issue where uninstalling the l10n_ar_edi module caused database instability and prevented subsequent installations. The fix involves a manual database reset step to correct an inconsistent state, ensuring the module can be reliably removed and reinstalled. This prevents disruptions to business operations.
Original PR description
since : https://github.com/odoo/enterprise/commit/de8c92290ca17f69b5cefa686fc743df7c645f32 Step to reproduce the crash: 1. Create a database with l10n_ar_edi installed 2. Uninstall currency_rate_live Result: Registry is crashed, database inaccessible Attempts to reinstall the module also crash due to the inconsistent state of the l10n_ar_edi application (specifically due to the currency_provider field) Required manual step to bring back the database to a valid state; 1. in SQL: mark the l10n_ar_edi module as uninstalled 2. ./odoo-bin -i currency_rate_live,l10n_ar_edi --stop-after-init opw-6124819
This update fixes a bug where abandoned cart emails were sometimes sent twice. A recent change in how the system determines the customer's email address caused a conflict with an older fix. This change ensures the email is only sent once, regardless of how the customer's email is identified.
Original PR description
During a previous fix (https://github.com/odoo/odoo/pull/206158), fallback values were added for an explicit `email_to` if the default email template for the abandonned cart was missing them. But…
During a previous fix (https://github.com/odoo/odoo/pull/206158), fallback values were added for an explicit `email_to` if the default email template for the abandonned cart was missing them. But since (https://github.com/odoo/odoo/pull/172714), the template uses `use_default_to` == True, which will compute the default partner and add them to `partner_ids` of the `mail.mail` record. So the old bug of "abandoned cart email is sent twice" reappered: the if condition fails to account for `use_default_to` being set, so the partner email is set explicitly on `email_to` AND referenced in `partner_ids`, which de-facto sends the email twice to the customer on the sales order. ## FIX: We account for `use_default_to` in the if condition before adding the fallback. How to reproduce: 1) Setup a database with demo data and website_sale 2) Visit the shop as a visitor, add stuff to your cart 3) Sign up for portal access and add new stuff to cart (will attribute SO to new portal account) 4) Wait for the abandoned cart email to trigger (can be forced by playing with `cart_recovery_email_sent`: false,`is_abandoned_cart`: true and triggering the CRON) -> mail is sent twice to the customer Remarks: - changed the unit test to actually capture the generated `mail.mail` and apply some asserts on it OPW-6134731 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261039
This update fixes an issue where some UBL invoices were being incorrectly processed. The change ensures that invoices with a valid CustomizationID are prioritized, improving the accuracy of UBL invoice handling. A fallback mechanism remains in place for unexpected invoice formats.
Original PR description
Some UBL invoices we receive both have a node CustomizationID signifying that it's a bis3 and a UBLVersionID 2.1 (which should be illegal). We don't block malformed bis3 invoices. But we should try to guess that it's a bis3 if it has the perfect customization. We can keep the fallback in case it's an unknown bis3 format. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263527 Forward-Port-Of: odoo/odoo#263285
This update resolves an issue where users with limited permissions were encountering errors when accessing task details within subscription timesheets. The fix involves bypassing data fetching to prevent privilege-related access problems, ensuring smoother operation for users with restricted access.
Original PR description
The change in e75bc6a1fac056d72fe9e73513635f9e0ba7db22 may cause some access errors when the user don't have the proper privileges. STR: 1. Having a user (demo) with minimal permissions: sales own documents, timesheets and project user 2. Having a sales order for customer that demo user can read with services in it. 3. Having that customer a task with a sale that the demo user can't read. 4. When the user tries to change the line to one that he can actually read, an error raises. The display_name function tries to fetch data from the lines related order. Let's just sudo that fetch to avoid these kind of issues. A demo video: https://www.loom.com/share/ddd02d72bcea4652b79549aba47d5334 opw-5969767 cc @moduon MT-14483 Forward-Port-Of: odoo/enterprise#113996
This update resolves an issue where the Odoo website crashed when rental products had overlapping closed days and public time off periods. The fix simplifies the availability check to focus solely on time ranges, ensuring the website correctly displays rental availability without errors. This improves the user experience for rental product bookings.
Original PR description
Steps to reproduce: - Install website_sale_renting_planning. - Create a rental service product linked to a planning role. - Enable Sync Shifts and Rental Orders on that role. - Add a two-day public time off on the working calendar. - Open the product on the website with overlapping dates. Current behavior: The shop crashes when the selected dates overlap a closed day and a public time off. Expected behavior: The website should show rental availability without crashing when both cases overlap. Issue: The availability flow mixed two kinds of calendar data while it only needed time ranges, so the overlap broke the website flow. Fix: Keep the unavailability check focused on time ranges for closed days and public time off so both cases can be combined safely. Ref: odoo/enterprise#98165 odoo/enterprise#102070 odoo/enterprise#102076 task-6164218 Forward-Port-Of: odoo/enterprise#115480
This update prevents edit mode from freezing when individual elements fail to load or interact. Previously, a single error would halt the entire editing process. Now, errors are handled gracefully, allowing the editor to continue functioning and users to modify content without interruption.
Original PR description
When entering website edit mode, `websiteEditService.handleEditPage()` calls `InteractionService.stopInteractions()`. Currently, a failure while destroying a single interaction aborts the entire stop sequence. This prevents the editor from loading, leaving users unable to modify or delete the element that caused the failure. Any errors encountered during destruction are caught and stored so the remaining cleanup can complete, and then they are rethrown. This ensures the transition to edit mode is not blocked by a single element's failure. task-5180598 Forward-Port-Of: odoo/odoo#263098
This update fixes a minor usability issue in the Helpdesk module. Previously, users couldn't easily delete stages in the ticket Kanban view using keyboard shortcuts. This commit adds keyboard shortcuts to the confirmation and discard buttons, streamlining the stage deletion process and improving efficiency.
Original PR description
Before this commit, when the user tries to delete a kanban column in ticket kanban view when the group by is stage_id. A pop-up appears when there is at least one ticket in that stage to notify the user it would be better to archive the stage or remove all tickets from that stage before deleting it. The Confirm and Discard buttons of that wizard does not have keyboard shortcut as the other discard button in the other views/wizards. This commit makes sure the keyboard shortcut is correctly assigned to those buttons. task-4885677 Forward-Port-Of: odoo/enterprise#89141
This update resolves an issue where standard users couldn't create projects from templates due to permission restrictions. Adding `sudo` ensures the necessary changes to project settings are applied correctly, preventing errors and maintaining the project dependency feature for all users. This improves the overall user experience and stability.
Original PR description
Steps to reproduce: - Ensure: - Marc Demo is a “Project” admin - All projects have “allow_task_dependencies” set to false. This will remove the “Use Task Dependencies” group from Role / User, so the…
Steps to reproduce: - Ensure: - Marc Demo is a “Project” admin - All projects have “allow_task_dependencies” set to false. This will remove the “Use Task Dependencies” group from Role / User, so the order of these steps is important - Add Role / User implies “Use Task Dependencies” - Sign in as Marc Demo and attempt to create a new project from the “Product Launch Campaign” template Description: `_inverse_allow_task_dependencies()` uses `_check_project_group_with_field()` to determine if task dependency features should be enabled/disabled by modifying the `hidden` field on `mail.message.subtype` records (e.g. `mt_task_waiting`). This occurs whenever a project is created from templates. However write access to these records are restricted to admins, so we need elevated permissions when attempting to do so. Without `sudo`, access errors are thrown if non-admin users attempt to create projects under specific scenarios (i.e. when `_check_project_group_with_field()` adds or removes a group from the user base group). The search within `_check_project_group_with_field()` also needs elevated permissions to prevent false negatives. Without `sudo`, this search is restricted by the user's record rules. If the user cannot see the specific projects where dependencies are active, the system may incorrectly assume that no projects use these dependencies, and will forcefully unlink the dependency group from `base.group_user`, breaking the feature globally for all users. Applying `.sudo()` to the subtype modification and the project search ensures standard users can create projects from templates without crashing and prevents the accidental global removal of the dependency group. opw-6099425 Forward-Port-Of: odoo/odoo#258996
This update resolves issues with the WPS report generated for Saudi payroll, specifically ensuring accurate data submission to relevant authorities. Key changes include requiring the Saudi National ID and automatically mapping bank details based on the employee's location, improving report reliability and compliance.
Original PR description
this commit includes the following fixes for the WPS report in SA: - Make the Saudi National / IQAMA ID required for generating the WPS file. - Remove the condition on the field [57 - BANK] and have it always filled if the SARIE code is set. - If the employee bank account is from a different country (other than KSA or null), map the field [57 - BANK] to the swift code. task-6144299 Forward-Port-Of: odoo/enterprise#116629 Forward-Port-Of: odoo/enterprise#116419
This update fixes an issue where taxes were incorrectly assigned to the wrong company due to a change in how the system cached tax information. By partitioning the cache based on company ID, we ensure that taxes are now correctly associated with the appropriate business, improving financial accuracy and reporting.
Original PR description
Details and steps to reproduce are in Issue #262709 Cause: In #248680 the cache was changed to be global (per cr), meaning it is shared across companies. We need to partition the cache by company_id to prevent the assignment of taxes from the wrong company. OPW-6189579 Forward-Port-Of: odoo/odoo#262779
This update fixes a reporting issue where journal items related to service reverse charge tax were incorrectly placed in a specific table. Now, these entries are correctly reported in the designated table for reverse charge supplies, ensuring accurate GSTR-3B report generation. This improves tax reporting compliance.
Original PR description
Previously, journal items for import of services with reverse charge tax were shown only in table 4(A)(2) and not in table 3.1(d). However, since table 3.1(d) is meant for supplies liable to reverse charge, those entries should also be reported there. With this commit, import of service reverse charge entries are now correctly included in table 3.1(d) as well. Forward-Port-Of: odoo/enterprise#116708
This update resolves an issue where a 'rotting' button was incorrectly displayed in the My Tasks view due to a misconfiguration in the Field Service app. The fix ensures that the button only appears when a stage is set to a negative 'Days to rot' value, preventing unexpected behavior and improving the user experience.
Original PR description
# How to reproduce - Go to All Tasks > All Tasks - Select the Kanban View - Edit the settings of the stage "New" - Set the value of "Days to rot" to a negative number (e.g. -4) - Go to My Tasks >…
# How to reproduce - Go to All Tasks > All Tasks - Select the Kanban View - Edit the settings of the stage "New" - Set the value of "Days to rot" to a negative number (e.g. -4) - Go to My Tasks > Tasks - Click on the red button displaying the number of task rotting # The problem We get a traceback # Cause When we click on that red, button, we call this function : https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_kanban_header.js#L11-L13 This `toggleFilterRotten` function is patched in `progressBarState` by the `RottingKanbanController` class: https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_progress_bar_hook.js#L1-L10 https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_kanban_controller.js#L6-L11 But the `FsmMyTaskKanbanController`, which the specific controller of the My Tasks view in the Field Service app does not inherit from the `RottingKanbanController` class : https://github.com/odoo/enterprise/blob/32496b52d8333f68603bba6a0c1af3ed42f59287/industry_fsm/static/src/views/fsm_my_task_kanban/fsm_my_task_kanban_controller.js#L5 Then why was the rotting button even available ? That's because `fsmMyTaskKanbanView ` inherit from `projectTaskKanbanView`, which header inherit from `RottingKanbanController` : https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/project/static/src/views/project_task_kanban/project_task_kanban_header.js#L4-L9 opw-6186575 Forward-Port-Of: odoo/enterprise#116530
This update significantly speeds up the calculation of employee rate warnings by optimizing how the system checks for missing sales order lines. The previous method was slow and inefficient, especially with large projects. This change uses a more direct SQL query to filter results, resulting in a substantial performance boost.
Original PR description
Previously, computing warning_employee_rate fetched all analytic lines associated with projects.task_ids to check if any employee lacked a sale_order_line in project.sale.line.employee.map. This…
Previously, computing warning_employee_rate fetched all analytic lines associated with projects.task_ids to check if any employee lacked a sale_order_line in project.sale.line.employee.map. This approach had two major flaws: 1- Iterating over all accessible tasks is highly inefficient for large projects, especially since many tasks do not even have associated analytic lines. 2- Fetching analytic lines blindly by task_id could pull in lines linked to a completely different project_id adding performance issues. **Solution**: Since the compute method for the `project_id` field for the `account.analytic.line` model is making sure that the field `project_id` equal the project for the task, then we can remove the domain matching for the `task_id`. We now can replace the `_read_group` with a simple SQL query, filtering out the unmapped projects directly. The benchmark done below was on a database that had around 10M analytic lines, 2K `project_sale_line_employee_map` records and 1M tasks with the top 80 projects in terms of the number of `analytic.lines` + projects that had the most records in the `project_sale_line_employee_map`. | Before | After | | :--- | :--- | | 33.0s | 170.0ms | Forward-Port-Of: odoo/odoo#260935
This update fixes an issue where portal users couldn't view timesheet information associated with tasks. The change adjusts how timesheet visibility is managed within the system, aligning with a recent portal refactor. Now, portal users will correctly see timesheet details when accessing tasks through the portal.
Original PR description
Steps to reproduce: - Install `website_timesheet` - Enable timesheets from website - Share a task with a portal user - Log in as the portal user - Open the tasks on the portal Issue: The Timesheets is not visible. Root cause: Earlier, portal card visibility and existence were controlled directly in the QWeb template. After the portal refactoring, their visibility and existence are now managed by `portal.entry` records. Fix: Determine timesheet visibility using the corresponding `portal.entry` record. task-5455588 Forward-Port-Of: odoo/odoo#241832
12 changes
Resolved issues and error corrections
This update fixes a bug where abandoned cart emails were sometimes sent twice. A recent change in how the system determines the customer's email address caused a conflict with an older fix. This change ensures that emails are only sent once, regardless of how the customer's email address is determined.
Original PR description
During a previous fix (https://github.com/odoo/odoo/pull/206158), fallback values were added for an explicit `email_to` if the default email template for the abandonned cart was missing them. But…
During a previous fix (https://github.com/odoo/odoo/pull/206158), fallback values were added for an explicit `email_to` if the default email template for the abandonned cart was missing them. But since (https://github.com/odoo/odoo/pull/172714), the template uses `use_default_to` == True, which will compute the default partner and add them to `partner_ids` of the `mail.mail` record. So the old bug of "abandoned cart email is sent twice" reappered: the if condition fails to account for `use_default_to` being set, so the partner email is set explicitly on `email_to` AND referenced in `partner_ids`, which de-facto sends the email twice to the customer on the sales order. ## FIX: We account for `use_default_to` in the if condition before adding the fallback. How to reproduce: 1) Setup a database with demo data and website_sale 2) Visit the shop as a visitor, add stuff to your cart 3) Sign up for portal access and add new stuff to cart (will attribute SO to new portal account) 4) Wait for the abandoned cart email to trigger (can be forced by playing with `cart_recovery_email_sent`: false,`is_abandoned_cart`: true and triggering the CRON) -> mail is sent twice to the customer Remarks: - changed the unit test to actually capture the generated `mail.mail` and apply some asserts on it OPW-6134731 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261039
This update fixes an issue where some UBL invoices were being processed incorrectly. The change ensures that invoices with a valid CustomizationID are prioritized, improving the accuracy of invoice processing. A fallback mechanism remains in place for unknown UBL formats to maintain compatibility.
Original PR description
Some UBL invoices we receive both have a node CustomizationID signifying that it's a bis3 and a UBLVersionID 2.1 (which should be illegal). We don't block malformed bis3 invoices. But we should try to guess that it's a bis3 if it has the perfect customization. We can keep the fallback in case it's an unknown bis3 format. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263527 Forward-Port-Of: odoo/odoo#263285
This update resolves a critical issue where the rental website would crash when overlapping closed days and public time off periods were selected. The fix simplifies the availability check to focus solely on time ranges, ensuring a stable and reliable rental availability display for customers. This improves the user experience and prevents lost sales.
Original PR description
Steps to reproduce: - Install website_sale_renting_planning. - Create a rental service product linked to a planning role. - Enable Sync Shifts and Rental Orders on that role. - Add a two-day public time off on the working calendar. - Open the product on the website with overlapping dates. Current behavior: The shop crashes when the selected dates overlap a closed day and a public time off. Expected behavior: The website should show rental availability without crashing when both cases overlap. Issue: The availability flow mixed two kinds of calendar data while it only needed time ranges, so the overlap broke the website flow. Fix: Keep the unavailability check focused on time ranges for closed days and public time off so both cases can be combined safely. Ref: odoo/enterprise#98165 odoo/enterprise#102070 odoo/enterprise#102076 task-6164218 Forward-Port-Of: odoo/enterprise#115480
This update prevents website editors from getting stuck when interactions fail during the edit mode transition. Previously, a single error would halt the entire process, blocking content changes. Now, errors are handled gracefully, allowing the editor to continue and ensuring a smoother editing experience.
Original PR description
When entering website edit mode, `websiteEditService.handleEditPage()` calls `InteractionService.stopInteractions()`. Currently, a failure while destroying a single interaction aborts the entire stop sequence. This prevents the editor from loading, leaving users unable to modify or delete the element that caused the failure. Any errors encountered during destruction are caught and stored so the remaining cleanup can complete, and then they are rethrown. This ensures the transition to edit mode is not blocked by a single element's failure. task-5180598 Forward-Port-Of: odoo/odoo#263098
This update resolves an issue where portal users couldn't see timesheets associated with tasks. The fix adjusts how timesheet visibility is determined, reflecting changes made during a recent portal system update. Now, portal users will correctly see timesheet information for shared tasks.
Original PR description
Steps to reproduce: - Install `website_timesheet` - Enable timesheets from website - Share a task with a portal user - Log in as the portal user - Open the tasks on the portal Issue: The Timesheets is not visible. Root cause: Earlier, portal card visibility and existence were controlled directly in the QWeb template. After the portal refactoring, their visibility and existence are now managed by `portal.entry` records. Fix: Determine timesheet visibility using the corresponding `portal.entry` record. task-5455588
This update resolves an issue where standard users couldn't create projects from templates due to permission restrictions. Adding `sudo` ensures the necessary access is granted, preventing errors and allowing all users to utilize project creation features without disruption. This improves overall system stability and usability.
Original PR description
Steps to reproduce: - Ensure: - Marc Demo is a “Project” admin - All projects have “allow_task_dependencies” set to false. This will remove the “Use Task Dependencies” group from Role / User, so the…
Steps to reproduce: - Ensure: - Marc Demo is a “Project” admin - All projects have “allow_task_dependencies” set to false. This will remove the “Use Task Dependencies” group from Role / User, so the order of these steps is important - Add Role / User implies “Use Task Dependencies” - Sign in as Marc Demo and attempt to create a new project from the “Product Launch Campaign” template Description: `_inverse_allow_task_dependencies()` uses `_check_project_group_with_field()` to determine if task dependency features should be enabled/disabled by modifying the `hidden` field on `mail.message.subtype` records (e.g. `mt_task_waiting`). This occurs whenever a project is created from templates. However write access to these records are restricted to admins, so we need elevated permissions when attempting to do so. Without `sudo`, access errors are thrown if non-admin users attempt to create projects under specific scenarios (i.e. when `_check_project_group_with_field()` adds or removes a group from the user base group). The search within `_check_project_group_with_field()` also needs elevated permissions to prevent false negatives. Without `sudo`, this search is restricted by the user's record rules. If the user cannot see the specific projects where dependencies are active, the system may incorrectly assume that no projects use these dependencies, and will forcefully unlink the dependency group from `base.group_user`, breaking the feature globally for all users. Applying `.sudo()` to the subtype modification and the project search ensures standard users can create projects from templates without crashing and prevents the accidental global removal of the dependency group. opw-6099425 Forward-Port-Of: odoo/odoo#258996
This update optimizes a key calculation within the sale_timesheet module, significantly speeding up the process of determining employee timesheet warnings. The previous method was inefficient due to unnecessary data retrieval, but this change uses a more targeted SQL query to filter results, resulting in a substantial performance boost.
Original PR description
Previously, computing warning_employee_rate fetched all analytic lines associated with projects.task_ids to check if any employee lacked a sale_order_line in project.sale.line.employee.map. This…
Previously, computing warning_employee_rate fetched all analytic lines associated with projects.task_ids to check if any employee lacked a sale_order_line in project.sale.line.employee.map. This approach had two major flaws: 1- Iterating over all accessible tasks is highly inefficient for large projects, especially since many tasks do not even have associated analytic lines. 2- Fetching analytic lines blindly by task_id could pull in lines linked to a completely different project_id adding performance issues. **Solution**: Since the compute method for the `project_id` field for the `account.analytic.line` model is making sure that the field `project_id` equal the project for the task, then we can remove the domain matching for the `task_id`. We now can replace the `_read_group` with a simple SQL query, filtering out the unmapped projects directly. The benchmark done below was on a database that had around 10M analytic lines, 2K `project_sale_line_employee_map` records and 1M tasks with the top 80 projects in terms of the number of `analytic.lines` + projects that had the most records in the `project_sale_line_employee_map`. | Before | After | | :--- | :--- | | 33.0s | 170.0ms | Forward-Port-Of: odoo/odoo#260935
This update fixes an issue where taxes were incorrectly assigned to the wrong company due to a change in how the system cached tax information. By partitioning the cache based on company ID, we ensure that taxes are now correctly associated with the appropriate business, improving data accuracy and financial reporting.
Original PR description
Details and steps to reproduce are in Issue #262709 Cause: In #248680 the cache was changed to be global (per cr), meaning it is shared across companies. We need to partition the cache by company_id to prevent the assignment of taxes from the wrong company. OPW-6189579 Forward-Port-Of: odoo/odoo#262779
This update fixes a reporting issue where service reverse charge tax wasn't correctly included in the GSTR-3B reports. Now, journal items related to reverse charge supplies are accurately reported in the designated table, ensuring compliance with tax regulations. This improves the accuracy of financial reporting.
Original PR description
Previously, journal items for import of services with reverse charge tax were shown only in table 4(A)(2) and not in table 3.1(d). However, since table 3.1(d) is meant for supplies liable to reverse charge, those entries should also be reported there. With this commit, import of service reverse charge entries are now correctly included in table 3.1(d) as well. Forward-Port-Of: odoo/enterprise#116708
This update fixes an issue where tax reports (specifically for GSTR2B in India) were displaying incorrect signs for bills and credit notes. The change ensures bills show positive amounts and credit notes show negative amounts, aligning with standard accounting practices and improving report accuracy.
Original PR description
In reverse charge taxes, tax tags are added on negative repartition lines, causing the amounts to appear with the opposite sign in reports. Due to this, credit notes were shown as positive amounts and bills as negative amounts. This commit fixes the sign handling so that: - bills are shown with positive amounts - credit notes are shown with negative amounts Forward-Port-Of: odoo/enterprise#116740
The Project Gantt view was incorrectly graying out weekends and off-hours for employees with flexible schedules who had no approved leaves. This update corrects a bug where the system wasn't properly accounting for flexible work arrangements, ensuring accurate availability representation in the Gantt view.
Original PR description
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out…
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out Current Behavior --- Flex employees with no approved leaves in the viewed date range have incorrect grayed-out days in the Project Gantt view. Expected Behavior --- Flex employees should have no grayed-out days except approved leaves and public holidays. Issue --- When a flex employee has no leaves in the viewed period, `_get_unavailable_intervals()` returns an empty dict for that resource. `_gantt_unavailability()` then falls back to `company_leaves`, producing incorrect gray intervals. The same case is already handled in `planning` (ref PR), but `project_enterprise` was not covered. Fix --- Add a guard in `_gantt_unavailability()` to return no unavailabilities for flexible resources absent from `leaves_mapping`. Related : https://github.com/odoo/odoo/commit/5f1cd39944134ffa2c30c331f8a5daca56446d78 task - 5063071 Forward-Port-Of: odoo/enterprise#113247
This update resolves an issue where a 'rotting' button was incorrectly displayed in the My Tasks Kanban view, causing a traceback. The fix corrects a misconfiguration in how the system tracks task aging, ensuring accurate reporting of overdue tasks within the Field Service app. This prevents potential confusion and ensures data integrity.
Original PR description
# How to reproduce - Go to All Tasks > All Tasks - Select the Kanban View - Edit the settings of the stage "New" - Set the value of "Days to rot" to a negative number (e.g. -4) - Go to My Tasks >…
# How to reproduce - Go to All Tasks > All Tasks - Select the Kanban View - Edit the settings of the stage "New" - Set the value of "Days to rot" to a negative number (e.g. -4) - Go to My Tasks > Tasks - Click on the red button displaying the number of task rotting # The problem We get a traceback # Cause When we click on that red, button, we call this function : https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_kanban_header.js#L11-L13 This `toggleFilterRotten` function is patched in `progressBarState` by the `RottingKanbanController` class: https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_progress_bar_hook.js#L1-L10 https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_kanban_controller.js#L6-L11 But the `FsmMyTaskKanbanController`, which the specific controller of the My Tasks view in the Field Service app does not inherit from the `RottingKanbanController` class : https://github.com/odoo/enterprise/blob/32496b52d8333f68603bba6a0c1af3ed42f59287/industry_fsm/static/src/views/fsm_my_task_kanban/fsm_my_task_kanban_controller.js#L5 Then why was the rotting button even available ? That's because `fsmMyTaskKanbanView ` inherit from `projectTaskKanbanView`, which header inherit from `RottingKanbanController` : https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/project/static/src/views/project_task_kanban/project_task_kanban_header.js#L4-L9 opw-6186575 Forward-Port-Of: odoo/enterprise#116530
3 changes
Resolved issues and error corrections
This update fixes an issue where tax returns were incorrectly including taxes from multiple provinces (like British Columbia) instead of just the relevant province (like Manitoba). This ensures tax reports accurately reflect provincial tax obligations, improving the accuracy of financial reporting. The change was triggered by a code adjustment to filter tax entries correctly.
Original PR description
Issue: Validating a tax return creates an entry with all the tax aml from the company instead of filtering them according to the tax return type. Steps to reproduce: - In a company in Canada - Invoice a Customer from British Columbia in the previous month (A) - Confirm - Go to tax report -> Return - Review and Validate tax return for "Manitoba PST Return (CA)" for month A - Click on the 3 dots -> View Entry Current Behavior: - Entry has lines for PST in British-Columbia and GST taxes Expected behavior: - Entry has lines for PST in Manitoba only Cause: https://github.com/odoo/enterprise/pull/98158 introduces method `_get_vat_closing_entry_additional_domain` in the wrong class. opw-6065838 Forward-Port-Of: odoo/enterprise#116366
This update resolves an issue where the Sale Timesheet module would fail to load if certain menus were deleted from the database. The fix ensures the module checks for the existence of these menus before proceeding, preventing errors and maintaining stability. This improves the reliability of the Sale Timesheet functionality.
Original PR description
to reproduce issue: 1) make a database in 18.3 . 2) delete the menu/menus. 3) it will fail on _load_menus_blacklist. Forward-Port-Of: odoo/enterprise#116498
This update corrects a visual issue in the Project Gantt view where flexible employees were incorrectly marked as unavailable during weekends and off-hours. The fix ensures that flexible employees are only grayed out for approved leaves and public holidays, improving the accuracy of project timelines. This enhancement impacts how project managers visualize resource availability.
Original PR description
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out…
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out Current Behavior --- Flex employees with no approved leaves in the viewed date range have incorrect grayed-out days in the Project Gantt view. Expected Behavior --- Flex employees should have no grayed-out days except approved leaves and public holidays. Issue --- When a flex employee has no leaves in the viewed period, `_get_unavailable_intervals()` returns an empty dict for that resource. `_gantt_unavailability()` then falls back to `company_leaves`, producing incorrect gray intervals. The same case is already handled in `planning` (ref PR), but `project_enterprise` was not covered. Fix --- Add a guard in `_gantt_unavailability()` to return no unavailabilities for flexible resources absent from `leaves_mapping`. Related : https://github.com/odoo/odoo/commit/5f1cd39944134ffa2c30c331f8a5daca56446d78 task - 5063071 Forward-Port-Of: odoo/enterprise#113247
5 changes
Resolved issues and error corrections
The budget report now accurately displays financial data without duplicate analytic lines. This issue stemmed from a recent performance optimization of the budget report query, which inadvertently introduced duplicate entries. The fix ensures unique and reliable reporting by restructuring the underlying queries.
Original PR description
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item…
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item (linked to Analytic Account A). - Open the budget report and remove the default "open budget" filter. Duplicate amounts appear in the pivot view and duplicate lines appear in the list view. #### Cause: In #104299, the query in `_get_aal_query` was refactored for performance to avoid a single query with an OR condition in the LEFT JOIN. It was replaced by two separate queries combined with `UNION ALL`. This caused some lines to be captured by both queries, resulting in duplicates in the final report. #### Fix: Use three separate queries, each with specific filter conditions to guarantee unique results: Q1 - Analytic lines with no matching budget line. Q2 - Analytic lines matched to a budget line with no company (null-company). Q3 - Analytic lines matched to a company-specific budget line. OPW-6051696 Forward-Port-Of: odoo/enterprise#116612
This update fixes an error in how VAT reimbursement moves are calculated when carrying over unclaimed tax amounts. The previous calculation incorrectly used data from the previous month's tax report, leading to inaccurate reimbursement amounts. This ensures correct VAT reimbursement processing for June.
Original PR description
When generating a VAT return with an unclaimed tax amount carried to the next month, the carryover reimbursement move amounts are computed with an incorrect ratio. Steps to reproduce: - Create and…
When generating a VAT return with an unclaimed tax amount carried to the next month, the carryover reimbursement move amounts are computed with an incorrect ratio. Steps to reproduce: - Create and post a bill in May containing a VAT amount. - Create and post a bill in June containing a VAT amount. - Create a VAT return for May to carry over the VAT amount to the next month. - Create a VAT return for June, requesting the full VAT amount to be reimbursed. - Validate and send the June VAT return. - Check the generated reimbursement move Issue: Line values does not correspond to anything real/tangible. It occurs because when computing the ratio for the move we check the last tax report entry, where we find the amount of tax from the past months and a line balancing the last month that should not be taken into account. The "Balance tax current account (receivable)" line from the tax closing entry is mistakenly picked up as a tax carried forward line, throwing off the amounts. opw-5961836 Forward-Port-Of: odoo/enterprise#115451
This update fixes an issue where abandoned cart emails were being sent twice. A recent change in how the system handles email templates caused a conflict with a previous fix. The update now correctly accounts for this change, ensuring abandoned cart emails are sent only once.
Original PR description
During a previous fix (https://github.com/odoo/odoo/pull/206158), fallback values were added for an explicit `email_to` if the default email template for the abandonned cart was missing them. But…
During a previous fix (https://github.com/odoo/odoo/pull/206158), fallback values were added for an explicit `email_to` if the default email template for the abandonned cart was missing them. But since (https://github.com/odoo/odoo/pull/172714), the template uses `use_default_to` == True, which will compute the default partner and add them to `partner_ids` of the `mail.mail` record. So the old bug of "abandoned cart email is sent twice" reappered: the if condition fails to account for `use_default_to` being set, so the partner email is set explicitly on `email_to` AND referenced in `partner_ids`, which de-facto sends the email twice to the customer on the sales order. ## FIX: We account for `use_default_to` in the if condition before adding the fallback. How to reproduce: 1) Setup a database with demo data and website_sale 2) Visit the shop as a visitor, add stuff to your cart 3) Sign up for portal access and add new stuff to cart (will attribute SO to new portal account) 4) Wait for the abandoned cart email to trigger (can be forced by playing with `cart_recovery_email_sent`: false,`is_abandoned_cart`: true and triggering the CRON) -> mail is sent twice to the customer Remarks: - changed the unit test to actually capture the generated `mail.mail` and apply some asserts on it OPW-6134731 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261039
This update fixes an issue where taxes were incorrectly assigned to the wrong company due to a change in how the system cached tax information. By partitioning the cache based on company ID, we ensure that taxes are now correctly associated with the appropriate business. This prevents financial errors and maintains data accuracy.
Original PR description
Details and steps to reproduce are in Issue #262709 Cause: In #248680 the cache was changed to be global (per cr), meaning it is shared across companies. We need to partition the cache by company_id to prevent the assignment of taxes from the wrong company. OPW-6189579 Forward-Port-Of: odoo/odoo#262779
This update corrects a visual issue in the Project Gantt view where flexible employees were incorrectly marked as unavailable during weekends and off-hours. The fix ensures that flexible employees only appear unavailable when they have approved leaves or public holidays, improving the accuracy of project timelines.
Original PR description
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out…
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out Current Behavior --- Flex employees with no approved leaves in the viewed date range have incorrect grayed-out days in the Project Gantt view. Expected Behavior --- Flex employees should have no grayed-out days except approved leaves and public holidays. Issue --- When a flex employee has no leaves in the viewed period, `_get_unavailable_intervals()` returns an empty dict for that resource. `_gantt_unavailability()` then falls back to `company_leaves`, producing incorrect gray intervals. The same case is already handled in `planning` (ref PR), but `project_enterprise` was not covered. Fix --- Add a guard in `_gantt_unavailability()` to return no unavailabilities for flexible resources absent from `leaves_mapping`. Related : https://github.com/odoo/odoo/commit/5f1cd39944134ffa2c30c331f8a5daca56446d78 task - 5063071 Forward-Port-Of: odoo/enterprise#113247
1 change
Resolved issues and error corrections
This update corrects a visual issue in the Project Gantt view where flexible employees were incorrectly marked as unavailable during weekends and off-hours. The fix ensures that flexible employees are only grayed out for approved leaves and public holidays, improving the accuracy of project timelines. This enhancement impacts how project managers view and manage tasks assigned to flexible team members.
Original PR description
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out…
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out Current Behavior --- Flex employees with no approved leaves in the viewed date range have incorrect grayed-out days in the Project Gantt view. Expected Behavior --- Flex employees should have no grayed-out days except approved leaves and public holidays. Issue --- When a flex employee has no leaves in the viewed period, `_get_unavailable_intervals()` returns an empty dict for that resource. `_gantt_unavailability()` then falls back to `company_leaves`, producing incorrect gray intervals. The same case is already handled in `planning` (ref PR), but `project_enterprise` was not covered. Fix --- Add a guard in `_gantt_unavailability()` to return no unavailabilities for flexible resources absent from `leaves_mapping`. Related : https://github.com/odoo/odoo/commit/5f1cd39944134ffa2c30c331f8a5daca56446d78 task - 5063071 Forward-Port-Of: odoo/enterprise#113247
4 changes
Resolved issues and error corrections
This update resolves an issue where a crucial component was missing from the French tax report XML. The addition of the custom handler model ensures accurate generation of the 2031 and 2031 annexes tax reports, aligning with French tax regulations. This ensures compliance and accurate reporting.
Original PR description
The PR #108522 introduced new 2031 and 2031 annexes tax report for FR. But in the 2031 report XML, custome handler model was not added. This PR adds the corresponding custom handler model. Forward-Port-Of: odoo/enterprise#116373
This update resolves intermittent errors occurring during tests for the planning field service's geolocation functionality. These errors were causing unreliable test results. The fix ensures the geolocation tests are now consistently reliable, improving the stability of the planning field service.
Original PR description
This commits aims to resolve the undeterministic failures of the planning field service geolocation tests. Forward-Port-Of: odoo/enterprise#116176
This update resolves a bug where users with limited permissions were encountering errors when modifying subscription timesheet tasks. The fix involves simplifying data fetching to prevent privilege-related access issues, ensuring smoother operation for users with restricted access.
Original PR description
The change in e75bc6a1fac056d72fe9e73513635f9e0ba7db22 may cause some access errors when the user don't have the proper privileges. STR: 1. Having a user (demo) with minimal permissions: sales own documents, timesheets and project user 2. Having a sales order for customer that demo user can read with services in it. 3. Having that customer a task with a sale that the demo user can't read. 4. When the user tries to change the line to one that he can actually read, an error raises. The display_name function tries to fetch data from the lines related order. Let's just sudo that fetch to avoid these kind of issues. A demo video: https://www.loom.com/share/ddd02d72bcea4652b79549aba47d5334 opw-5969767 cc @moduon MT-14483 Forward-Port-Of: odoo/enterprise#113996
This update fixes a minor usability issue in the Helpdesk module. Previously, users were prompted to archive or clear stages before deleting them, but lacked keyboard shortcuts for navigation. Now, keyboard shortcuts are correctly assigned to the confirmation and discard buttons in the stage deletion wizard, streamlining the process.
Original PR description
Before this commit, when the user tries to delete a kanban column in ticket kanban view when the group by is stage_id. A pop-up appears when there is at least one ticket in that stage to notify the user it would be better to archive the stage or remove all tickets from that stage before deleting it. The Confirm and Discard buttons of that wizard does not have keyboard shortcut as the other discard button in the other views/wizards. This commit makes sure the keyboard shortcut is correctly assigned to those buttons. task-4885677 Forward-Port-Of: odoo/enterprise#116297 Forward-Port-Of: odoo/enterprise#89141
12 changes
Resolved issues and error corrections
This update resolves an issue where the Planning Gantt view wasn't accurately calculating working hours when the view wasn't grouped by resources. The fix ensures the total row correctly reflects employee working schedules, regardless of grouping settings. This improves the accuracy of project time tracking.
Original PR description
Issue: ---------------------------------------- In the Planning Gantt view when we don't group by resources, the total row is not considering the working hours. Steps to reproduce:…
Issue: ---------------------------------------- In the Planning Gantt view when we don't group by resources, the total row is not considering the working hours. Steps to reproduce: ---------------------------------------- - Open Planning - Remove the default group by resources - Have at least a planning slot for a non-flexible employee - The total row doesn't take the working schedule into account Cause: ---------------------------------------- Since [an improvement,](https://github.com/odoo/enterprise/commit/cc35e1a4729453e4f788034a94402ab048eadfcb) the working hours data in given to the `PlanningGanttRenderer` through the progress bars data. This is an issue because the progress bars are only there if we group by resources. ([src](https://github.com/odoo/enterprise/blob/423ab064847dd41d36778a812390e3bec53ba4dc/planning/models/planning_slot.py#L2669-L2678)) Solution: ---------------------------------------- In this commit we partially revert the commit adding the working intervals in the progress bars. Instead of doing it in `_gantt_progress_bar_resource_id()` we create a new method `_get_gantt_planning_data()` which is called directly in `get_gantt_data()` and returns useful information even when there are no progress bars. opw-5507063
This update fixes a reporting issue related to Goods and Services Tax (GST) filings (GSTR-3B) in Russia. Previously, service reverse charge tax entries were missing from a key report table. Now, these entries are correctly included, ensuring accurate tax reporting and compliance.
Original PR description
Previously, journal items for import of services with reverse charge tax were shown only in table 4(A)(2) and not in table 3.1(d). However, since table 3.1(d) is meant for supplies liable to reverse charge, those entries should also be reported there. With this commit, import of service reverse charge entries are now correctly included in table 3.1(d) as well.
This update resolves an issue where tax reports (specifically for GSTR2B in Russia) were displaying incorrect amounts due to reversed sign handling. Now, bills are shown with positive values, and credit notes with negative values, ensuring accurate tax reporting and financial reconciliation.
Original PR description
In reverse charge taxes, tax tags are added on negative repartition lines, causing the amounts to appear with the opposite sign in reports. Due to this, credit notes were shown as positive amounts and bills as negative amounts. This commit fixes the sign handling so that: - bills are shown with positive amounts - credit notes are shown with negative amounts
This update resolves an issue where IoT Box handler downloads were incompatible due to a change in version formatting. In Odoo 19.0, WIoT Boxes now correctly download handlers based on their database version and system type, ensuring compatibility and preventing potential driver mismatches. This ensures stable operation of IoT integrations.
Original PR description
Since odoo/odoo#263089, Virtual IoT Boxes use the YYYYMMDD version format, making them match the "stable IoT Box" regex in the `get_handlers` controller. This check is meant not to provide default handlers for clients developing their own drivers, as versions could mismatch (more details in odoo/enterprise#263089). In v19.0, WIoT Boxes are not "stable", as they still checkout the db's version and download handlers from it: we then add a check on the system type (Windows/Linux) in addition to the one on the version.
This update corrects a bug in the payroll calculation for Colorado-based employees. Previously, the CO State Income Tax could show a positive value, which incorrectly indicated a refund instead of a withholding. This fix aligns with established payroll tax principles, ensuring accurate withholding calculations.
Original PR description
## Issue When generating a payslip for an employee of a company located in Colorado, the *CO State Income Tax* could end up positive. ## Steps to reproduce 1. Install *United States - Payroll*…
## Issue
When generating a payslip for an employee of a company located in Colorado, the *CO State Income Tax* could end up positive.
## Steps to reproduce
1. Install *United States - Payroll* (`l10n_us_hr_payroll`)
2. Set the current company's State to Colorado
3. Create an employee and a contract
- Wage: $0
- (Set the contract's status to *Running*)
- (In the payroll tab) State Withholding Allowance: $1000
4. Create a Payslip for the employee
- Structure: *"United States: Regular Pay"*
5. Compute Sheet
6. **In the _Salary Computation_ tab, the _CO State Income Tax_ line has a positive value**
## Justification
This fix is similar to the one applied for the AL(abama) state income tax by https://github.com/odoo/enterprise/commit/f0eeb55f1e3cf965c6a409675813d4a699e5fca6. That modification was justified by CAS (PO of US localizations for Payroll) in opw-5137280:
> *"Payroll taxes are always funds withheld from employee's paychecks, if there is a positive value it means the tax is a refund, not a withholding. Refunds happen when individuals file their income."*
## Note to reviewer
The test [`test_069_al_state_tax_0_income`](https://github.com/odoo/enterprise/blob/219d2a797ee2099c9d77c2defc9c9c5e1d504ffe/test_l10n_us_hr_payroll_account/tests/test_salary_rules.py#L957-L989) (added by the aforementioned commit https://github.com/odoo/enterprise/commit/f0eeb55f1e3cf965c6a409675813d4a699e5fca6) is wrongly indented and thus never executed. The test passes with the dedicated fix, and fails without it, as expected. Let me know if you want me to indent it correctly (in this commit or in an additional one).
opw-5999856
Forward-Port-Of: odoo/enterprise#116305
Forward-Port-Of: odoo/enterprise#112724This update removes a restriction that previously required Lazada products to be 'storable'. When stock synchronization with Lazada is turned off (as is common), tracking stock isn't needed, so this restriction is no longer necessary. This simplifies product setup for Lazada listings.
Original PR description
Lazada items previously required products to be of type 'storable'. This restriction is unnecessary when stock synchronization is disabled, since no stock tracking is performed in that case. opw-6173986
This update resolves a bug that prevented users from posting journal entries using accounts shared between companies when an open audit period was active. The fix ensures proper access controls are enforced, allowing users in Company B to correctly record transactions linked to shared accounts during audits. This improves reporting accuracy and prevents disruptions to financial processes.
Original PR description
Posting a journal entry using an account shared between multiple companies during an open audit period raises an AccessError. Steps to reproduce: - Configure an account to be shared between Company A and Company B. - Add Company A and Company B in 'Companies' - In the mapping tab, add a code for each company - In Company A, create a tax audit for a specific fiscal period. - Switch to Company B and keep just Company B selected. - Create and post a journal entry using the shared account within the same date period. Issue: An AccessError is raised when posting the move. The system attempts to check the status of the audit records linked to the shared account, to which the user in Company B does not have read access. opw-5993450
The budget report now accurately displays data without duplicate analytic lines. This change addresses an issue caused by a recent performance optimization of the budget report query, which inadvertently created duplicate entries. The fix ensures data integrity and reliable reporting.
Original PR description
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item…
#### Issue: The budget report displays duplicate analytic lines. #### Steps to reproduce: In a new company: - Create a budget with one budget line (Analytic Account A). - Create one analytic item (linked to Analytic Account A). - Open the budget report and remove the default "open budget" filter. Duplicate amounts appear in the pivot view and duplicate lines appear in the list view. #### Cause: In #104299, the query in `_get_aal_query` was refactored for performance to avoid a single query with an OR condition in the LEFT JOIN. It was replaced by two separate queries combined with `UNION ALL`. This caused some lines to be captured by both queries, resulting in duplicates in the final report. #### Fix: Use three separate queries, each with specific filter conditions to guarantee unique results: Q1 - Analytic lines with no matching budget line. Q2 - Analytic lines matched to a budget line with no company (null-company). Q3 - Analytic lines matched to a company-specific budget line. OPW-6051696 Forward-Port-Of: odoo/enterprise#116612
This update resolves a critical issue where the rental website would crash when overlapping closed days and public time off periods were selected. The fix simplifies the availability check to focus solely on time ranges, ensuring a stable and reliable rental availability display for customers. This improves the user experience and prevents lost sales.
Original PR description
Steps to reproduce: - Install website_sale_renting_planning. - Create a rental service product linked to a planning role. - Enable Sync Shifts and Rental Orders on that role. - Add a two-day public time off on the working calendar. - Open the product on the website with overlapping dates. Current behavior: The shop crashes when the selected dates overlap a closed day and a public time off. Expected behavior: The website should show rental availability without crashing when both cases overlap. Issue: The availability flow mixed two kinds of calendar data while it only needed time ranges, so the overlap broke the website flow. Fix: Keep the unavailability check focused on time ranges for closed days and public time off so both cases can be combined safely. Ref: odoo/enterprise#98165 odoo/enterprise#102070 odoo/enterprise#102076 task-6164218 Forward-Port-Of: odoo/enterprise#115480
This update resolves an issue where removing menus in the Enterprise version of Odoo would cause a system error. The fix ensures the system properly checks for the existence of menus before attempting to load them, preventing the error and maintaining stability. This ensures a smoother user experience for Enterprise users.
Original PR description
to reproduce issue: 1) make a database in 18.3 . 2) delete the menu/menus. 3) it will fail on _load_menus_blacklist. Forward-Port-Of: odoo/enterprise#116498
This update resolves a technical issue where a 'rotting' button was incorrectly displayed in the My Tasks Kanban view. The fix corrects a misconfiguration in how the application inherited functionality, ensuring the button only appears when intended. This prevents unexpected behavior and maintains a stable user experience.
Original PR description
# How to reproduce - Go to All Tasks > All Tasks - Select the Kanban View - Edit the settings of the stage "New" - Set the value of "Days to rot" to a negative number (e.g. -4) - Go to My Tasks >…
# How to reproduce - Go to All Tasks > All Tasks - Select the Kanban View - Edit the settings of the stage "New" - Set the value of "Days to rot" to a negative number (e.g. -4) - Go to My Tasks > Tasks - Click on the red button displaying the number of task rotting # The problem We get a traceback # Cause When we click on that red, button, we call this function : https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_kanban_header.js#L11-L13 This `toggleFilterRotten` function is patched in `progressBarState` by the `RottingKanbanController` class: https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_progress_bar_hook.js#L1-L10 https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/mail/static/src/js/rotting_mixin/rotting_kanban_controller.js#L6-L11 But the `FsmMyTaskKanbanController`, which the specific controller of the My Tasks view in the Field Service app does not inherit from the `RottingKanbanController` class : https://github.com/odoo/enterprise/blob/32496b52d8333f68603bba6a0c1af3ed42f59287/industry_fsm/static/src/views/fsm_my_task_kanban/fsm_my_task_kanban_controller.js#L5 Then why was the rotting button even available ? That's because `fsmMyTaskKanbanView ` inherit from `projectTaskKanbanView`, which header inherit from `RottingKanbanController` : https://github.com/odoo/odoo/blob/af50cb24ac536e6afb14eee8221c69906191ba2b/addons/project/static/src/views/project_task_kanban/project_task_kanban_header.js#L4-L9 opw-6186575
This update corrects a visual issue in the Project Gantt view where flexible employees were incorrectly marked as unavailable during weekends and off-hours. The fix ensures that flexible employees only appear unavailable when they have approved leaves or public holidays, improving the accuracy of project timelines.
Original PR description
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out…
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out Current Behavior --- Flex employees with no approved leaves in the viewed date range have incorrect grayed-out days in the Project Gantt view. Expected Behavior --- Flex employees should have no grayed-out days except approved leaves and public holidays. Issue --- When a flex employee has no leaves in the viewed period, `_get_unavailable_intervals()` returns an empty dict for that resource. `_gantt_unavailability()` then falls back to `company_leaves`, producing incorrect gray intervals. The same case is already handled in `planning` (ref PR), but `project_enterprise` was not covered. Fix --- Add a guard in `_gantt_unavailability()` to return no unavailabilities for flexible resources absent from `leaves_mapping`. Related : https://github.com/odoo/odoo/commit/5f1cd39944134ffa2c30c331f8a5daca56446d78 task - 5063071 Forward-Port-Of: odoo/enterprise#113247
2 changes
Resolved issues and error corrections
This update clarifies error messages when sending invoices via Peppol. Previously, users received a generic 'no VAT' error, which was confusing. Now, the system accurately identifies the missing Peppol VAT information (like a company registry number), guiding users to correct the data and ensure successful transmission.
Original PR description
When a user sends a move via Peppol to a customer that has a VAT number set but not a Peppol endpoint, we show the user a generic error ("no VAT").
This makes the user confused, as he already filled the VAT field of his customer, It's the Peppol VAT that is missing (it could be: Belgian Company Registry, France SIRET, ...etc, depending on the customer's country)
This PR makes the error message more accurate by showing exactly the missing required field.
task-5499707
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where flexible employees were incorrectly shown as unavailable in the Project Gantt chart. The change ensures that flexible employees without scheduled leaves are not grayed out, aligning the Gantt chart with their actual working hours. This improves the accuracy of project timelines.
Original PR description
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out…
Steps to Reproduce --- - Assign a flexible working schedule to an employee (no leaves) - Open Project > Tasks > Gantt view grouped by Assignee - The employee's weekends and off-hours are grayed out Current Behavior --- Flex employees with no approved leaves in the viewed date range have incorrect grayed-out days in the Project Gantt view. Expected Behavior --- Flex employees should have no grayed-out days except approved leaves and public holidays. Issue --- When a flex employee has no leaves in the viewed period, `_get_unavailable_intervals()` returns an empty dict for that resource. `_gantt_unavailability()` then falls back to `company_leaves`, producing incorrect gray intervals. The same case is already handled in `planning` (ref PR), but `project_enterprise` was not covered. Fix --- Add a guard in `_gantt_unavailability()` to return no unavailabilities for flexible resources absent from `leaves_mapping`. Related : https://github.com/odoo/odoo/commit/5f1cd39944134ffa2c30c331f8a5daca56446d78 task - 5063071