Daily updates from Odoo
Tuesday, March 10, 2026
245 changes
22 changes
Resolved issues and error corrections
This update fixes a problem where the Gantt view for service projects would crash when grouping by project. The issue stemmed from an outdated date format being used for domain filtering. The fix ensures dates are correctly parsed, allowing the Gantt view to function properly.
Original PR description
### Issue: When in the Gantt view of service projects, grouping by project results in a traceback. ### Steps to reproduce: - Create another field service project - Create a task in the new project…
### Issue: When in the Gantt view of service projects, grouping by project results in a traceback. ### Steps to reproduce: - Create another field service project - Create a task in the new project and add start and end dates - Go to Field service > my tasks > gantt view > group by project - Error with traceback `time data 'today' does not match format '%Y-%m-%d %H:%M:%S'` ### Cause: This [commit](https://github.com/odoo/odoo/commit/d1ea43f6721116914762ea323d8a5987f043e87f) added the possibility to use dynamic dates in domains. Then all domains were changed in 42b1fca8e127926a06f503d79c8baeddf7d5ae82 But `_expand_domain_dates()` is trying to parse the dates as if they were written in ISO format: https://github.com/odoo/enterprise/blob/be853cc1ee544dda580960d94417cfdff2c8a7db/project_enterprise/models/project_task.py#L626 ### Solution: We use the method `parse_date()`, which was added with dynamic dates, to parse them. opw-5955317 Forward-Port-Of: odoo/enterprise#109236
This update fixes an issue where new timesheets weren't correctly selecting the appropriate Service Order Line (SOL) when creating them in a multi-company setup. It ensures the timesheet now uses the correct SOL linked to the user's billing rates, regardless of the company being used, improving accuracy in billing.
Original PR description
****Behavior:**** **Current:** In a multi company environment, when a sale contains multiple tasks in some project, and the user has billing rates indicating they should be assigned to a specific…
****Behavior:**** **Current:** In a multi company environment, when a sale contains multiple tasks in some project, and the user has billing rates indicating they should be assigned to a specific task, creating a new timesheet for the project does not set the correct SOL. This only happens if the sale is happening from a company that does not have an employee linked to the user. **Expected:** The new timesheet should be able to connect the current user to the related employee in the billing rates to find the right SOL. In the situation in which multiple companies have created an employee for the same user, and more than one of these has been linked to a SOL in the billing rates (unlikely workflow): We choose the SOL linked to the employee record created for the currently activated company, otherwise, we default to the first employee in the list. **Steps to reproduce:** - Be in a multicompany environment: company A and B - Create User with access to both but only one employee record for company A - Switch to company B - Create 2 services product, both creating a task in the same project. - Activate Billable Rate Indicators in the settings - Create a quote with both services and confirm - Go to the related project, and in the Invoicing tab, link employee from company A to SOL2 - As the user, check both companies but set company B as current active - Go to timesheet and create a new timesheet, when setting the project from the quote, you should see SOL1 by default, however we would want SOL2 as it was configured. opw-5159195 Forward-Port-Of: odoo/odoo#234200
This update refines the visual style of polls within the Discuss feature, enhancing readability and user experience. Specifically, it addresses minor spacing issues, adjusts text and icon sizes for a cleaner look, and removes the 'Select' subtitle when a poll is closed.
Original PR description
- improved spacing (around card, between items, etc.) - small size and opacity / muted tweaks on text and icons - don't show "Select" subtitle when poll has closed Before / After <img width="1618" height="578" alt="Screenshot 2026-03-04 at 18 33 44" src="https://github.com/user-attachments/assets/bef827cd-d9f6-4067-8f77-4f3e17f6f73f" /> <img width="1581" height="571" alt="Screenshot 2026-03-04 at 18 32 51" src="https://github.com/user-attachments/assets/aeb9af94-5095-4784-8b87-d06876c52ba3" /> Forward-Port-Of: odoo/odoo#252074
This update fixes a visual issue where the "Permission Needed" label in the device selector on the public discuss page appeared misaligned or overflowed on smaller screens. The change ensures the label displays correctly and adapts to different screen sizes, improving the overall user experience across desktop and mobile devices.
Original PR description
**Description of the issue this PR addresses:** Ensure the `Permission Needed` label in the device selector on the discuss public page displays correctly and remains properly aligned when device…
**Description of the issue this PR addresses:** Ensure the `Permission Needed` label in the device selector on the discuss public page displays correctly and remains properly aligned when device permissions are not granted. **Current behavior before PR:** - Since this [PR](https://github.com/odoo/odoo/pull/247838), the label could appear misaligned or overflow the button on smaller screens, causing UI inconsistencies on both desktop and mobile. **Desired behavior after PR is merged:** - The label stays properly aligned and adapts correctly to the available space, preventing UI glitches across screen sizes. task-[6007860](https://www.odoo.com/odoo/project/1519/tasks/6007860) Before [Larger and Smaller Devices]: <img width="639" height="49" alt="image" src="https://github.com/user-attachments/assets/1cd1e240-0f40-42f9-bf93-823add81878f" /> <img width="343" height="39" alt="image" src="https://github.com/user-attachments/assets/a7a0f920-39e3-4bb3-a647-461c94cab395" /> After [Larger and Smaller Devices]: <img width="638" height="47" alt="image" src="https://github.com/user-attachments/assets/16aa419b-2190-4fd1-a459-8a376d90c349" /> <img width="425" height="41" alt="image" src="https://github.com/user-attachments/assets/fb245378-c04b-4dd8-8c5b-39ad4adefadf" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the Time Off Gantt view by displaying total worked hours in the progress bar and streamlining actions. The 'Save' button has been removed, replaced with 'Approve' and 'Refuse' buttons for direct approval/rejection, and a 'Reset' button has been removed. These changes improve the user experience and efficiency of managing time off requests.
Original PR description
Changes Show total worked hours in the progress bar before the employee name. Remove the Save button from the popover and add Approve and Refuse buttons for direct action. Remove the Reset button from the Gantt view. UX improvements: Show the deferred icon on the pill. Fix popover margins and remove unnecessary message. task-5941368
This update fixes an issue where meeting dates displayed in the CRM were incorrectly showing a day after the scheduled meeting. The fix aligns the displayed date with the user's timezone setting, ensuring accurate meeting information. This improves the user experience and prevents confusion regarding meeting times.
Original PR description
# How to reproduce - Use a browser extension to manage your browser's timezone - Set your browser's timezone to a timezone with quite a big delay (like "America/Grand_Turk" if you live in Europe) -…
# How to reproduce - Use a browser extension to manage your browser's timezone - Set your browser's timezone to a timezone with quite a big delay (like "America/Grand_Turk" if you live in Europe) - Go to the form view of an opportunity - Click on the smart button for meetings (Should be "No Meeting" if it is a new Opportunity) - In the calendar view, add a new meeting for very late in the day (Example : 2026-02-10 22:00:00 => 23:00:00) - Go back to the opportunity for view # The problem The date displayed is a day after the meeting that was just set up. Taking back our example, the date displayed would be 2026-02-11 # Why The calendar view uses the browser's timezone to manage the dates. The smart button does not. It is not possible to make the smart button use the browser's timezone, atleast in a clean way. That is because the smart button's data is managed by a python template, which does not have access to the browser's data. Trying to change the data displayed by the framework would be clunky as the html would need to be edited directly. The fix that I implemented follows what the hr_appraisal module does for it's smart button with a date: use the timezone set in the user's preferences. opw-5898520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251840 Forward-Port-Of: odoo/odoo#247984
This update resolves a technical issue that previously caused errors during the replenishment process in MRP, purchase stock, and stock dropshipping modules. The fix improves stability and reliability of these key inventory management functions.
Original PR description
Fix 705e27a caused a `Singleton Error`, which was then addressed in cd66456. This commit improves the follow up fix and adds a test. Forward-Port-Of: odoo/odoo#250983
This update resolves an issue where tip calculations in Point of Sale were incorrect when the decimal separator in Odoo settings was changed. The fix ensures the NumberBuffer service dynamically retrieves the correct decimal separator, preventing stale data from causing calculation errors. This improves the accuracy of tip amounts for all users.
Original PR description
Steps to reproduce: 1. Open the Point of Sale. 2. In Odoo Settings, change the Decimal Separator (e.g., from '.' to ','). 3. Go back to the PoS and add a Tip. 4. Observe that the tip math is wrong. Cause: The 'NumberBuffer' service is a singleton initialized at PoS startup. During initial setup, it caches the decimal point from 'services.localization.decimalPoint' into 'this.defaultDecimalPoint'. Because the service is a singleton, this value remains stale if settings are changed without a server refresh. When the 'NumberPopup' is opened, it uses the cached stale separator, causing parsing issues in methods like 'addTip'. Solution: Modify the 'NumberBuffer' service to fetch the decimal separator directly from the 'localization' service during the '_setUp' process. opw-5895622 Forward-Port-Of: odoo/odoo#247769
This update resolves an issue where the 'Return' button incorrectly appeared on picking forms, even when the picking hadn't been completed. The fix ensures the button is only visible when the picking is in the 'Done' state or linked to a sales or purchase order. This prevents confusion and ensures users only initiate returns when appropriate.
Original PR description
_*= sale_stock, purchase_stock Steps to Reproduce: - Create a Helpdesk ticket. - Click Replace, and the picking form opens. - Add product lines to the picking to deliver to the customer. - Observe that the Return button is visible and shows a warning when clicked, even though the picking is not in Done state. Cause: - When `stock_account` is installed, the Return button visibility is overridden to always show (`invisible=0`), ignoring the original condition (`state != 'done'`). Solution: - Restore the Return button visibility to its original condition so it’s only shown when the picking is Done or when picking is linked to any PO or SO. task-5075584 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242473
This pull request reverts a recent change to the HR employee module. This action was taken to adhere to our stable release policy and address a breaking change. The previous change has now been rolled back to ensure stability and prevent potential disruptions for our users.
Original PR description
Breaking stable policy Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252789
A recent test failure in the Sale-MRP module has been resolved. This change added a necessary user group permission to the test environment, allowing it to correctly access and test the 'tracking' field on product forms. This ensures the tests run reliably and helps maintain the stability of the Sale-MRP functionality.
Original PR description
Runbot Error: https://runbot.odoo.com/odoo/runbot.build.error/240918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the working time assigned to tasks wasn't accurately calculated when a company's holiday was active. The fix ensures that the correct working time is applied, considering company-specific holidays, and allows users to view and enable hidden fields for accurate time tracking.
Original PR description
__ Fix after revert bf9729e997b15777a981ac258b0088107804fbe6 __ Let's say we have 2 companies: company A and company B. We create a public time off of a few days starting before today and ending 2…
__ Fix after revert bf9729e997b15777a981ac258b0088107804fbe6 __ Let's say we have 2 companies: company A and company B. We create a public time off of a few days starting before today and ending 2 days later in company A, then switch back to company B. In company B, we create a project and a task, and assign this task. The working time to assign will stay at 0. 1. Switch to company A and create a timeoff starting before today and ending later. 2. Switch back to company B. Create a project, a stage and a task. 3. Enable the debugger. 4. The field Working Time to Assign is invisible by default, so open studio, click on View, and check Show Invisible Elements. 5. Click on the tab Extra info and on the block Working time to assign. Uncheck Invisible. 6. Close studio and assign someone to the task. Make sure that you do this operation at a different time than the one recorded for the last stage change. The hours under Working Time to Assign should compute the difference between the last time the task got its stage changed and the time of assignation Nothing happens When computing the working time to assign, we also take into consideration leaves: if this happened during public holidays, we consider that it took no working time to get assigned. However, when a holiday is set in another company, the Working Time to Assign duration will be impacted, as the domain to retrieve the corresponding leaves is the following: https://github.com/odoo/odoo/blob/c7e965a61b7ce856c2daa8e2574cf4c60caf7a20/addons/resource/models/resource_calendar.py#L537-L546 The company isn't taken into account in the domain, applying the holiday for every company. __ opw-5222883 Forward-Port-Of: odoo/odoo#248725 Forward-Port-Of: odoo/odoo#246994
This update fixes an issue where instructions added to work orders weren't correctly linked when creating purchase orders (MOs) via the mobile app. The problem stemmed from a previous change that prevented the necessary data from being passed to the server. This ensures that instructions from the BOM are now properly associated with the MO, improving the mobile workflow for shop floor operations.
Original PR description
# How to reproduce - Create a BOM for a product with a Work Order - Add instructions to the WO - Using mobile, create a new MO for the product # The problem The instructions are not linked to the MO. This can easily be seen via the shop floor application # Why This issue is identical to https://github.com/odoo/odoo/pull/197889. This commit https://github.com/odoo/odoo/commit/b1ceec4c616d8ad2fee5b0fa1ce76c85cacbb344 removed the operation_id field from the workorder kanban mobile view, which is used in the MO form on mobile. operation_id is then not passed to the server in vals_list when creating the MO but it is required to link the instructions from the BOM to the MO. opw-5950983 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250090
This update resolves an issue where sending digest emails would fail when a company didn't have a website configured. The fix prevents a key error by checking if a website exists before attempting to access website-related data. This ensures digest emails can be sent reliably for all companies, regardless of their website setup.
Original PR description
When a company has no website configured, sending a digest email raises a traceback. Steps to reproduce the error: - Install ``website`` module - Create a new company and switch to it - Create a new digest email > In KPIs, Enable Visitors > Add recipient > Save - Click on Send Now button Traceback: ```py KeyError: res.company(1,) ``` https://github.com/odoo/odoo/blob/dee3fdee0326db032d95639eb8ee9386bb1762d4/addons/website/models/digest.py#L49-L59 If no website exists for the company, ``websites_per_company`` becomes an empty dictionary. Therefore, accessing ``websites_per_company[company]`` raises the above traceback. sentry-7239108433 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248981
This update fixes an issue where flexible calendar employees were incorrectly displaying grayed-out days in planning and related modules. The change ensures that only public holidays and leaves are reflected as unavailable, providing a more accurate representation of employee availability. This improves the usability of the planning app for employees with flexible work schedules.
Original PR description
### Issue: When an employee has a flexible calendar, its gantt view in planning and other modules, like project or time off, shows incorrect grayed-out days. In general, employees with a flexible…
### Issue:
When an employee has a flexible calendar, its gantt view in planning and other modules, like project or time off, shows incorrect grayed-out days. In general, employees with a flexible calendar should not have any grayed out days other than public holidays.
### Steps to reproduce:
- Create a new work schedule:
- Flexible Hours
- 24 hours per week
- 8 average hours per day
- Create an employee with this work schedule
- Open Planning app
- Only the three first days of the week are not grayed out
### Cause:
With 24 hours per week, the worked time can be done in three days. Odoo considers that the first three days of the given time frame are worked, but the others aren't. This result is returned by `_work_intervals_batch()`. In `_unavailable_intervals_batch()` we then build the unavailabilities by taking the inverse of the work intervals. The only exception was for fully flexible resources (i.e. without a calendar).
### Solution:
The case we need to consider is for flexible resources: they are available anytime, all week long except on public holidays and leaves.
To do this we fix the method `_unavailable_intervals_batch()` which is then called by each module. If the resource is flexible, then we only return the interval of the public holidays overlapping with the time frame.
Works in `appointment`, `hr_holiday_gantt`and `project_enterprise`.
In `planning`, we need to skip the case where nothing is returned in `leaves_mapping` otherwise it will consider the `company_leaves` during weeks with no public holiday or leaves.
In `hr_attendances_gantt`, `_unavailable_intervals_batch()` is not called. So we change the way the unavailabilities were computed to call `_unavailable_intervals_batch()` instead.
opw-4879481
Forward-Port-Of: odoo/odoo#252285
Forward-Port-Of: odoo/odoo#245741This update fixes an issue where flexible calendar employees were incorrectly displaying grayed-out days in planning and related modules. The change ensures that only public holidays and leaves are reflected as unavailable, providing a more accurate representation of employee availability. This improves the planning experience for teams utilizing flexible work schedules.
Original PR description
### Issue: When an employee has a flexible calendar, its gantt view in planning and other modules, like project or time off, shows incorrect grayed-out days. In general, employees with a flexible…
### Issue:
When an employee has a flexible calendar, its gantt view in planning and other modules, like project or time off, shows incorrect grayed-out days. In general, employees with a flexible calendar should not have any grayed out days other than public holidays.
### Steps to reproduce:
- Create a new work schedule:
- Flexible Hours
- 24 hours per week
- 8 average hours per day
- Create an employee with this work schedule
- Open Planning app
- Only the three first days of the week are not grayed out
### Cause:
With 24 hours per week, the worked time can be done in three days. Odoo considers that the first three days of the given time frame are worked, but the others aren't. This result is returned by `_work_intervals_batch()`. In `_unavailable_intervals_batch()` we then build the unavailabilities by taking the inverse of the work intervals. The only exception was for fully flexible resources (i.e. without a calendar).
### Solution:
The case we need to consider is for flexible resources: they are available anytime, all week long except on public holidays and leaves.
To do this we fix the method `_unavailable_intervals_batch()` which is then called by each module. If the resource is flexible, then we only return the interval of the public holidays overlapping with the time frame.
Works in `appointment`, `hr_holiday_gantt`and `project_enterprise`.
In `planning`, we need to skip the case where nothing is returned in `leaves_mapping` otherwise it will consider the `company_leaves` during weeks with no public holiday or leaves.
In `hr_attendances_gantt`, `_unavailable_intervals_batch()` is not called. So we change the way the unavailabilities were computed to call `_unavailable_intervals_batch()` instead.
Forward-Port-Of: odoo/enterprise#109706
Forward-Port-Of: odoo/enterprise#105521This update fixes a minor usability issue in the sale timesheet module. Previously, the 'Billing Type' setting for billable projects was hidden within a muted description field, making it easy for users to miss. Now, the field is clearly visible, ensuring users can easily adjust billing settings when needed.
Original PR description
Before this commit, when the project is billable, the user can also alter Billing type. However, that field is in muted and displayed inside the description of billable feature and so the user could miss he could alter a field inside that description. This commit makes sure billing type field is no longer in muted to correctly show the field can be edited. task-5994180
This update resolves several issues related to shift scheduling and resource allocation within the planning module. Specifically, it corrects errors in how allocated time is calculated, ensures accurate comparisons of shifts, and improves the mobile user experience for viewing maps and managing interventions. These fixes enhance the reliability and usability of the planning system.
Original PR description
## [FIX] planning: make sure allocated_percentage is defined in the view Before this commit, since we remove the allocated percentage field from the form view, the framework js does not know that…
## [FIX] planning: make sure allocated_percentage is defined in the view
Before this commit, since we remove the allocated percentage field from
the form view, the framework js does not know that field has a default
value and so it will set 0 by default for the float field and give it as
parameter when it will request an onchange when the user wants to create
a new shift.
This commit makes sure the field is inside the form view to be sure the
default value is taken into account to correctly compute the
allocated_hours.
## [FIX] planning: make sure we compare apples with apples
Before this commit, the copy previous week action in planning.slot could
crash because values for new shifts could contain Commands in
`resource_ids` field.
This commit makes sure we convert those commands into resource ids to be
able to compare those ids with the ones on the shift processed.
## [FIX] planning_field_service: display map view in mobile in My Map
Before this commit, the `My Map` action displays the calendar view in
mobile instead of the map view.
This commit makes sure we first display the map view in any device when
`My Map` action is loaded.
## [FIX] planning_field_service: hide field service buttons when slot not published
Before this commit, some buttons in planning.slot were visible even if
the intervention is not published or in progress.
This commit makes sure the buttons are visible when the state of the
intervention is published or in progress depending on what is the
purpose of the button.
## [FIX] planning_field_service: open full form view in calendar
This commit makes sure the form view is fully opened in the calendar
view of planning.slot instead of opening it inside a modal.
## [FIX] web_gantt: undo the rechescule of shifts and keep resources set
Before this commit, when the user reschedules a shift by drag and
dropping a pill in the gantt view and the group by is by Resources, if
the shift was assigned to more than one resource and the user undo his
action, the shift will be assigned to only the resource where the pill
was before the drag and drop instead of keeping its initial resources
set.
This commit makes sure the resources which were assigned to shift are
correctly set once the user undo the reschedule made.
## [FIX] planning_holidays: correctly compute the search domain for is_absent
Before this commit, the `employees on time off` filter does not return
the shifts with at least one human resource off due to wrong calculation
made in the search method of `is_absent` field defined in
`planning.slot` model.
This commit fixes the issue to correctly show the shifts with at least
one human resource off in the period of the shift.
## [FIX] planning_field_service_{sale_timesheet,worksheet}: display photos before materials
This commit makes sure the Photos button is before the one to add
materials in the intervention.
## [FIX] planning: display icon instead of label in calendar view
This commit reviews the popover in the calendar view of planning.slot to
replace the label by the icon to let more space for the value of each
fields displayed in that popover.
It also display in week by default the calendar view of planning slot in
My planning menu
## [FIX] planning: don't send re-assign email when one more resource is assigned
Before this commit, when the user edits a shift to add an additional
resource to the shift, the resource initially assigned to the shift will
receive a re-assign email even if he is still assigned to the shift.
This commit makes sure the email is sent only when the resource is no
longer assigned to the shift.
## [FIX] planning_field_service: add navigation map button to popovers and some fixes
This commit mainly adds a button to easily redirect the user to google
map with the customer address.
## [FIX] planning: don't show seconds in allocated_hours field
Before this commit, due to a rework of duration format, the allocated
hours now displays the seconds which is not really needed and take more
space than expected.
This commit makes sure we don't display the seconds in the allocated
hours field of planning.slot since that information is not really
useful.
## [FIX] planning{_field_service}: simplify display_name and conflicts warning
This commit simplifies the conflict warning in the form to have a
minimal warning message. The display name has been reviewed to only
display partner_id and role_id if partner_id otherwise project_id and
role_id will be displayed.
## [FIX] planning: don't include material resources when a human resource is set
This commit removes the material resources in the compute allocated
hours when there is at least one human resource set with it since we
could assume the material resources will just be used by the human
resource(s) assigned to the shift.
## [FIX] planning_field_service: fix geolocation when sign_in/complete intervention
Before this commit, the geolocation feature does not work because it was
only done in sign in button in calendar popover of planning.slot but the
feature is also needed when the user clicks on sign in and complete
buttons in the other views of planning.slot.
This commit makes sure the geolocation feature works in any view where
the sign in and complete buttons are currently displayed.
## [FIX] planning_field_service: add subtypes
## [FIX] planning: don't generate shifts in multi create when no resource available
Before this commit, when the user wants to create multiple shifts for a
certain resource in the gantt to cover a whole week (weekend included),
the shifts in the weekend will be generated as open shift since the
resource does not work during the weekend. Actually, the shifts should
not be generated in non working day for the resource.
This commit makes sure the shifts are not generated in non working day
of a resource selected.
## [FIX] planning_field_service: facilitate the work of planning manager
Before this commit, the planning manager cannot sign in for one of his
workers in the case, one worker forgot to do it and the intervention is
in the past. Hide price feature does not work correctly because the
check to know if the feature is enabled or not does not take the right
setting (wrong module because the feature has been moved before the
merging the main task).
This commit make sure the sign in button is available even if the
intervention is in the past. Some wordings have been reviewed and fix
typo to correctly check if hide price is enabled or not in the setting
of planning.
This commit also hides some fields for planning user when field service
is enabled in planning to only show the most important information for
the workers.
## [FIX] planning_field_service: add Today filter by default in My Map
## [FIX] planning_field_service: sign-in should recompute end date when needed
Before this commit, since the user can sign in when the shift is in the
past, we need to recompute the end_datetime to make sure the
end_datetime set is not before the start_datetime.
This commit recomputes the end_datetime when the shift is in the past
and the user clicks on sign in since the button will update the start
datetime to current time.
## [FIX] planning{_field_service_worksheet}: fix mobile form view in gantt
Before this commit, the Photos button displayed in the form view in
gantt does not have the same width than the other buttons in the form in
mobile. Moreover, a margin left is added on the first button in the form
view in gantt but in mobile that button is no longer aligned with the
other ones displayed.
This commit fixes those issues to make sure the buttons in the form view
displayed in the gantt view have the same width and the same alignment.
## [FIX] planning_field_service: fix break_time compute
Before this commit, the allocated hours field contained the sum of the
working hours of the human resources when there is at least one human
resource and so the working hours of the material resource assigned on
the intervention is not taken into account. Also, the compute of break
time field does not correctly compute it when there is more than one
resource.
This commit adapts the compute of break time according to the changes
made in the compute of allocated hours.
## [FIX] planning_field_service: hide Sign in button when no customer set
## [FIX] planning_field_service: fix SOL flow when confirming shift and portal
Before this commit, the portal views were not correctly supported the
portal user (missing sudo to find interventions completed and related to
the user which is the customer). A route is not adapted to the new route
in field service feature of helpdesk.
This commit fixes the access error in the portal to make sure the portal
user can access to intervention made for him.
## [FIX] planning_field_service_sale_timesheet: avoid copying SO and SOL
Before this commit, when field service and Billing features are
installed in planning and the user duplicates an existing intervention,
the SO and SOL fields are also copied and so the new materials added to
the new intervention will be added inside the same Sale Orders then the
one copied which is not really expected.
This commit avoid copying SO and SOL when duplicating an intervention
when field service is enabled in planning.
## [FIX] planning_field_service_sale_timesheet: rename label of back button in product
## [FIX] project_timesheet_forecast: fix compute effective hours
Before this commit, when field service and Billing features are enabled
in planning and the user completes an intervention, the allocated hours
and the break time are recomputed when the timesheets are generated for
the intervention, because of the hours recorded could be wrong in the
case the intervention finished after the working schedule of the workers
assigned. The issue is because when a timesheet is created, the
timesheet_ids field is recomputed and recompute effective hours and
allocated hours with other fields. Moreover, timesheet_ids is not stored
and is inside the compute of effective hours and that field is stored
which is not a good practise since the compute of effective hours will
do many write on db since timesheet_ids field will be recomputed each
time we need to read that field.
This commit reviews the compute of effective_hours to no longer depends
on timesheet_ids and makes sure the effective_hours field in
planning.slot are recomputed for the right slots when the employee_id,
date, task_id, project_id and unit_amount field are updated (or when the
timesheet is created). By doing that, that compute will only be computed
when needed.
## [FIX] planning_field_service: add some fields in calendar portal, and some more fixes
This commit adds the new fields added by field service in the planning
portal made for employees without any users to access in the backend.
task-5921961
task-5994180This update optimizes the calculation of sales planning data by ensuring that planning fields are only computed for sales orders directly related to planning activities. Previously, all sales orders were processed, which was inefficient. This change improves performance and resource usage within the sale planning module.
Original PR description
Before this commit, the compute of planning_hours_to_plan and planning_hours_planned fields computes for all SOLs even the ones which are not related to planning. This commit makes sure the both computes calcules the planning field for the SOLs which are related to planning, that is: - SOL is linked to a product with planning_enabled set to True - or at least one planning slot has the SOL set. Issue detected during a fix of migration script of task-5258989
This update automatically deletes task assignment email notifications, preventing them from piling up in the system. Previously, these emails were retained indefinitely, which could impact performance and storage. This change ensures a cleaner and more efficient system.
Original PR description
Task assignment notification emails (sent via message_notify when a user is assigned to a project task) were configured with mail_auto_delete=False, causing them to accumulate in the mail.mail table indefinitely. These are transient notifications that don't need to be retained after sending. Forward-Port-Of: odoo/odoo#251853
Previously, users couldn't search for tasks assigned to them within the Odoo portal. This fix resolves that issue, allowing users to easily find and manage tasks assigned to them directly from the portal interface. This improves efficiency and ensures users can quickly locate and work on their assigned tasks.
Original PR description
Description of the issue/feature this PR addresses: - On the portal task, "Search In Assignees" always returns no tasks. <img width="1482" height="979" alt="Screenshot 2026-02-04 at 23 02 53" src="https://github.com/user-attachments/assets/263429b4-0c32-4323-bf88-2dfaf2115181" /> <img width="1430" height="943" alt="image" src="https://github.com/user-attachments/assets/3c196cc1-f12d-4064-838d-8e29914e5fab" /> Current behavior before PR: - Cannot search for tasks in the portal by assignee. Desired behavior after PR is merged: - Can search for tasks in the portal by assignee. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247239
This update fixes a visual imbalance in the layout of Knowledge articles within the Odoo system. The change ensures consistent spacing on both sides of the editor content, resulting in a more professional and balanced appearance. This improves the overall user experience for viewing and editing articles.
Original PR description
The Knowledge article layout shows a visual imbalance due to asymmetric horizontal spacing in the editor content. This change makes the horizontal spacing consistent on both sides, improving the overall visual balance while maintaining proper spacing and layout consistency. Task-5222643 Forward-Port-Of: odoo/enterprise#108437
21 changes
Resolved issues and error corrections
This update corrects a bug where the valuation of kit components was incorrectly calculated after vendor bills were processed. The system was failing to account for the proportional share of the kit's cost, leading to inflated component values. This fix ensures accurate valuation of kits, particularly when using vendor bills.
Original PR description
**Issue**: Billing a PO containing kit with several components can lead to incorrect valuation of its components **Steps to reproduce**: - Create a kit product (by creating a BOM with 2 components)…
**Issue**: Billing a PO containing kit with several components can lead to incorrect valuation of its components **Steps to reproduce**: - Create a kit product (by creating a BOM with 2 components) with AVCO valuation - Create a PO for 1 unit at unit price 10 - Confirm PO and validate the receipt - Go to the BOM of the kit product and check BOM overview -> The cost of the two components are 5, which is correct - Go to Accounting > Vendors > Bill - Create a new bill by indicating the PO in "Auto-Complete" field and validate - Go back to the BOM of the kit product and check BOM overview -> The cost of the two components are 10, which is correct This also occurs with FIFO valuation **Cause**: While computing the value of the move: https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/stock_move.py#L282 https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/stock_move.py#L313-L314 It checks the value of the Bill: https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/stock_move.py#L357-L358 Which relies directly on the AML price of the kit: https://github.com/odoo/odoo/blob/a2b3a10255dba290ea462b9193ae11c54d8dd5e0/addons/purchase_stock/models/stock_move.py#L170 This ignores the `cost_share` of each BOM component. As a result, each component receives the full kit value instead of its proportional share This means that the value of the move is 10 instead of 10/2=5, which makes the valuation computation wrong: https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/product.py#L393 **Aditionnal note** The computation of the quantity is also incorrect: https://github.com/odoo/odoo/blob/a2b3a10255dba290ea462b9193ae11c54d8dd5e0/addons/purchase_stock/models/stock_move.py#L169 since it assumes the quantity of component of the kit is the same than the quantity of the kit itself, which is not true in the general case. opw-5924940 Forward-Port-Of: odoo/odoo#249264
This change resolves an issue preventing the l10n_mx_edi_pos module from correctly updating invoices when POS data is involved. The fix adds a necessary permission to access `pos.order` records, allowing the module to generate invoices accurately. This ensures proper integration with point-of-sale transactions in Mexico.
Original PR description
`l10n_mx_edi_pos` is now populating `pos_order_ids` [1]. l10n_mx_edi_pos is designed to send POS data into MX EDI without giving accounting users direct access to pos.order. So, we should consider…
`l10n_mx_edi_pos` is now populating `pos_order_ids` [1]. l10n_mx_edi_pos is designed to send POS data into MX EDI without giving accounting users direct access to pos.order. So, we should consider that in this module we won't have access to:
- `pos_order_ids` m2m on `l10n_mx_edi.document` (caused problems before [2])
- `pos_order_ids` o2m on `account.move`
- `pos.order` model
We add a minimal `sudo()` in
`_create_update_invoice_document_from_invoice` to be able to read from the `pos_order_ids` field on `account.move`:
```
File "/e19-1/l10n_mx_edi/models/account_move.py", line 1551, in _l10n_mx_edi_cfdi_invoice_document_cancel
return self.env['l10n_mx_edi.document']._create_update_invoice_document_from_invoice(self, document_values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/e19-1/l10n_mx_edi_pos/models/l10n_mx_edi_document.py", line 54, in _create_update_invoice_document_from_invoice
if invoice.pos_order_ids:
^^^^^^^^^^^^^^^^^^^^^
File "/c19-1/odoo/orm/fields_relational.py", line 967, in __get__
return super().__get__(records, owner)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/c19-1/odoo/orm/fields_relational.py", line 45, in __get__
return super().__get__(records, owner)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/c19-1/odoo/orm/fields.py", line 1743, in __get__
recs._fetch_field(self)
File "/c19-1/odoo/orm/models.py", line 3015, in _fetch_field
self.fetch(fnames)
File "/c19-1/odoo/orm/models.py", line 3055, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/c19-1/odoo/orm/models.py", line 3193, in _fetch_query
field.read(fetched)
File "/c19-1/odoo/orm/fields_relational.py", line 985, in read
raise AccessError(records.env._("Failed to read field %s", self) + '\n' + str(e)) from e
odoo.exceptions.AccessError: Failed to read field account.move.pos_order_ids
You are not allowed to access 'Point of Sale Order' (pos.order) records.
This operation is allowed for the following groups:
- Inventory/User
- Point of Sale/User
```
Afterwards `_create_update_document` in `l10n_mx_edi` will create or write this `pos_order_ids` value on the document without `sudo()`:
```
File "/home/jvo/Code/odoo/trees/e19-1/l10n_mx_edi/models/account_move.py", line 1551, in _l10n_mx_edi_cfdi_invoice_document_cancel
return self.env['l10n_mx_edi.document']._create_update_invoice_document_from_invoice(self, document_values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvo/Code/odoo/trees/e19-1/l10n_mx_edi_pos/models/l10n_mx_edi_document.py", line 56, in _create_update_invoice_document_from_invoice
return super()._create_update_invoice_document_from_invoice(invoice, document_values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvo/Code/odoo/trees/e19-1/l10n_mx_edi/models/l10n_mx_edi_document.py", line 1969, in _create_update_invoice_document_from_invoice
document = remaining_documents._create_update_document(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvo/Code/odoo/trees/e19-1/l10n_mx_edi/models/l10n_mx_edi_document.py", line 1936, in _create_update_document
result_document = self.create({
^^^^^^^^^^^^^
File "/home/jvo/Code/odoo/trees/c19-1/odoo/orm/decorators.py", line 365, in create
return method(self, vals_list)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvo/Code/odoo/trees/c19-1/odoo/orm/models.py", line 4021, in create
records = self._create(data_list)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvo/Code/odoo/trees/c19-1/odoo/orm/models.py", line 4253, in _create
field.create([
File "/home/jvo/Code/odoo/trees/c19-1/odoo/orm/fields_relational.py", line 760, in create
self.write_batch(record_values, True)
File "/home/jvo/Code/odoo/trees/c19-1/odoo/orm/fields_relational.py", line 786, in write_batch
self.write_real(records_commands_list, create)
File "/home/jvo/Code/odoo/trees/c19-1/odoo/orm/fields_relational.py", line 1559, in write_real
raise AccessError(model.env._("Failed to write field %s", self) + "\n" + str(e))
odoo.exceptions.AccessError: Failed to write field l10n_mx_edi.document.pos_order_ids
You are not allowed to access 'Point of Sale Order' (pos.order) records.
This operation is allowed for the following groups:
- Inventory/User
- Point of Sale/User
```
We therefore take out `pos_order_ids` in an override and write it ourselves with another minimal `sudo()`.
[1] https://github.com/odoo/enterprise/pull/97060
[2] https://github.com/odoo/enterprise/pull/99590
opw-6000974This update allows administrators to view and revoke user sessions, enhancing security and control over access to the Odoo system. The change improves administrative workflows by providing a dedicated view for managing user sessions, aligning with best practices for user access control.
Original PR description
An administrator must be able to revoke other users' sessions. The revocation action has been moved to the `res.session` model. Add the view that allows admins to view user sessions and revoke them. Task-5941823
This pull request reverts a recent change to the HR module. The previous update introduced an issue that was deemed to violate our stable release policy. This reversion ensures the HR functionality remains consistent and reliable for our users. We're prioritizing stability and adhering to our development standards.
Original PR description
Breaking stable policy Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a crash that occurred when deleting an account move within the l10n_sa module. The issue stemmed from a check within the system's attachment handling process, which was incorrectly reacting to deleted moves. This fix ensures smooth account move deletion without causing errors.
Original PR description
Since https://github.com/odoo/odoo/pull/242777 the deletion of an account.move may crash. Indeed, the deletion of the move delete its corresponding attachments, and ir.attachment has an ondelete method that checks the attached move, namely _unlink_except_posted_pdf_invoices(). The method checks some condition on the corresponding moves, which have just been deleted, hence raising a MissingError. runbot_build_error-237850
This update resolves a bug that prevented users from deleting employee leave reports within the reporting module. The issue stemmed from a design where the report data wasn't stored in a traditional database table, leading to an error when attempting deletion. This fix ensures the report deletion functionality now works correctly.
Original PR description
When the user tries to perform delete operation on the ``hr.leave.employee.report`` model, a traceback appears. Steps to reproduce the error: - Install ``hr_holidays`` module with demo data - Go to > Time Off > Reporting > by Employee > Switch to Graph View - Click on any record > Select any record > Actions > Delete Traceback: ```py UndefinedTable: relation "hr_leave_employee_report" does not exist ``` ``hr.leave.employee.report`` model is ``_auto=False``, meaning that no database table is created for this model. When the user attempts to delete a record of that model, It will lead to the above traceback. sentry-7202115608 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where clicking the call dropdown in the Odoo system wouldn't open it. The fix involves styling adjustments to ensure the dropdown appears correctly, improving the user experience. It also corrects styling issues within the call action components.
Original PR description
task-5263009 Forward-Port-Of: odoo/odoo#251462
This update ensures that the 'Outstanding Account' field is automatically populated when setting up the 'Card' payment method in Point of Sale. Previously, the system didn't consistently assign this required field, leading to setup inconsistencies. This change improves the setup process and aligns automated configuration with manual settings.
Original PR description
Steps to reproduce: 1. Initialize a new database with 'point_of_sale' and 'accountant' modules. 2. Go to Configuration > Payment Methods and open the 'Card' payment method. 3. Observe that the 'Outstanding Account' field is empty, despite being required in the view for bank journals. The issue occurred because the '_create_journal_and_payment_methods' method created the default 'Card' payment method without specifying an 'outstanding_account_id'. While the ORM allows this (as the field is only required in the view), it creates an inconsistency between automated setup and manual configuration. Solution: Modify '_create_journal_and_payment_methods' to automatically assign the 'outstanding_account_id' during creation. It follows the pattern used in the payment method's onchange logic by fetching the default debit account from the chart template or falling back to the company's transfer account. opw-5914536 Forward-Port-Of: odoo/odoo#249439
This update resolves an issue where the eLearning course content section wouldn't display files from Google Shared Drives. The fix allows the system to properly access files in Shared Drives by adjusting the Google Drive API settings. This ensures users can seamlessly integrate content from Shared Drives into their courses.
Original PR description
Step to reproduce: 1. Install `website_slides` 2. Go to eLearning > Courses > select a course > Add Content 3. Paste a public link that belongs to a file located in a Google `Shared Drive` Issue: - The system shows a warning `Your file could not be found on Google Drive, please check the link and/or privacy settings` even if the link is accessible via a browser in incognito mode. Cause: - The Google Drive API restricts the search scope to the user's personal `My Drive` by default It filters out items located in Shared Drives unless the client explicitly signals Solution: - Add `params['supportsAllDrives'] = 'true'` to the API request opw-5424413 Forward-Port-Of: odoo/odoo#241037
This update enhances the visual appearance of the member list in Odoo, specifically addressing minor spacing and alignment issues. The changes improve the readability and overall aesthetic of the interface, ensuring a more polished user experience. This is a simple fix to improve the user interface.
Original PR description
- reduced spacing with the member name - better vertical alignment of name and star icon - some spacing with the "..." button when member name is long Before / After <img width="241" height="205" alt="Screenshot 2026-03-06 at 15 16 44" src="https://github.com/user-attachments/assets/448a8d5c-36a4-4018-89f3-cf89dabdac8a" /> <img width="237" height="195" alt="Screenshot 2026-03-06 at 15 15 47" src="https://github.com/user-attachments/assets/29968c76-51f8-498e-ac9a-98861d3360a2" /> Before / After <img width="241" height="206" alt="Screenshot 2026-03-06 at 15 16 56" src="https://github.com/user-attachments/assets/96a0ee34-ec87-418f-8ecd-0025dfe79387" /> <img width="244" height="197" alt="Screenshot 2026-03-06 at 15 16 10" src="https://github.com/user-attachments/assets/9a4dc28c-8ba3-4992-8230-0aa4f8af382c" />
This update removes a misleading button in the channel member panel for regular users. Previously, this button was visible even when users couldn't perform any actions, leading to an empty popover. Now, the button is hidden, providing a cleaner and more intuitive experience.
Original PR description
Partial backport of https://github.com/odoo/odoo/pull/246580 Before this commit, the button "..." on channel members was visible even for non-owner / admins. Normal members cannot make any action on members, so there's no point in showing this button: clicking on it shows an empty popover. This commit prevents the showing of this button when member has no actions. Before / After <img width="244" height="223" alt="Screenshot 2026-03-06 at 12 50 59" src="https://github.com/user-attachments/assets/2257e27a-33b3-4c33-94a7-0d81dff3e0a9" /> <img width="244" height="206" alt="Screenshot 2026-03-06 at 12 51 21" src="https://github.com/user-attachments/assets/6da655a3-30b4-430b-bdf6-7c2316674ebc" />
This update fixes an issue preventing the IoT box's Wi-Fi access point from connecting. The solution involved changing the Wi-Fi standard to 802.11a, which is compatible with modern Wi-Fi equipment. This ensures consistent connectivity for IoT box configurations.
Original PR description
Before this commit, the `hostapd` Wi-Fi access point that is started to allow configuring the Wi-Fi network on the IoT box could not be connected to when using the latest images. The exact cause is unknown, but the Odoo code has not changed so it seems to be due to an OS or driver update. After this commit, we set the Wi-Fi mode to 802.11a, which enables modern Wi-Fi standards on the AP, whereas before it defaulted to 802.11b which is the oldest Wi-Fi standard. This change makes the network visible and able to be connected to. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where overtime calculations were incorrect for employees working night shifts that crossed midnight. The change ensures accurate overtime tracking by properly handling time zone differences and correctly deleting outdated overtime records, preventing duplicated hours. This improves the reliability of employee time tracking.
Original PR description
**Steps to reproduce:** 1. Configure Working Hours: Set up a night-shift schedule that splits at midnight (Local Time): - Thursday: 20:00 to 24:00 - Friday: 00:00 to 04:00 2. Assign the above…
**Steps to reproduce:** 1. Configure Working Hours: Set up a night-shift schedule that splits at midnight (Local Time): - Thursday: 20:00 to 24:00 - Friday: 00:00 to 04:00 2. Assign the above calendar to an employee. 3. Set the Employee’s Timezone to Asia/Kolkata (UTC+5:30). 4. Assign an active Overtime Ruleset to the employee. 5. When the attendance calendar is in Europe/Brussels TZ - Check-in: Jan 15, 15:30 CET - Check-out: Jan 15, 23:30 CET Expected Behavior: Worked Hours = 8.0, Overtime (Extra Hours) = 0.0 Actual Behavior (Bug): Worked Hours = 8.0, Overtime = 4.0 **Bug Cause:** 1. The _update_overtime function normalized the Ruleset version periods using time.min for both the start and end of the day. This forced the validity period of the rules to end exactly at 00:00:00 UTC on the final day. 2. The overtime recalculation logic failed to delete existing overtime records because the search domain was incorrectly computed. Specifically, using relativedelta(SU) and relativedelta(MO(-1)) without the weekday= keyword argument did not shift the dates to the week boundaries. This resulted in an empty or incorrect deletion range, leading to duplicated overtime hours as new records were layered on top of un-removed old ones. **Solution:** 1. Modified the version_periods_by_employee mapping to use time.max (23:59:59) for the end of the version period. This ensures that the ruleset remains active through the entire final calendar day in UTC, allowing shifts that cross the midnight boundary to be fully captured. 2. Corrected the date range logic by explicitly passing the weekday argument to relativedelta. This ensures the domain correctly targets the full week window - from the preceding Monday to the following Sunday, ensuring all relevant stale overtime lines are purged before recalculation. 3. Updated Manual Edit Handling: Refined the logic to detect days with manual overrides or "To Approve" statuses before unlinking. If an attendance change triggers a recalculation on such a day, the system now replaces the manual entry with the mathematically correct value but flags the new record with a to_approve status for manager review. 4. Adjusted the expected overtime in test_weekly_overtime to 18.0 to correctly reflect the cumulative calculation of daily overtime (2h/day) plus the weekly overtime threshold reached on Friday. Task: 5710273 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where discounts weren't correctly applied to split POS orders, leading to incorrect discount calculations. The fix ensures that discounts are accurately added to each split order line, improving the reliability of split payment processing for restaurant and loyalty programs. This resolves a bug that prevented accurate discount application during split order transactions.
Original PR description
**: discount, loyalty, restaurant Steps: --- - Create a POS order with at least 2 quantities. - Apply a global discount (e.g., 10%). - Split the order with 1 quantity. - Split again with the remaining 1 quantity. - After validating the final split payment, go back to Split again. Issue: --- - Clicking Split again shows a negative discount amount. - The split orders do not contain any discount line. Cause: --- - The discount line was added to the current order instead of the split order. - When all lines were split, the current order was reused instead of creating a new one. Fix: --- - Add the discount line to the correct split order. - Avoid creating a new order when all lines are already split. task-5942356 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where users without project access rights would encounter errors when modifying work orders linked to private projects. The fix ensures that workers can successfully update these work orders by granting necessary read permissions to project data, preventing access errors.
Original PR description
When working on a MO that is linked to a project in private, it will trigger a access error if the worker is does not have project access right Steps to reproduce: ------------------- * Install Project, MRP, Accouting * Create a private project * Create a MO and link it to this project * confirm this MO with a user that has no project access right Observation: ------------- When modifying the MO, we will pass through the write that has been overwritten: https://github.com/odoo/enterprise/blob/b332af45a46b2295797a5096f68b7953554a495b/project_mrp_workorder_account/models/mrp_production.py#L6-L10 we will call _get_analytic_distribution on project.project and since _get_analytic_distribution will [read fields from self](https://github.com/odoo/odoo/blob/436921c24a531eba6bf57ffe3f7c3b4978139d83/addons/analytic/models/analytic_line.py#L59-L64) we need project.project read rights. opw-4919576 Forward-Port-Of: odoo/enterprise#108148
This update ensures that refunds created through the Odoo backend system now accurately reflect the positive price changes made when refunds are created through the user interface. Previously, refunds in the backend showed negative prices, which was inconsistent with the UI. This fix improves data accuracy and consistency for all refund transactions.
Original PR description
Before this commit, when creating a refund from backend, the refunded lines had negative price, which is not the case when creating a refund from the UI. This commit makes sure that the refunded lines have positive price. opw-5459378 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249548
This update corrects a display issue in the info side panel of demo livechat sessions. Previously, closed sessions were incorrectly shown as active, leading to inaccurate data. Now, demo sessions with feedback are properly marked as ended, ensuring the info panel accurately reflects the conversation outcome.
Original PR description
**Description of the issue this PR addresses:** ---------------------------------------------- Some livechat demo sessions included feedback/ratings but were still displayed as active conversations…
**Description of the issue this PR addresses:** ---------------------------------------------- Some livechat demo sessions included feedback/ratings but were still displayed as active conversations in the info side panel. This created inconsistent demo data where closed conversations appeared with options meant for ongoing chats (e.g., status shown instead of outcome). **Current behavior before PR:** ---------------------------------------------- - Certain demo livechat sessions had ratings applied but no explicit livechat_end_dt set. - As a result, the info side panel treated them as ongoing conversations. - This caused mismatched UI information for demo data. **Desired behavior after PR is merged:** ---------------------------------------------- - Demo livechat sessions that received feedback are explicitly marked as ended using livechat_end_dt. - The info side panel correctly reflects closed conversations with coherent outcome information. Task-5412081 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250001
This update removes unnecessary customizations related to Swiss payroll calculations within the payrun process. The core logic has been corrected, eliminating redundant and potentially conflicting rules. This ensures consistent and accurate payroll processing for Swiss users.
Original PR description
Not necessary anymore, standard logic has been fixed Forward-Port-Of: odoo/enterprise#108121
This update resolves an issue where early payment discounts weren't correctly processed when generating invoices in the Factur-X format. The change adds the necessary handling for Early Payment Discounts (EPD) within this format, ensuring accurate invoice generation and compliance. This improves the accuracy of financial reporting.
Original PR description
Added the handling of early payment discount in the factur-x format. opw-5265981 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252098 Forward-Port-Of: odoo/odoo#244659
This update resolves an issue where extra drag-and-drop dropzones appeared when hidden popups were present in the website editor. By ensuring the popup's visibility state is consistently tracked, this fix prevents these unwanted dropzones and improves the overall user experience when working with popups.
Original PR description
## Description There was a desync issue with popup states between normal mode and edit mode. That caused: - Hidden popups contributed extra dropzones during drag-and-drop - Hidden popups lost…
## Description There was a desync issue with popup states between normal mode and edit mode. That caused: - Hidden popups contributed extra dropzones during drag-and-drop - Hidden popups lost `d-none` class after dropping unrelated snippets ## How to reproduce ### Bug 1: extra dropzones from hidden popup desync 1. Enter website edit mode. 2. Drop popup in the page 3. Drag another snippet as you were adding it to the page 4. An additional dropzone appears below the invisible popup snippet ### Bug 2: hidden popup loses `d-none` class 1. Enter edit mode. 2. Drop a popup. 3. Close it so `.s_popup` gets `d-none`. 4. Drop any other snippet on the page arbitrarily. 5. Popup loses `d-none` class. ## Expected behavior after fix - Popup hidden/shown state remains stable across editor refreshes and snippet drops. - Drag-and-drop no longer creates extra dropzones from hidden popups. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251517 Forward-Port-Of: odoo/odoo#250625
This update ensures that employees only receive timesheets for public holidays that are relevant to their company. Previously, timesheets were incorrectly generated for employees in companies without a linked public holiday, leading to inaccurate record-keeping. This change improves data accuracy and reporting.
Original PR description
**Steps to reproduce** - Have 2 companies A and B - Use a single working schedule (needs to have no company on it) for both companies and their employees - Create a public holiday with company A, while having company B in the selected companies - There's a timesheet for the public holiday created for employees of company B, even though the public holiday will not apply for them. **Change** Only generate the timesheets for employees belonging to the companies of the public holidays. opw-5498462 Forward-Port-Of: odoo/odoo#245743
7 changes
Resolved issues and error corrections
This update resolves an issue where users without project access rights would encounter errors when modifying MOs associated with private projects. The fix ensures that workers can successfully update these MOs by granting necessary read permissions to project data, preventing access errors and improving workflow efficiency.
Original PR description
When working on a MO that is linked to a project in private, it will trigger a access error if the worker is does not have project access right Steps to reproduce: ------------------- * Install Project, MRP, Accouting * Create a private project * Create a MO and link it to this project * confirm this MO with a user that has no project access right Observation: ------------- When modifying the MO, we will pass through the write that has been overwritten: https://github.com/odoo/enterprise/blob/b332af45a46b2295797a5096f68b7953554a495b/project_mrp_workorder_account/models/mrp_production.py#L6-L10 we will call _get_analytic_distribution on project.project and since _get_analytic_distribution will [read fields from self](https://github.com/odoo/odoo/blob/436921c24a531eba6bf57ffe3f7c3b4978139d83/addons/analytic/models/analytic_line.py#L59-L64) we need project.project read rights. opw-4919576 Forward-Port-Of: odoo/enterprise#108148
This update resolves an issue that prevented basic receipts from printing correctly when the point-of-sale (POS) name exceeded a certain length. The fix ensures that receipts are generated accurately, regardless of the POS name's length, preventing printing errors. This improves the user experience for Italian POS operations.
Original PR description
When printing a basic receipt, if the pos name is too long a traceback will occurs when printing the basic receipt. Steps to reproduce: * Create a pos with a name of 46 character or more * Setup the italian fiscal printer * Enable Basic Receipt printing * Open point of sale * Create an order and validate it * Try "Print Basic receipt" Traceback: RangeError: Invalid count value: -15 at String.repeat () If the data being printed is longer than the maximum number of character in a line (MAX_CHARS = 46), paddingLeft becomes negative which cause an error in repeat(). [Similar solution](https://github.com/odoo/enterprise/blob/18.0/l10n_it_pos/static/src/app/fiscal_printer/commands/print_rec_message/print_rec_message.js#L35) [opw-5270697](https://www.odoo.com/odoo/project/49/tasks/5270697) Forward-Port-Of: odoo/enterprise#109527
This update corrects a technical issue where German addresses submitted to Amazon were being formatted incorrectly, leading to delivery validation failures. The system now swaps the street and building/company name fields to ensure Amazon's validation process correctly recognizes German addresses. This ensures smoother order fulfillment for German customers.
Original PR description
When filling in a German address on Amazon, customers are presented with two fields: - Street, and - Building or company name. The street is sent as AddressLine2, while the building/company name is sent as AddressLine1. However, delivery providers validate address existence, which fails when address line 1 is not a street name. To resolve this, we swap these two fields for German addresses. opw-4668178 Forward-Port-Of: odoo/enterprise#109215
This update resolves an issue preventing users from setting up Amazon accounts in environments with multiple companies. The fix allows access to all company data during the onboarding process, ensuring compatibility with connected Amazon accounts. This improves the user experience and avoids errors related to company mismatches.
Original PR description
The onboarding return route is a website route with access restricted to the website company only. This causes an error when the company doesn't match the Amazon account being connected. This commit allows users to access all their companies during Amazon account setup to avoid this mismatch error. opw-5944078 Forward-Port-Of: odoo/enterprise#109740 Forward-Port-Of: odoo/enterprise#109590
This update ensures taxes are automatically calculated for charge and discount lines in UrbanPiper orders, even when tax data isn't initially provided by the UrbanPiper system. Previously, taxes weren't applied if UrbanPiper didn't send tax information, and it was limited to India. Now, the system uses standard product tax rules for these lines, ensuring accurate tax calculations across all regions.
Original PR description
Before this commit: --- - If UrbanPiper did not send tax data for charge and discount lines, taxes were not applied. - Tax data was only provided by UrbanPiper for the India region. After this commit: --- - When the payload does not include tax data, compute taxes for charge and discount lines using the product tax, the same way as for normal order lines. task-5895987 Forward-Port-Of: odoo/enterprise#108821 Forward-Port-Of: odoo/enterprise#106686
This update resolves an issue where the 'Submit' button for Dutch account returns didn't actually trigger the necessary XBRL export to the tax authorities. Now, when an account return is submitted, the correct XBRL data is generated and transmitted, ensuring accurate reporting and compliance with Dutch regulations.
Original PR description
Commit 647699eeb4b8a1cc37ca074fa57844871c5086c1 introduced account returns to the Dutch localization. However, the "Submit" action only updated the internal record state without triggering the actual XBRL export to the Dutch tax authorities. This led to a mismatch where the UI displayed "Submitted" despite no data being transmitted. This commit fixes the flow by: - Overriding `action_submit` on the account return to launch the XBRL wizard when the return type is a Dutch tax return. - Ensuring the SBR tax report wizard calls `_proceed_with_submission` on the associated account return to correctly finalize the process (including locking the period and generating the closing entry). opw-5974711 Forward-Port-Of: odoo/enterprise#109691
This update fixes a server error that occurred when merging tables in the Point of Sale (POS) system, specifically when a table was empty. The fix ensures the system waits for order synchronization before merging, preventing errors and improving table management functionality. This enhances the reliability of the POS experience.
Original PR description
Steps to reproduce: - On an empty table, change the guest count - Create an order and send it to the kitchen - Open another table without an order - Merge the first table with the second one Issue: - A server error occurs while merging the tables Fix: - Wait for the merge order to sync before returning the result Task-5502511 Related PR - https://github.com/odoo/odoo/pull/245162 Forward-Port-Of: odoo/enterprise#104577
8 changes
Resolved issues and error corrections
This update fixes an issue where timesheets weren't correctly selecting the appropriate Service Order Line (SOL) when creating timesheets in a multi-company environment. Now, the system automatically links the user to the correct employee record based on billing rates, ensuring accurate SOL assignment for invoicing.
Original PR description
****Behavior:**** **Current:** In a multi company environment, when a sale contains multiple tasks in some project, and the user has billing rates indicating they should be assigned to a specific…
****Behavior:**** **Current:** In a multi company environment, when a sale contains multiple tasks in some project, and the user has billing rates indicating they should be assigned to a specific task, creating a new timesheet for the project does not set the correct SOL. This only happens if the sale is happening from a company that does not have an employee linked to the user. **Expected:** The new timesheet should be able to connect the current user to the related employee in the billing rates to find the right SOL. In the situation in which multiple companies have created an employee for the same user, and more than one of these has been linked to a SOL in the billing rates (unlikely workflow): We choose the SOL linked to the employee record created for the currently activated company, otherwise, we default to the first employee in the list. **Steps to reproduce:** - Be in a multicompany environment: company A and B - Create User with access to both but only one employee record for company A - Switch to company B - Create 2 services product, both creating a task in the same project. - Activate Billable Rate Indicators in the settings - Create a quote with both services and confirm - Go to the related project, and in the Invoicing tab, link employee from company A to SOL2 - As the user, check both companies but set company B as current active - Go to timesheet and create a new timesheet, when setting the project from the quote, you should see SOL1 by default, however we would want SOL2 as it was configured. opw-5159195 Forward-Port-Of: odoo/odoo#234200
This pull request reverts a previous change that incorrectly applied taxes to down payments in point-of-sale and sales transactions. The update ensures that taxes are applied correctly, aligning with business requirements and improving the accuracy of financial reporting. This resolves an issue impacting sales and invoicing processes.
Original PR description
This reverts commit 6831d64b80ebc542ed814d322e8e7ec2ca3b044e. opw-5853070 Forward-Port-Of: odoo/odoo#252069 Forward-Port-Of: odoo/odoo#251942
This update clarifies the message users receive when a live chat conversation ends. Previously, the message used ellipses, which could be confusing. Now, it clearly states 'Conversation has ended,' ensuring a better user experience.
Original PR description
This commit updates the chatbot completion message from 'Conversation ended...' to 'Conversation has ended.' The previous version used ellipses, which typically suggest an incomplete thought. Since the message is meant to clearly indicate that the conversation has concluded, the ellipses were unnecessary and potentially confusing. Forward-Port-Of: odoo/odoo#252461 Forward-Port-Of: odoo/odoo#251166
This update fixes an issue where instructions added to work orders weren't properly linked when creating purchase orders (MOs) via the mobile app. The problem stemmed from a previous change that removed a key data field, preventing the mobile app from correctly associating instructions with the MO. This ensures instructions are accurately reflected when creating MOs on mobile devices.
Original PR description
# How to reproduce - Create a BOM for a product with a Work Order - Add instructions to the WO - Using mobile, create a new MO for the product # The problem The instructions are not linked to the MO. This can easily be seen via the shop floor application # Why This issue is identical to https://github.com/odoo/odoo/pull/197889. This commit https://github.com/odoo/odoo/commit/b1ceec4c616d8ad2fee5b0fa1ce76c85cacbb344 removed the operation_id field from the workorder kanban mobile view, which is used in the MO form on mobile. operation_id is then not passed to the server in vals_list when creating the MO but it is required to link the instructions from the BOM to the MO. opw-5950983 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250090
Previously, users couldn't search for tasks assigned to them within the Odoo portal. This update fixes a bug that prevented the 'Search In Assignees' feature from returning accurate results. Now, users can successfully find and manage tasks assigned to them through the portal.
Original PR description
Description of the issue/feature this PR addresses: - On the portal task, "Search In Assignees" always returns no tasks. <img width="1482" height="979" alt="Screenshot 2026-02-04 at 23 02 53" src="https://github.com/user-attachments/assets/263429b4-0c32-4323-bf88-2dfaf2115181" /> <img width="1430" height="943" alt="image" src="https://github.com/user-attachments/assets/3c196cc1-f12d-4064-838d-8e29914e5fab" /> Current behavior before PR: - Cannot search for tasks in the portal by assignee. Desired behavior after PR is merged: - Can search for tasks in the portal by assignee. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247239
This update fixes a technical issue where the ECPay integration for Taiwanese companies wasn't working reliably. The change ensures the integration triggers correctly for any company using the Taiwan fiscal localization by checking the company's fiscal country instead of its physical address. This improves the accuracy and functionality of ECPay transactions for our Taiwanese customers.
Original PR description
Previously, the module checked `company_id.country_id.code == 'TW'` to determine if Taiwan's ECPay logic should be applied. However, `country_id` only represents the physical address of the company. This commit replaces `country_id` with `account_fiscal_country_id` across the sale order model and website controllers. This ensures that the ECPay integration correctly triggers for any company using the Taiwan fiscal localization. Task-6002433 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252373 Forward-Port-Of: odoo/odoo#251924
This update ensures accurate e-invoicing for Malaysian credit, debit, and refund notes. Specifically, the system now correctly sets the 'prepaid amount' to zero for these document types, aligning with Malaysian e-Invoicing (MyInvois) API requirements. This ensures proper data transmission and compliance.
Original PR description
Currently, the `prepaid_amount` in the UBL export is calculated as `amount_total - amount_residual` for all document types. However, for credit notes, debit notes, and refund notes (both standard and self-billed, corresponding to document type codes 02, 03, 04, 12, 13, and 14), this amount should be 0 to comply with Malaysian e-Invoicing (MyInvois) API requirements. This commit introduces the following fixes: - Sets the `prepaid_amount` to 0 for document types '02', '03', '04', '12', '13', and '14'. - Update the `payable_amount` to the full `invoice.amount_total`. Task-5971843 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252382 Forward-Port-Of: odoo/odoo#251915
This update resolves an issue where users without sufficient permissions to view certain dashboard data would cause the dashboard to fail to load. The fix ensures that dashboards check data access correctly, allowing users to consistently access the dashboard regardless of their permissions. This improves the overall user experience.
Original PR description
## Description When opening a dashboard, `_dashboard_is_empty()` may call `search_count()` on one of the dashboard's main data models to decide whether sample data should be loaded. If the current user does not have read access to one of these models, `search_count()` raises an access error and the dashboard loading can fail, even though the user has access to the dashboard itself. To avoid this, only unreadable models are checked with `sudo()`, while readable models are still evaluated with the current user rights. This prevents the access error in `_dashboard_is_empty()` and allows the dashboard to open instead of failing early. Task: [5905166](https://www.odoo.com/odoo/project/2328/tasks/5905166) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249784
7 changes
Resolved issues and error corrections
This update fixes an issue where currency exchange difference values were incorrectly displayed as zero in DATEV exports. The fix ensures that the actual exchange rate differences are accurately reflected in the exported data, providing more precise reporting for financial statements. This improves the reliability of data shared with DATEV.
Original PR description
**Steps to reproduce: 1. Create DE company (EUR currency) 2. Add USD -> EUR exchange rates for XX/01/26 and XX/15/26 (XX is target month) 3. Install l10n_de_reports 4. Make sure bank journal has…
**Steps to reproduce: 1. Create DE company (EUR currency) 2. Add USD -> EUR exchange rates for XX/01/26 and XX/15/26 (XX is target month) 3. Install l10n_de_reports 4. Make sure bank journal has 'outstanding receipts' set for incoming manual payment [Accounting -> Config -> Journals -> Bank] 5. Create USD invoice for XX/02/26 and confirm it 6. Register a Payment for XX/16/26 and confirm it (you should see the exchange difference entry matched alongside the payment) 7. Go to [Accounting -> Reporting -> General Ledger] and export DATEV data **Description of issue: The currency exchange rate difference entries in the exported file are shown as 0 **Expected behavior: The actual currency exchange difference values should be displayed **Why this happens? The DATEV export currently sets the amount based on 'amount_currency'. For currency exchange difference entries, this value is 0.0 in the General Ledger, resulting in 0 values in the export. **The fix: Updated the logic to use the line balance when the entry is identified as a currency exchange difference. opw-5358954 Forward-Port-Of: odoo/enterprise#107268
This update fixes a bug that prevented certain salary deductions (specifically 'ATTACH_SALARY') from being accurately reflected in employee net pay calculations for the Kenyan payroll module. The changes ensure that these deductions are now correctly processed, improving payroll accuracy and compliance.
Original PR description
**Behavior before this commit** Some salary rules (e.g. `ATTACH_SALARY`) were ignored in the NET calculation. **Behavior after this commit** - Four rules are now added to the "Total deductions" line: their sequence and category has been changed. - The sign of these lines has also been switched: an attachment of salary of a positive amount should be added to the amount of total deductions, which is then deducted from the net.  opw-5894647
This update resolves an issue where users without project access rights would encounter errors when modifying Manufacturing Orders (MOs) linked to private projects. The fix ensures that workers can successfully update these MOs, streamlining the workflow for project-based production tasks. This prevents disruptions and ensures accurate data management.
Original PR description
When working on a MO that is linked to a project in private, it will trigger a access error if the worker is does not have project access right Steps to reproduce: ------------------- * Install Project, MRP, Accouting * Create a private project * Create a MO and link it to this project * confirm this MO with a user that has no project access right Observation: ------------- When modifying the MO, we will pass through the write that has been overwritten: https://github.com/odoo/enterprise/blob/b332af45a46b2295797a5096f68b7953554a495b/project_mrp_workorder_account/models/mrp_production.py#L6-L10 we will call _get_analytic_distribution on project.project and since _get_analytic_distribution will [read fields from self](https://github.com/odoo/odoo/blob/436921c24a531eba6bf57ffe3f7c3b4978139d83/addons/analytic/models/analytic_line.py#L59-L64) we need project.project read rights. opw-4919576 Forward-Port-Of: odoo/enterprise#108148
This update resolves a bug where the barcode scanning app incorrectly identified products when using barcodes that include product prices (price-embedded barcodes). The fix adds logic to handle these barcodes, mirroring the behavior in the Point of Sale app, ensuring accurate product recognition.
Original PR description
Issue ----- Barcode app doesn't match products when using price-embedded barcodes. Steps to reproduce ----- - Use default nomenclature (so price embedded barcodes are 23...) - Create a product with barcode 2355555000004 - Go to barcode and scan 2355555009502 > The product isn't recognised Cause ----- There is no logic in place to handle such barcodes, but it can be added to mimic how it works in POS. https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/addons/point_of_sale/static/src/app/screens/product_screen/product_screen.js#L212 ----- Ticket: opw-5901412 Forward-Port-Of: odoo/enterprise#109627
This update corrects a technical issue preventing German customers from correctly completing their Amazon addresses. The system was incorrectly sending building names as the primary address line, causing delivery validation failures. By swapping the fields, we ensure accurate address formatting and successful delivery processing.
Original PR description
When filling in a German address on Amazon, customers are presented with two fields: - Street, and - Building or company name. The street is sent as AddressLine2, while the building/company name is sent as AddressLine1. However, delivery providers validate address existence, which fails when address line 1 is not a street name. To resolve this, we swap these two fields for German addresses. opw-4668178 Forward-Port-Of: odoo/enterprise#109215
This update fixes an issue where the 'Today' button in the Gantt view didn't reliably return to the current date after navigating from yesterday. The fix ensures the button functions as expected, providing a consistent user experience when viewing schedules.
Original PR description
**Version:** 18.0 **Steps to reproduce:** - Install Attendance modules. - Navigate to yesterday using the arrow button. - Then click on Today button. **Issue:** The view does not return to the current day when Today button is clicked. **Cause:** The condition to check this scenario fails for this case. **Fix:** Updated the condition to include the this scenario. task-5451384 Forward-Port-Of: odoo/enterprise#103139
This update fixes a bug where employee skills weren't automatically added to appraisals created by the system's automated scheduling process. The fix ensures that skills are correctly copied to all appraisals, regardless of how they're initially created, improving appraisal accuracy and data consistency. This resolves an issue impacting appraisal reporting.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date…
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date to today 4. Go to Scheduled Actions > Appraisal: Run employee appraisal > Run Manually 5. Open the newly created appraisal for the employee Observation: ------------------------------------- In the Skills tab, the employee's skills are not populated even though the appraisal is already in the confirmed stage Issue: ------------------------------------- When the cron `_run_employee_appraisal_plans` creates an appraisal, it is created directly in `pending` state via `create()`. The skill-copying logic only lived in the `write()` override, which triggers on state transitions from 'new' to 'pending'. Since `create()` bypasses `write()`, Employee skills were never copied to cron-created appraisals https://github.com/odoo/enterprise/blob/451dce92a087086fc3d5d5f610626312f32bcd13/hr_appraisal_skills/models/hr_skills.py#L12-L15 Solution: ------------------------------------- Add a `create()` override to call `_copy_skills_when_confirmed` when an appraisal is created directly in the `pending` state, ensuring employee skills are properly copied. opw-5491433 Forward-Port-Of: odoo/enterprise#107760
20 changes
Resolved issues and error corrections
This update resolves an issue causing the floor plan screen to repeatedly refresh, impacting the user experience. The problem stemmed from a bug where the system was incorrectly modifying appointment times, triggering endless re-renders. This fix ensures appointments are displayed accurately and reliably.
Original PR description
Infinite re-rendering in floor_screen.
Root cause: `getFirstAppointment` mutates reactive model state
(appointment.start) during rendering:
```
appointments.map((appointment) => {
if (appointment.start < startOfToday) {
appointment.start = startOfToday; // <= mutates reactive state!
}
});
```
And `startOfToday` is set by
`DateTime.now().set({ hours: 0, minutes: 0, seconds: 0 })`
Which doesn't zero milliseconds, so each render creates a new
`startOfToday` with a later millisecond value.
The comparison `appointment.start < startOfToday` keeps being true
triggers another write => another re-render => infinite loop.
Forward-Port-Of: odoo/enterprise#109915This update fixes an issue related to managing private cities within the payroll system. A new module, `hr_address_extended`, has been added to handle this functionality, particularly when the ‘enforce_cities’ setting is enabled. This ensures accurate city data is captured and utilized for payroll calculations.
Original PR description
. Add new module hr_address_extended to handle M2O private_city field if enforce_cities is enabled . Add hr_address_extended to l10n_us_hr_payroll dependencies . Add Corresponding tests task-5877610
A bug causing the kitchen display to go blank when sending orders from the POS has been fixed. The update ensures the correct configuration ID is loaded, allowing orders to be properly displayed and processed on the kitchen display. This improves the efficiency of order fulfillment.
Original PR description
*=pos_urban_piper Steps to produce: ==== - Install pos_restaurant without demo data - Configure kitchen display - Place order from pos. Issue: ==== - Kitchen display gets blank as config_id was not loaded. Fix: ==== - `config_id` field was loaded in the frontend task-5999170
This update resolves an issue with the XML reports generated for Mexican tax filings, specifically addressing accounts with single-digit codes. A new field was added to the accounting structure to allow for more flexible reporting while ensuring accurate XML generation for Mexican tax compliance. The changes also update associated test cases.
Original PR description
This commit fixes the unit tests in l10n_mx_xml_polizas after code_digits has been retrieved. task-5981095
This update prevents the payslip validation process from failing if the wkhtmltopdf dependency is not present. The system now automatically generates PDFs via a scheduled task (cron) instead, ensuring payslips can still be processed without requiring the user to install wkhtmltopdf. This improves usability and avoids unnecessary disruptions.
Original PR description
You don't want to block the payslip flow if wkhtmltopdf is not installed. This commit avoids that by redirecting the pdf generation to the cron if not installed. That way, it won't affect the state of the payslip. task-6013936
This update allows users to directly edit the name of a Pay Run within its Kanban view, providing greater flexibility in managing payroll records. Previously, changes were only possible when viewing the Pay Run details. This enhancement simplifies the process of updating Pay Run names and improves user workflow.
Original PR description
This change restores inline editing of the Pay Run name in their (default) kanban view. task-5981049
This update adds a toast notification to the payslip view when a PDF is generated. Previously, users weren't informed about the progress of PDF creation, leading to uncertainty. This change provides clear feedback, ensuring users know the PDF generation process has started and completed successfully.
Original PR description
[IMP] hr_payroll: toast notification during PDF generation In payslip views, there were no toast notifications when we press to generate PDF. It was not clear whether they are generated or not and that's why we implemented this feature. task - 5975715
This update corrects a display issue within the tax return checklist. Previously, the system incorrectly flagged 'bill attachments' as an anomaly even when documents were attached to bills. Now, if all bills have attachments, the system correctly displays 'reviewed' instead of 'anomaly', streamlining the tax return process.
Original PR description
When going through checklist of tax return, anomaly is created for "bill attachments" even when a document is attached to bill. If all bills have attachment, state should not display "anomaly", but "reviewed" instead The reason of the bug is that the domain is looking for attachment to account.move which ignore the documents in the chatter, while the bill is actually attached in the chatter. task: 5408611
This update corrects a technical issue related to how the system accessed barcode target records, preventing performance problems. The change simplifies the process and avoids potential problems with future updates, ensuring consistent and reliable barcode scanning functionality. This resolves a bug that could impact user experience.
This update resolves a bug that caused the AI chat composer to crash when using the HTML editor. The fix ensures focus handling works correctly for both the text and HTML composer modes, preventing errors and improving the user experience.
Original PR description
*=ai_app In AI chat, focusing the composer used to call ev.target.select(). That works for the text composer (textarea), but not for the HTML composer (contenteditable), where select() doesn’t exist and causes a TypeError. This update makes focus handling respect the active composer mode: - text mode keeps the existing select behavior - html mode uses the editor focus path instead task-5981018 Forward-Port-Of: odoo/enterprise#109865 Forward-Port-Of: odoo/enterprise#109163
This update removes unnecessary customizations related to Swiss payroll calculations within the payrun process. The core logic has been corrected, making these overrides no longer required. This simplifies the system and ensures accurate payroll processing.
Original PR description
Not necessary anymore, standard logic has been fixed Forward-Port-Of: odoo/enterprise#108121
This update fixes a bug preventing warnings on the EC Sales List when customers don't meet specific criteria (e.g., location within Europe). Previously, the report didn't display these warnings for customers with 'Intra-Community' fiscal positions or those located outside of Europe. This ensures accurate reporting and compliance.
Original PR description
The warnings partner_same_country and partner_no_ec_country on the EC Sales List are never showed. To Reproduce (for partner_same_country warning): - Create a company in Belgium - Create a customer in Belgium with "Intra-Community" as a Fiscal Position - Create an invoice with this customer - Go to the EC Sales List - The customer doesn't appear in it, so the warning is not present. For the partner_no_ec_country, do the same but with the country of the customer being one outside of Europe. Forward-Port-Of: odoo/enterprise#109583 Forward-Port-Of: odoo/enterprise#107139
This update resolves an issue where users without project access rights would encounter errors when modifying work orders linked to private projects. The fix ensures that workers can successfully update these work orders by granting necessary read permissions to project data, preventing access errors and improving workflow efficiency.
Original PR description
When working on a MO that is linked to a project in private, it will trigger a access error if the worker is does not have project access right Steps to reproduce: ------------------- * Install Project, MRP, Accouting * Create a private project * Create a MO and link it to this project * confirm this MO with a user that has no project access right Observation: ------------- When modifying the MO, we will pass through the write that has been overwritten: https://github.com/odoo/enterprise/blob/b332af45a46b2295797a5096f68b7953554a495b/project_mrp_workorder_account/models/mrp_production.py#L6-L10 we will call _get_analytic_distribution on project.project and since _get_analytic_distribution will [read fields from self](https://github.com/odoo/odoo/blob/436921c24a531eba6bf57ffe3f7c3b4978139d83/addons/analytic/models/analytic_line.py#L59-L64) we need project.project read rights. opw-4919576 Forward-Port-Of: odoo/enterprise#108148
This update fixes an issue where sick leave days weren't accurately counted across months and where the basic salary was incorrectly calculated when there were no work entries. The changes ensure accurate payroll processing for sick leave and basic salary, particularly for leaves spanning multiple months.
Original PR description
### Issue: - Sick leaves were calculated using the leave record dates, so leaves that started in one month and continued into another month were not counted correctly. - The Basic salary rule was…
### Issue: - Sick leaves were calculated using the leave record dates, so leaves that started in one month and continued into another month were not counted correctly. - The Basic salary rule was applied even when there were no `WORK100` work entries on the payslip. ### Fix: - Updated the leave filtering logic to consider leaves whose `request_date_from` or `request_date_to` overlaps with the payslip period year, instead of relying solely on the leave start date. - Adjusted the Basic salary computation to execute only when `WORK100` exists in `worked_days_line_ids`, preventing calculation when no effective worked entries are present. ### Impact: - Ensures sick leave days are correctly accounted for in the relevant payslip period, even when the leave spans across months. - Prevents incorrect Basic salary computation on payslips with no `WORK100` work entries, resulting in accurate payroll calculations. --- task-5462380 Forward-Port-Of: odoo/enterprise#109892 Forward-Port-Of: odoo/enterprise#104401
This update corrects a display issue where 'Confirm' buttons were visible even when payslips had been generated. The system now correctly hides these buttons when there are existing payslips, ensuring a cleaner user interface. This improves clarity and prevents confusion for users.
Original PR description
The 'empty_payslips' field is an Integer, but the view was treating it as a pure Boolean. This commit: - Updates 'Confirm' buttons to be invisible when payslips exist (> 0). Task: 5916154 Forward-Port-Of: odoo/enterprise#109926 Forward-Port-Of: odoo/enterprise#106957
This update resolves a crash that occurred when sending Electronic Data Interchange (EDI) documents. The fix converts data back to a standard format for the IAP server, addressing an incompatibility issue identified in the Odoo system. This ensures EDI sending functionality is now reliable.
Original PR description
Following [^1] most base64 file access has been passed through `BinaryValue` and `BinaryBytes` classes. This assists with database access, however, this was change in `l10n_pe_edi` in a place that sends a request to the IAP server. Since `requests.requests` doesn't know how to handle the new datatype `BinaryBytes` we need to convert it back to b64. opw-none [^1]: #104714
A bug in the Gantt view of service projects, triggered by grouping tasks, was resolved. The issue stemmed from incorrect date parsing within the project domain logic. This update now correctly handles dynamic dates, ensuring the Gantt view functions reliably.
Original PR description
### Issue: When in the Gantt view of service projects, grouping by project results in a traceback. ### Steps to reproduce: - Create another field service project - Create a task in the new project…
### Issue: When in the Gantt view of service projects, grouping by project results in a traceback. ### Steps to reproduce: - Create another field service project - Create a task in the new project and add start and end dates - Go to Field service > my tasks > gantt view > group by project - Error with traceback `time data 'today' does not match format '%Y-%m-%d %H:%M:%S'` ### Cause: This [commit](https://github.com/odoo/odoo/commit/d1ea43f6721116914762ea323d8a5987f043e87f) added the possibility to use dynamic dates in domains. Then all domains were changed in 42b1fca8e127926a06f503d79c8baeddf7d5ae82 But `_expand_domain_dates()` is trying to parse the dates as if they were written in ISO format: https://github.com/odoo/enterprise/blob/be853cc1ee544dda580960d94417cfdff2c8a7db/project_enterprise/models/project_task.py#L626 ### Solution: We use the method `parse_date()`, which was added with dynamic dates, to parse them. opw-5955317 Forward-Port-Of: odoo/enterprise#109236
This update resolves several issues impacting the planning module, primarily focusing on accurate shift calculations, mobile map views, and button visibility. It ensures shifts are correctly assigned, improves the user experience on mobile devices, and provides appropriate button functionality based on intervention status.
Original PR description
## [FIX] planning: make sure allocated_percentage is defined in the view Before this commit, since we remove the allocated percentage field from the form view, the framework js does not know that…
## [FIX] planning: make sure allocated_percentage is defined in the view
Before this commit, since we remove the allocated percentage field from
the form view, the framework js does not know that field has a default
value and so it will set 0 by default for the float field and give it as
parameter when it will request an onchange when the user wants to create
a new shift.
This commit makes sure the field is inside the form view to be sure the
default value is taken into account to correctly compute the
allocated_hours.
## [FIX] planning: make sure we compare apples with apples
Before this commit, the copy previous week action in planning.slot could
crash because values for new shifts could contain Commands in
`resource_ids` field.
This commit makes sure we convert those commands into resource ids to be
able to compare those ids with the ones on the shift processed.
## [FIX] planning_field_service: display map view in mobile in My Map
Before this commit, the `My Map` action displays the calendar view in
mobile instead of the map view.
This commit makes sure we first display the map view in any device when
`My Map` action is loaded.
## [FIX] planning_field_service: hide field service buttons when slot not published
Before this commit, some buttons in planning.slot were visible even if
the intervention is not published or in progress.
This commit makes sure the buttons are visible when the state of the
intervention is published or in progress depending on what is the
purpose of the button.
## [FIX] planning_field_service: open full form view in calendar
This commit makes sure the form view is fully opened in the calendar
view of planning.slot instead of opening it inside a modal.
## [FIX] web_gantt: undo the rechescule of shifts and keep resources set
Before this commit, when the user reschedules a shift by drag and
dropping a pill in the gantt view and the group by is by Resources, if
the shift was assigned to more than one resource and the user undo his
action, the shift will be assigned to only the resource where the pill
was before the drag and drop instead of keeping its initial resources
set.
This commit makes sure the resources which were assigned to shift are
correctly set once the user undo the reschedule made.
## [FIX] planning_holidays: correctly compute the search domain for is_absent
Before this commit, the `employees on time off` filter does not return
the shifts with at least one human resource off due to wrong calculation
made in the search method of `is_absent` field defined in
`planning.slot` model.
This commit fixes the issue to correctly show the shifts with at least
one human resource off in the period of the shift.
## [FIX] planning_field_service_{sale_timesheet,worksheet}: display photos before materials
This commit makes sure the Photos button is before the one to add
materials in the intervention.
## [FIX] planning: display icon instead of label in calendar view
This commit reviews the popover in the calendar view of planning.slot to
replace the label by the icon to let more space for the value of each
fields displayed in that popover.
It also display in week by default the calendar view of planning slot in
My planning menu
## [FIX] planning: don't send re-assign email when one more resource is assigned
Before this commit, when the user edits a shift to add an additional
resource to the shift, the resource initially assigned to the shift will
receive a re-assign email even if he is still assigned to the shift.
This commit makes sure the email is sent only when the resource is no
longer assigned to the shift.
## [FIX] planning_field_service: add navigation map button to popovers and some fixes
This commit mainly adds a button to easily redirect the user to google
map with the customer address.
## [FIX] planning: don't show seconds in allocated_hours field
Before this commit, due to a rework of duration format, the allocated
hours now displays the seconds which is not really needed and take more
space than expected.
This commit makes sure we don't display the seconds in the allocated
hours field of planning.slot since that information is not really
useful.
## [FIX] planning{_field_service}: simplify display_name and conflicts warning
This commit simplifies the conflict warning in the form to have a
minimal warning message. The display name has been reviewed to only
display partner_id and role_id if partner_id otherwise project_id and
role_id will be displayed.
## [FIX] planning: don't include material resources when a human resource is set
This commit removes the material resources in the compute allocated
hours when there is at least one human resource set with it since we
could assume the material resources will just be used by the human
resource(s) assigned to the shift.
## [FIX] planning_field_service: fix geolocation when sign_in/complete intervention
Before this commit, the geolocation feature does not work because it was
only done in sign in button in calendar popover of planning.slot but the
feature is also needed when the user clicks on sign in and complete
buttons in the other views of planning.slot.
This commit makes sure the geolocation feature works in any view where
the sign in and complete buttons are currently displayed.
## [FIX] planning_field_service: add subtypes
## [FIX] planning: don't generate shifts in multi create when no resource available
Before this commit, when the user wants to create multiple shifts for a
certain resource in the gantt to cover a whole week (weekend included),
the shifts in the weekend will be generated as open shift since the
resource does not work during the weekend. Actually, the shifts should
not be generated in non working day for the resource.
This commit makes sure the shifts are not generated in non working day
of a resource selected.
## [FIX] planning_field_service: facilitate the work of planning manager
Before this commit, the planning manager cannot sign in for one of his
workers in the case, one worker forgot to do it and the intervention is
in the past. Hide price feature does not work correctly because the
check to know if the feature is enabled or not does not take the right
setting (wrong module because the feature has been moved before the
merging the main task).
This commit make sure the sign in button is available even if the
intervention is in the past. Some wordings have been reviewed and fix
typo to correctly check if hide price is enabled or not in the setting
of planning.
This commit also hides some fields for planning user when field service
is enabled in planning to only show the most important information for
the workers.
## [FIX] planning_field_service: add Today filter by default in My Map
## [FIX] planning_field_service: sign-in should recompute end date when needed
Before this commit, since the user can sign in when the shift is in the
past, we need to recompute the end_datetime to make sure the
end_datetime set is not before the start_datetime.
This commit recomputes the end_datetime when the shift is in the past
and the user clicks on sign in since the button will update the start
datetime to current time.
## [FIX] planning{_field_service_worksheet}: fix mobile form view in gantt
Before this commit, the Photos button displayed in the form view in
gantt does not have the same width than the other buttons in the form in
mobile. Moreover, a margin left is added on the first button in the form
view in gantt but in mobile that button is no longer aligned with the
other ones displayed.
This commit fixes those issues to make sure the buttons in the form view
displayed in the gantt view have the same width and the same alignment.
## [FIX] planning_field_service: fix break_time compute
Before this commit, the allocated hours field contained the sum of the
working hours of the human resources when there is at least one human
resource and so the working hours of the material resource assigned on
the intervention is not taken into account. Also, the compute of break
time field does not correctly compute it when there is more than one
resource.
This commit adapts the compute of break time according to the changes
made in the compute of allocated hours.
## [FIX] planning_field_service: hide Sign in button when no customer set
## [FIX] planning_field_service: fix SOL flow when confirming shift and portal
Before this commit, the portal views were not correctly supported the
portal user (missing sudo to find interventions completed and related to
the user which is the customer). A route is not adapted to the new route
in field service feature of helpdesk.
This commit fixes the access error in the portal to make sure the portal
user can access to intervention made for him.
## [FIX] planning_field_service_sale_timesheet: avoid copying SO and SOL
Before this commit, when field service and Billing features are
installed in planning and the user duplicates an existing intervention,
the SO and SOL fields are also copied and so the new materials added to
the new intervention will be added inside the same Sale Orders then the
one copied which is not really expected.
This commit avoid copying SO and SOL when duplicating an intervention
when field service is enabled in planning.
## [FIX] planning_field_service_sale_timesheet: rename label of back button in product
## [FIX] project_timesheet_forecast: fix compute effective hours
Before this commit, when field service and Billing features are enabled
in planning and the user completes an intervention, the allocated hours
and the break time are recomputed when the timesheets are generated for
the intervention, because of the hours recorded could be wrong in the
case the intervention finished after the working schedule of the workers
assigned. The issue is because when a timesheet is created, the
timesheet_ids field is recomputed and recompute effective hours and
allocated hours with other fields. Moreover, timesheet_ids is not stored
and is inside the compute of effective hours and that field is stored
which is not a good practise since the compute of effective hours will
do many write on db since timesheet_ids field will be recomputed each
time we need to read that field.
This commit reviews the compute of effective_hours to no longer depends
on timesheet_ids and makes sure the effective_hours field in
planning.slot are recomputed for the right slots when the employee_id,
date, task_id, project_id and unit_amount field are updated (or when the
timesheet is created). By doing that, that compute will only be computed
when needed.
## [FIX] planning_field_service: add some fields in calendar portal, and some more fixes
This commit adds the new fields added by field service in the planning
portal made for employees without any users to access in the backend.
task-5921961
task-5994180
Forward-Port-Of: odoo/enterprise#109332This update corrects a visual imbalance in the layout of Knowledge articles within the Odoo system. The change ensures consistent horizontal spacing, resulting in a more professional and balanced appearance for all articles. This improves the overall user experience and presentation of our knowledge base.
Original PR description
The Knowledge article layout shows a visual imbalance due to asymmetric horizontal spacing in the editor content. This change makes the horizontal spacing consistent on both sides, improving the overall visual balance while maintaining proper spacing and layout consistency. Task-5222643 Forward-Port-Of: odoo/enterprise#108437
This update fixes a potential issue where changes to knowledge articles (sharing, favorites, editing) weren't reliably applied. The update ensures the correct article is loaded before any modifications are made, enhancing the user experience and data consistency. This improves the reliability of the knowledge base.
Original PR description
With this commit, We ensure we're in the correct article before making any changes (share, add to favorites, edit) using `waitUntil`. We've added a `checkArticle` function to ensure the article is in the correct place in the menu. runbot-error-id~234645
1 change
Resolved issues and error corrections
This update fixes an error in how project budgets were calculated, leading to incorrect spending and remaining balance displays. The fix ensures that negative budget amounts are handled correctly, presenting accurate percentages and amounts for project cost tracking. This improves the reliability of budget reporting.
Original PR description
Steps to reproduce: --------------------------- 1. Install the `project_account_budget` and `account_accountant` modules. 2. Create a new project and add an Analytic Account for it from the settings…
Steps to reproduce: --------------------------- 1. Install the `project_account_budget` and `account_accountant` modules. 2. Create a new project and add an Analytic Account for it from the settings page 3. Open the Project Kanban, click the three dots on the project card, and select Project's Updates. 4. Click Add Budget button and open the budget wizard. 5. Add a budget line in the wizard with a planned amount expressed as a negative value for an expense (for example: -10000). 6. Create a Vendor Bill using the same analytic account with an amount of 1000. 5. Confirm the bill. 6. Go back to Project's Updates and click New button to view the budget summary. Observation: --------------------------- The budget summary displays incorrect signs and percentages in Activities summary, for example: ``` -10.0% (-1,000.00) of the -10,000.00 budget has been spent. 110.0% (-11,000.00) of the budget is remaining. ``` This incorrectly shows -10% spent and 110% remaining instead of 10% spent and 90% remaining (-9,000). Issue: --------------------------- The project cost (already negative) was negated again when computing the spent amount in https://github.com/odoo/enterprise/blob/ac3f333d97eda5c86a0813490ac6204d4ec5721f/project_account_budget/models/project_update.py#L16 Double-negating the cost makes it positive, which then gets added to the expense budget instead of reducing it, producing inverted percentages and signs. Solution: --------------------------- For expense budgets (negative budgets), do not apply an extra negative sign when calculating the project cost so the spent, remaining, and percentage values are computed correctly. After the fix: ``` 10.0% ($ 1,000.00) of the $ -10,000.00 budget has been spent. 90.0% ($ -9,000.00) of the budget is remaining. ``` opw-5357854 Forward-Port-Of: odoo/enterprise#109638 Forward-Port-Of: odoo/enterprise#102126
9 changes
Resolved issues and error corrections
This update fixes a bug in the Point of Sale product search. When limited product loading is used, the search was unintentionally excluding products from child categories. Now, all products within a category and its subcategories are included in search results, improving the user experience and ensuring customers can find what they need.
Original PR description
When limited product loading is enabled and `iface_available_categ_ids` contains a parent category, the "Search more" server-side search (`loadProductFromDB`) was only filtering by the top-level category IDs. Products assigned to any child/sub-category were silently excluded from the search results. opw-5952960 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the system incorrectly interpreted date columns in import files. Specifically, it fixed a problem where date formats like '2500/1222' were mistakenly identified as '%Y.%m.%d'. This ensures that import files are processed accurately, preventing import errors and improving data integrity.
Original PR description
## Description of the issue/feature this PR addresses: If you try to import an excel sheet for example with these column on sale order, but the issue is at every model: (this is an example)…
## Description of the issue/feature this PR addresses: If you try to import an excel sheet for example with these column on sale order, but the issue is at every model: (this is an example)  First column: Client ref Second column: committment date Third column: Customer ## Current behavior before PR: When you upload the file to import, the extract_header_types calls _try_match_date_time that try to guess the date column. The first column makes the _try_match_date_time to guess that the format is %Y.%m.%d format . This is an error because that column does not contain a date . The reason is that check_patterns when convert the pattern to reg ex using `def to_re(pattern):` on base_import/base_import.py, does not escape the "." so it works as "every char" wildcard character on regex . ## Desired behavior after PR is merged: No error should appear and the correct date format from the right date column should be guessed --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#196477
This update resolves a bug on the Jobs page where selecting all offices would remove the previously applied country filter. The issue stemmed from an incorrect variable used in the filter link. The fix updates the variable to ensure the country filter remains active when selecting all offices.
Original PR description
Steps to reproduce: =================== 1. Navigate to the Jobs page. 2. Filter a specific country 3. Select all offices -> The country filter will be removed Cause: ====== the "All Offices" link inside job_filter_by_offices, the href uses 'all_countries=1' if is_remote else current_country_path but current_country_path is not defined anywhere Solution: ========= Switch to current_country_param Note: ===== The fix will be adapted in later versions opw-5947819 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where Odoo invoices for Danish customers were incorrectly formatted according to Peppol standards. The change skips adding redundant PartyIdentification information, preventing errors and ensuring compliance with regulations. This improves the accuracy of invoice submissions and avoids potential processing problems.
Original PR description
Currently, if a Danish partner has a reference set, Odoo adds it under PartyIdentification. This violates Peppol `DK-R-013`, which mandates using schemeID when PartyIdentification is used. Adding the Danish schemeID would also trigger another error, `PEPPOL-COMMON-R042`, as the organization number (CVR) must be included in the `_text`. Including schemeID seem therefore unnecessary since it will appear in CompanyID. Steps to reproduce: - Create a Danish company and enable Peppol - Create a Danish customer with a reference - Create an invoice and submit to Peppol, `DK-R-013` error occurs opw-5921602
This update resolves an issue where employees were incorrectly appearing in payslip generation reports due to a misinterpretation of contract status. The fix ensures that employees are only included if they have a valid, active contract matching the selected salary structure type, improving payroll accuracy.
Original PR description
**Steps to reproduce** - Create an employee - Have a first contract in "New" state covering some period of the month with "Salary Structure Type" A. - Have a second contract in "Running" state covering some other period of the month with "Salary Structure Type" B. - Go to the payslip batch for the current month and click on "Generate payslips". - In the wizard, select "Salary Structure Type" B: employee appears in the list as expected. - In the wizard, select "Salary Structure Type" A. - Unexpected: employee appears in the list, although the contract using that structure type is not in an open or closed state. **Cause** Employees were displayed if they had a contract in open/close state AND a contract with the matching structure type, but we need to check if there's some contract matching both conditions (correct state AND matching structure type). A new function is added to be able to inject an extra domain. opw-5443624
This update corrects a previous issue where users with the invoicing & banks role couldn't access specific transaction views. The change ensures these users have the necessary permissions to view duplicate and missing transactions, improving their ability to manage financial data. This resolves a restriction in the previous 19.0 release.
Original PR description
In 19.0 we made a fix to allow users with the invoicing & banks role, to have access to duplicate transaction and missing transaction. https://github.com/odoo/enterprise/commit/748660f7ad9ca30d59f00e69d42a24864f1764d3 https://github.com/odoo/enterprise/commit/6edc057a9c0459af2b6d625415b700daf6280520 This commit will allow user with that role to access those menus task-5998895
This update fixes a bug where employee skills weren't automatically added to appraisals created by the system's automated scheduling process. The fix ensures that skills are correctly copied to all appraisals, regardless of how they're initially created, improving appraisal accuracy and data consistency. This resolves an issue impacting appraisal reporting.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date…
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date to today 4. Go to Scheduled Actions > Appraisal: Run employee appraisal > Run Manually 5. Open the newly created appraisal for the employee Observation: ------------------------------------- In the Skills tab, the employee's skills are not populated even though the appraisal is already in the confirmed stage Issue: ------------------------------------- When the cron `_run_employee_appraisal_plans` creates an appraisal, it is created directly in `pending` state via `create()`. The skill-copying logic only lived in the `write()` override, which triggers on state transitions from 'new' to 'pending'. Since `create()` bypasses `write()`, Employee skills were never copied to cron-created appraisals https://github.com/odoo/enterprise/blob/451dce92a087086fc3d5d5f610626312f32bcd13/hr_appraisal_skills/models/hr_skills.py#L12-L15 Solution: ------------------------------------- Add a `create()` override to call `_copy_skills_when_confirmed` when an appraisal is created directly in the `pending` state, ensuring employee skills are properly copied. opw-5491433 Forward-Port-Of: odoo/enterprise#107760
This update corrects a validation error that occurred when sending invoices to Peppol. The system previously used an outdated UoM conversion ('QT') that is no longer compliant with current UN/ECE standards. This change ensures invoices meet regulatory requirements for international exchange.
Original PR description
Currently, the Odoo UoM 'qt (US)' is converted to 'QT', which is not valid anymore. Based on investigation, this was originally set to QT following this link: https://unece.org/fileadmin/DAM/cefact/recommendations/rec20/rec20_rev3_Annex2e.pdf But this document seems dated from 2005. Step to reproduce: - Create an invoice with a line with 'qt (US)' as UoM - Try to send the invoice to Peppol - You will get a validation error: "[BR-CL-23]-Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21" Also removed the link to unece.org since the link is no longer valid. opw-5961476 Forward-Port-Of: odoo/odoo#252174
This update resolves an issue where users could incorrectly set both a start and end date simultaneously within the web_studio environment. The fix prevents this invalid configuration, ensuring date range fields are properly validated and displayed, improving data accuracy and usability. This change addresses a technical bug impacting the user experience.
Original PR description
Steps to reproduce ================== - Install project,web_studio - Click on the three dots in the top right of a project - Click on settings - Open studio - Add a new date field - Set the start date field to Start date - Set the end date field to Expiration Date - Exit studio => The date range field is marked as invalid (red outline) Cause of the issue ================== https://github.com/odoo/odoo/blob/ee15163fe516817da277760752892ea76a699e22/addons/web/static/src/views/fields/datetime/datetime_field.js#L371-L373 We cannot set both the start and end field at the same time. opw-5403670
5 changes
Resolved issues and error corrections
This change resolves a test failure related to displaying budget information in project updates. The fix ensures that test users automatically receive the necessary permissions (`account.group_account_readonly`) to see budget details, regardless of whether the `account_accountant` module is installed. This prevents test failures and ensures accurate reporting.
Original PR description
Before: Test failed when only `project_account_budget` was installed because the user lacked `account.group_account_readonly`. Budget info in project update description requires this group, but it's only auto-assigned when `account_accountant` module is installed. After: Explicitly grant `account.group_account_readonly` to test user. This ensures budget information (spent/remaining percentages and amounts) is included in the project update description, regardless of whether `account_accountant` is installed. Note: No need in 18.0 as `account_accountant` gets installed automatically on installing `project_account_budget` Related PR: https://github.com/odoo/enterprise/pull/102126 runbot error: 241113
This update fixes an issue where timesheet descriptions were not correctly synchronized when updating values in the grid view. Specifically, when a timesheet cell was modified, a new line with the updated description was created, but it wasn't grouped with the original line. This change ensures that timesheet descriptions remain consistent across the grid view, improving data accuracy and usability.
Original PR description
To reproduce: ============= - on timesheet group by Project > Task > Description - on a line with a description, update a 0:00 cell to an other value - refresh or change view to list and back to grid - a new line with description '/' is created with the updated value Problem: ======== when creating the new timesheet it's by default given the name '/' which for the grid view is not in same group as the original line with the description. Solution: ========= when creating the new timesheet, we give it the same description as the original line. opw-5909249
This update corrects a validation error that occurred when sending invoices to Peppol. The system previously incorrectly converted UoM 'qt (US)' to 'QT', which is no longer a valid code according to UN/ECE standards. This change ensures invoices comply with international regulations.
Original PR description
Currently, the Odoo UoM 'qt (US)' is converted to 'QT', which is not valid anymore. Based on investigation, this was originally set to QT following this link: https://unece.org/fileadmin/DAM/cefact/recommendations/rec20/rec20_rev3_Annex2e.pdf But this document seems dated from 2005. Step to reproduce: - Create an invoice with a line with 'qt (US)' as UoM - Try to send the invoice to Peppol - You will get a validation error: "[BR-CL-23]-Unit code MUST be coded according to the UN/ECE Recommendation 20 with Rec 21" Also removed the link to unece.org since the link is no longer valid. opw-5961476 Forward-Port-Of: odoo/odoo#252174
This update fixes an issue where the shipping weight for deliveries with packages was incorrectly calculated when multiple pickings were involved. The change ensures that package weights are accurately computed based on the context of each individual delivery, leading to more reliable shipping weight data. This improves the accuracy of shipping costs and inventory management.
Original PR description
Problem: When computing the `shipping_weight` for pickings with packages, we use package weights. If a picking is passed via the context, the package weight is computed using the contained product…
Problem: When computing the `shipping_weight` for pickings with packages,
we use package weights. If a picking is passed via the context, the
package weight is computed using the contained product weights. Otherwise,
it just uses the `package.package_type_id.base_weight` or 0.
This issue occurs when computing the `shipping_weight` for multiple
pickings at one time. Odoo prefetches the packages and their weights are
computed using the context of the first picking. If a package does not
belong to the first picking, their weight is not computed using its
`stock.move.line` product weights and the incorrect value is cached. When
the loop reaches the next picking, it uses the incorrect weight that was cached.
Purpose: Add `@api.depends_context('picking_id')` to `_compute_weight` so that
package weights are cached per picking.
I have updated this assert
https://github.com/odoo/odoo/blob/338fc201cc0ed0f2fd8349fab4f538817e69a295/addons/stock_delivery/tests/test_packing_delivery.py#L316-L317
to explicitly pass the `picking_id` in the context when checking the cached package weights.
Steps to Reproduce on Runbot:
Navigate to Inventory > Configuration > Settings and enable Packages.
Create a new storable product with a weight of 1 kg and add 2 units on-hand.
Create a delivery for 1 unit of our newly created product, mark as todo and put in a pack.
Create a second delivery for 1 unit of our newly created product, mark as todo, and put in a pack.
Observe on the second delivery the weight for shipping is 1 kg.
Navigate to the list view of deliveries and add the weight for shipping field to the view.
Search for both deliveries we created and observe the first one has a weight for shipping of 1 kg,
but the second one has a weight for shipping of 0 kg.
opw-5902814This update clarifies Odoo's server logs during data imports by adding more specific information about which model the data was imported to. Previously, it was difficult to quickly identify the source of import logs, making troubleshooting support issues more time-consuming. This change improves the efficiency of our support team and overall data import process.
Original PR description
When investigating support tickets (and the server logs), it is not always clear if: 1) The `info`` log from base_import refers to a dry run or a "real" import 2) The "done" log does not explicitly specify which model the data was imported to While an experienced user can still extrapolate what happened by the immediate context of the preceding/following log lines, it makes it unnecessary difficult to see at first glance where the data was imported to. This PR aims at rectifying it to improve the quality of life of people investigating the server logs. OPW-5999195 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252734