Daily updates from Odoo
Wednesday, February 25, 2026
223 changes
15 changes
Resolved issues and error corrections
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a requirement for read access to stock records they didn't have permission to see. The fix adds the 'stock.group_stock_user' group to the relevant field, ensuring only authorized users can access ticket information. This improves usability for all helpdesk users.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update resolves a bug preventing users from saving invoices in the Mexico (MX) edition of Odoo Enterprise. The issue stemmed from a requirement for a payment method when the payment policy was set to 'PUE,' which blocked saving functionality. The fix allows payment methods to be edited until the invoice is sent to the SAT, maintaining user flexibility.
Original PR description
After this commit 1e702a5, a bug in the invoice form view appeared that made it difficult (to not say impossible) to reset an invoice or do any operation that involves to save the invoice. How to reproduce (there are multiple ways but this is the easiest): 1.- Using mx demo company INNOVACION y DESARROLLO SA de CV 2.- Create an invoice with INMOBILIARIA CVA as contact 3.- Post the invoice 4.- Try to send or do a modification and save 5.- Missing required fields notification will appear. This error happens since the payment way is required if the payment policy is PUE but is not editable when not in draft, causing this deadlock. There multiple ways to fix this, but the simplest way and maintaining the flexibilty on the user to decide what value to use, we keep the logic on the view but make the payment method editable until the invoice is sent to the SAT just like with the payment policy. target: saas-19.2 -> master task-5962060
This update corrects an error that occurred when moving leads from a previous year to a 'won' stage in the CRM. The fix ensures the system handles leads with dates spanning multiple years correctly, preventing a technical error. This improves the reliability of lead management.
Original PR description
Currently, a traceback occurs when a lead won in a previous year is moved to another won stage in the current year. ### **Steps to Reproduce:** 1) Install CRM without demo data. 2) From the…
Currently, a traceback occurs when a lead won in a previous year is moved to another won stage in the current year.
### **Steps to Reproduce:**
1) Install CRM without demo data.
2) From the `CRM>Configuration>Stages` make `new` stage as **'won'** stage.
3) Create a lead with dated in the past (e.g., 30-12-2025 by changing system date)
and with some expected_revenue.
4) Change the system date to today and move the lead to the Won stage.
Ref Video: https://drive.google.com/file/d/18OCQ4Tl6Co_oh28XNag3qjxMkXJNSMOh/view?usp=sharing
### **Error:**
`TypeError: '<' not supported between instances of 'NoneType' and 'float'`
### **Root Cause:**
When a lead is moved to a won stage, `_get_rainbowman_message` is called and computes the values for `max_{team,user}_{31,7}`. However, when the lead spans different years, the condition of SQL query at [1] fails(because 2025 != 2026) due to which SQL query return null from the MAX() Function. As a result, subsequent comparisons at [2] fail, raising an Error.
### **FIX:**
Introduce small helper method(`_is_lower_than_expected_revenue`) to ensure comparisons
across different years only happen when we have meaningful numeric values.
[1]- https://github.com/odoo/odoo/blob/fb4e08fe46c0e1865e30b0ce1eb5f4436438ea03/addons/crm/models/crm_lead.py#L1218
[2]- https://github.com/odoo/odoo/blob/fb4e08fe46c0e1865e30b0ce1eb5f4436438ea03/addons/crm/models/crm_lead.py#L1232
**opw-5484887**
**sentry-7026119584**
Forward-Port-Of: odoo/odoo#244938This update allows branch companies to see and use contacts belonging to their parent company when creating invoices or vendor bills. Previously, branch companies were restricted from selecting these contacts. This change ensures seamless multi-company operations and improves workflow efficiency.
Original PR description
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills. ### **Steps to reproduce:** 1) Create a…
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills.
### **Steps to reproduce:**
1) Create a multi-company hierarchy (Company A -> Branch B).
2) Create a contact owned by Company A.
3) Switch the current company to Branch B.
4) Go to Accounting > Customers > Invoices and create a new invoice.
5) Try to select the contact created in step 2.
### **Current/Buggy Behavior:**
The contact does not appear in the search results.
### **Expected Behavior:**
The contact should be selectable.
### **Root Cause:**
since commit https://github.com/odoo/odoo/commit/67169c42061cb51bc68f6c74f0674a670dd04f58,
the partner model supports the standard
`check_company=True` mechanism, and record rules were updated to allow
branches to access partners of their parent company.
However, the `partner_id` field on the `account.move` form view still
retained a explicit domain: `[('company_id', 'in', (False,
company_id))]` as shown at [1].
This domain overrides the standard `check_company` behavior.
due to which it restricts the selection to partners owned by the current company
(the branch) or partners with no company set. It explicitly excludes
partners owned by the parent company.
### **Fix:**
Remove the domain at [1],
This allows the field to rely on the standard `check_company=True`
logic, which correctly handles the multi-company hierarchy and allows
branches to select parent company partners.
[1]- https://github.com/odoo/odoo/blob/6b7b83449739932aa8420ef8fcd888116e3c0f8a/addons/account/views/account_move_views.xml#L896
**opw-5484611**
Forward-Port-Of: odoo/odoo#244671This update resolves a visual issue affecting course cards on the website. Previously, descriptions containing links caused layout problems due to an incorrect assumption about HTML structure. This fix restores the original card design and ensures course cards display correctly, even when users include links in their descriptions.
Original PR description
This PR fixes an issue introduced by Commit[^1]. In Commit[^1], we decided to review the course card layout by removing the individual links that were wrapping the title, the cover image, and the…
This PR fixes an issue introduced by Commit[^1]. In Commit[^1], we decided to review the course card layout by removing the individual links that were wrapping the title, the cover image, and the description. | 19.0 and above | This PR | |--------|--------| | <img width="333" height="392" alt="image" src="https://github.com/user-attachments/assets/3dce73b3-0ce9-486e-b1de-f88a74e52e05" /> | <img width="313" height="381" alt="image" src="https://github.com/user-attachments/assets/25d75970-7f55-4967-87ba-3ecf5710835d" /> | #### Steps to reproduce: 1. Go to `website_slides` 2. Create a new course 3. Go to the description tab 4. Insert a link in the description and save 5. Go to the frontend to see the courses list 6. Course cards with a description containing a link are visually broken. While this looked like an improvement because it simplified the DOM, it was done with the assumption that the course card could not contain another link. This is, of course, not the case, as the description field is editable by the user and can therefore contain a link. Because this is not valid HTML, the layout removes all nested links and renders them separately. Since all the classes related to the card design are applied to that `<a>` tag, all links are rendered with a border and other styling. This PR fixes the issue by reassigning all the card styles to the card container. We then reassign each property to the corresponding element, adapt the styles to mimic the original card design, and hide extra links that are rendered empty. This should at least fix the layout for users. [^1]: https://github.com/odoo/odoo/commit/f632b8a9e74a050288e3ec75a4f49ae3ecb551d6 task-5957910 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249969
This update resolves an issue where the search filter wasn't functioning correctly for users on iOS devices using the on-screen keyboard (IME). The fix reverts a previous change that caused this problem. This ensures that the search functionality works reliably for all Odoo users on iOS.
Original PR description
This reverts commit 2ff4e7b12b66a2d973f285006e6676e49087ca7d. Search filter doesn't work for iOS users. A new fix has to be found. opw-5966697 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#250494
This update resolves an issue where the HTML editor component was crashing due to aggressive sanitization by DOMPurify. The fix involves temporarily encoding and decoding values within the editor's data attributes to avoid conflicts with the sanitization process. This ensures the editor functions correctly without compromising security.
Original PR description
Prior to this commit, since DOMPurify v3.1.2 (and more precisely since usage of v3.1.5 in Odoo), the JS sanitization process aggressively removes html attributes with `-->`, `<style` and `<title` for…
Prior to this commit, since DOMPurify v3.1.2 (and more precisely since usage of v3.1.5 in Odoo), the JS sanitization process aggressively removes html attributes with `-->`, `<style` and `<title` for security reasons (see [1]). However `html_editor` embedded components use `data-attributes` (`data-embedded-props` and `data-embedded-state`) to store various kind of data as a JSON string. Obviously, such JSON strings easily match the DOMPurify regex and these attributes are therefore removed, which results in an Editor crash. There are multiple reasons why such values are acceptable as is for the `html_editor` usage: - only `HTMLElement` instances are sanitized, never a string, therefore there is no `DOMParser` to trick with invalid HTML. - values in these attributes are always/exclusively parsed as JSON strings, and the editor will crash if the value is not a legit JSON. - values in these attributes are HTML escaped by the python sanitizer when the serialized html is sent to the server. - values in the JSON parsed object are at worst rendered as plain text (never as HTML or other parsed formats). - values in the JSON parsed object are never executed as JS (only serializable primitives are stored). Therefore, the suggested solution is to encode the values during sanitization, and decode just after, to keep the rest of the codebase simple and explicit. [1]: https://mizu.re/post/exploring-the-dompurify-library-hunting-for-misconfigurations#dompurify-gt-3.1.2-safe-for-xml task-5960707 Forward-Port-Of: odoo/odoo#250475 Forward-Port-Of: odoo/odoo#250210
This update fixes a potential issue in the website's page checking process. Removing the reliance on the `request` object within the `check_existing_page` function enhances stability and prevents errors. This change ensures the website operates more reliably.
Original PR description
The `request` global object should not be used from models, as it may be invalid. This commit remove its uses from the method `check_exsiting_page` that was introduced in commit 45e15673a70cf770d8e343a0a3b805eccdbed0d1. task-5888297 Forward-Port-Of: odoo/odoo#246153
This update resolves an error that occurred when employees had multiple leave types assigned. The fix ensures the holiday attest calculation accurately processes all allocated leave time, preventing errors during payroll computations. This improves the reliability of holiday pay reporting.
Original PR description
Bug : - allocate multiple leave types to an employee - lay off the employee -access the holiday attest wizard and try to compute holiday attest and you'll see a traceback Reason : - time_off_allocated and time_off_taken were expecting to find exactly one line of "Legal Time Off". Receiving multiple caused an Error. Fix : FIxing the logic by taking all the available lines and summing there values. task - 5461268 Forward-Port-Of: odoo/enterprise#107673
This update prevents users from attempting to edit applicant properties when a job isn't associated. Previously, a confusing error message would appear. This change ensures a smoother user experience by hiding the editing option when it's not applicable, improving data consistency.
Original PR description
# How to reproduce - Go to the Talen Pool sub-menu of the recuitment app - Create a new Talent - Click on the cog button, then on "Edit Properties" # The problem A not very descriptive error message…
# How to reproduce - Go to the Talen Pool sub-menu of the recuitment app - Create a new Talent - Click on the cog button, then on "Edit Properties" # The problem A not very descriptive error message is displayed # Why The hr.applicant model has a Properties field that allows the edition of its properties directly in the UI. This field needs to be linked to a PropertiesDefintion field in another model. In our case, that definition is in the hr.job model linked to the hr.applicant model via the field job_id. To be able to edit the properties of the hr.applicant model, it needs to be linked to a job, which is not always the case. A fix was made in master to allow the edition of properties even when there is no job_id (https://github.com/odoo/odoo/commit/99aa75bc64ee8898a0815163603e5861c35b0b94) but that fix is not applicable to a stable version. The fix I implemented instead hides the button when editing the properties would fail. opw-5932666 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248691
This update fixes a potential crash in Odoo's subscription invoicing process. Previously, invoices with mixed standard products and timesheet services could fail if the timesheet had zero delivered quantity. The fix adds a safeguard to skip invoice lines without sale order links, ensuring invoices can be generated correctly regardless of timesheet status.
Original PR description
…n invoicing **Issue:** When generating an invoice for a subscription that contains a mix of regular products (invoiced on order) and timesheet-based services (invoiced on delivery), a traceback can…
…n invoicing **Issue:** When generating an invoice for a subscription that contains a mix of regular products (invoiced on order) and timesheet-based services (invoiced on delivery), a traceback can occur if the timesheet service has 0 delivered quantity. **Cause:** During the invoice creation process, `_get_reinvoiced_analytic_lines_to_link` iterates over the newly created invoice lines to link analytic lines. It filters the linked sale order lines using `_is_line_reinvoicable()`. If the invoice only contains standard products (because the timesheet line was skipped due to 0 delivery), `so_lines` evaluates to an empty recordset. Passing an empty recordset into `_analytic_line_domain_get_invoiced_lines()` results in a traceback when evaluating the domain. **Fix:** Added a safeguard (`if not so_lines: continue`) inside the loop. If an invoice line does not contain any reinvoicable sale order lines, it is now safely skipped, allowing standard subscription lines to be invoiced alongside undelivered timesheet lines without crashing. task: 5966725
This update resolves a problem where products weren't loading correctly when switching between companies in the Point of Sale (POS) loyalty system. The fix prevents errors when a product is restricted to a specific company, ensuring all products are loaded as expected. This improves the reliability of the POS loyalty functionality.
Original PR description
Step to reproduce - install `pos_loyalty` and have two companies - for this record: `loyalty.gift_card_product_50` set company_id = company1 - switch to company b and start pos Observation: - no products are loaded Cause: - `browse()` was used to load records `gift_card_product_50` and `ewallet_product_50` - when any of them is restricted on one company it fails to load whole model Fix: - Instead of directly loading them, we use `search()` to avoid `AccessError` so that rest of the products can be loaded. - Gift card is still not shown as expected opw-5449466 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244912
This update resolves an issue where users with limited accounting access (read-only) were encountering errors when viewing invoices or partner details. The change ensures that certain data fields are only displayed to users who have the necessary permissions, improving stability and usability.
Original PR description
User with "read-only" access to accounting will trigger an error if they try to open an invoice or partner due to field addenda_ids. This commit aims to render this field only if the have the right to fetch it. opw-5931178 opw-5954244 Forward-Port-Of: odoo/enterprise#108332
This update prevents a crash in the payroll system that occurred when employee records lacked contract dates. The fix ensures that necessary contract date fields are populated before payroll warnings are calculated, improving the system's stability and reliability for employee data processing.
Original PR description
This commit fixes a traceback that occurred when an `hr.employee` record had no `contract_date_start` or `contract_date_end` defined, while payroll warnings depending on those fields were present. Since `warning_date` is computed based on the contract dates, the absence of the relevant field caused a crash. We now ensure that `contract_date_start` and `contract_date_end` are set before computing `warning_date` with either one. TaskID-5944876
This update resolves an issue preventing the demonstration of the new ‘planning_field_service_sale_timesheet’ feature within the Odoo Enterprise system. The change ensures the demo accurately reflects the functionality, allowing users to better understand and utilize this new tool for managing service-based sales timesheets. This improves the overall user experience and training materials.
19 changes
Resolved issues and error corrections
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction in accessing related stock data. The fix adds a permission group to allow helpdesk users to read the necessary stock information, ensuring they can properly access and manage tickets.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update resolves an issue that prevented users from moving leads won in previous years to current-year 'won' stages. The fix ensures accurate calculations when leads span multiple years, preventing a technical error. This improves the reliability of lead management within the CRM.
Original PR description
Currently, a traceback occurs when a lead won in a previous year is moved to another won stage in the current year. ### **Steps to Reproduce:** 1) Install CRM without demo data. 2) From the…
Currently, a traceback occurs when a lead won in a previous year is moved to another won stage in the current year.
### **Steps to Reproduce:**
1) Install CRM without demo data.
2) From the `CRM>Configuration>Stages` make `new` stage as **'won'** stage.
3) Create a lead with dated in the past (e.g., 30-12-2025 by changing system date)
and with some expected_revenue.
4) Change the system date to today and move the lead to the Won stage.
Ref Video: https://drive.google.com/file/d/18OCQ4Tl6Co_oh28XNag3qjxMkXJNSMOh/view?usp=sharing
### **Error:**
`TypeError: '<' not supported between instances of 'NoneType' and 'float'`
### **Root Cause:**
When a lead is moved to a won stage, `_get_rainbowman_message` is called and computes the values for `max_{team,user}_{31,7}`. However, when the lead spans different years, the condition of SQL query at [1] fails(because 2025 != 2026) due to which SQL query return null from the MAX() Function. As a result, subsequent comparisons at [2] fail, raising an Error.
### **FIX:**
Introduce small helper method(`_is_lower_than_expected_revenue`) to ensure comparisons
across different years only happen when we have meaningful numeric values.
[1]- https://github.com/odoo/odoo/blob/fb4e08fe46c0e1865e30b0ce1eb5f4436438ea03/addons/crm/models/crm_lead.py#L1218
[2]- https://github.com/odoo/odoo/blob/fb4e08fe46c0e1865e30b0ce1eb5f4436438ea03/addons/crm/models/crm_lead.py#L1232
**opw-5484887**
**sentry-7026119584**
Forward-Port-Of: odoo/odoo#244938This update allows branch companies to see and use contacts belonging to their parent company when creating invoices or vendor bills. Previously, branch companies were restricted from selecting these contacts. This change resolves a technical issue related to how company affiliations were handled within the accounting module.
Original PR description
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills. ### **Steps to reproduce:** 1) Create a…
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills.
### **Steps to reproduce:**
1) Create a multi-company hierarchy (Company A -> Branch B).
2) Create a contact owned by Company A.
3) Switch the current company to Branch B.
4) Go to Accounting > Customers > Invoices and create a new invoice.
5) Try to select the contact created in step 2.
### **Current/Buggy Behavior:**
The contact does not appear in the search results.
### **Expected Behavior:**
The contact should be selectable.
### **Root Cause:**
since commit https://github.com/odoo/odoo/commit/67169c42061cb51bc68f6c74f0674a670dd04f58,
the partner model supports the standard
`check_company=True` mechanism, and record rules were updated to allow
branches to access partners of their parent company.
However, the `partner_id` field on the `account.move` form view still
retained a explicit domain: `[('company_id', 'in', (False,
company_id))]` as shown at [1].
This domain overrides the standard `check_company` behavior.
due to which it restricts the selection to partners owned by the current company
(the branch) or partners with no company set. It explicitly excludes
partners owned by the parent company.
### **Fix:**
Remove the domain at [1],
This allows the field to rely on the standard `check_company=True`
logic, which correctly handles the multi-company hierarchy and allows
branches to select parent company partners.
[1]- https://github.com/odoo/odoo/blob/6b7b83449739932aa8420ef8fcd888116e3c0f8a/addons/account/views/account_move_views.xml#L896
**opw-5484611**
Forward-Port-Of: odoo/odoo#244671This update resolves a visual problem with course cards on the website. Previously, descriptions containing links caused the card layout to break. The fix reassigns styling to the card container, ensuring correct rendering of course cards with links in the description.
Original PR description
This PR fixes an issue introduced by Commit[^1]. In Commit[^1], we decided to review the course card layout by removing the individual links that were wrapping the title, the cover image, and the…
This PR fixes an issue introduced by Commit[^1]. In Commit[^1], we decided to review the course card layout by removing the individual links that were wrapping the title, the cover image, and the description. | 19.0 and above | This PR | |--------|--------| | <img width="333" height="392" alt="image" src="https://github.com/user-attachments/assets/3dce73b3-0ce9-486e-b1de-f88a74e52e05" /> | <img width="313" height="381" alt="image" src="https://github.com/user-attachments/assets/25d75970-7f55-4967-87ba-3ecf5710835d" /> | #### Steps to reproduce: 1. Go to `website_slides` 2. Create a new course 3. Go to the description tab 4. Insert a link in the description and save 5. Go to the frontend to see the courses list 6. Course cards with a description containing a link are visually broken. While this looked like an improvement because it simplified the DOM, it was done with the assumption that the course card could not contain another link. This is, of course, not the case, as the description field is editable by the user and can therefore contain a link. Because this is not valid HTML, the layout removes all nested links and renders them separately. Since all the classes related to the card design are applied to that `<a>` tag, all links are rendered with a border and other styling. This PR fixes the issue by reassigning all the card styles to the card container. We then reassign each property to the corresponding element, adapt the styles to mimic the original card design, and hide extra links that are rendered empty. This should at least fix the layout for users. [^1]: https://github.com/odoo/odoo/commit/f632b8a9e74a050288e3ec75a4f49ae3ecb551d6 task-5957910 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249969
This update resolves a problem where the search filter wasn't working correctly for users on iOS devices using the on-screen keyboard. The fix reverts a previous change that introduced this issue, ensuring the search functionality is reliable for all users, including those on iPhone and iPad.
Original PR description
This reverts commit 2ff4e7b12b66a2d973f285006e6676e49087ca7d. Search filter doesn't work for iOS users. A new fix has to be found. opw-5966697 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#250494
This update resolves a crash in the HTML Editor component caused by overly aggressive sanitization of data attributes. The fix involves temporarily encoding and decoding these attributes during sanitization to prevent removal, ensuring the editor functions correctly. This improves stability and prevents disruptions to users.
Original PR description
Prior to this commit, since DOMPurify v3.1.2 (and more precisely since usage of v3.1.5 in Odoo), the JS sanitization process aggressively removes html attributes with `-->`, `<style` and `<title` for…
Prior to this commit, since DOMPurify v3.1.2 (and more precisely since usage of v3.1.5 in Odoo), the JS sanitization process aggressively removes html attributes with `-->`, `<style` and `<title` for security reasons (see [1]). However `html_editor` embedded components use `data-attributes` (`data-embedded-props` and `data-embedded-state`) to store various kind of data as a JSON string. Obviously, such JSON strings easily match the DOMPurify regex and these attributes are therefore removed, which results in an Editor crash. There are multiple reasons why such values are acceptable as is for the `html_editor` usage: - only `HTMLElement` instances are sanitized, never a string, therefore there is no `DOMParser` to trick with invalid HTML. - values in these attributes are always/exclusively parsed as JSON strings, and the editor will crash if the value is not a legit JSON. - values in these attributes are HTML escaped by the python sanitizer when the serialized html is sent to the server. - values in the JSON parsed object are at worst rendered as plain text (never as HTML or other parsed formats). - values in the JSON parsed object are never executed as JS (only serializable primitives are stored). Therefore, the suggested solution is to encode the values during sanitization, and decode just after, to keep the rest of the codebase simple and explicit. [1]: https://mizu.re/post/exploring-the-dompurify-library-hunting-for-misconfigurations#dompurify-gt-3.1.2-safe-for-xml task-5960707 Forward-Port-Of: odoo/odoo#250475 Forward-Port-Of: odoo/odoo#250210
This update resolves a potential instability issue in the website by removing the use of the `request` object within a key function. Using `request` from models can lead to errors, and this change ensures the website operates more reliably. This is a routine maintenance fix.
Original PR description
The `request` global object should not be used from models, as it may be invalid. This commit remove its uses from the method `check_exsiting_page` that was introduced in commit 45e15673a70cf770d8e343a0a3b805eccdbed0d1. task-5888297 Forward-Port-Of: odoo/odoo#246153
This update prevents users from attempting to edit applicant properties when a job isn't associated. Previously, a confusing error message appeared. This change ensures a smoother user experience by hiding the edit button when a job ID is missing, improving data consistency.
Original PR description
# How to reproduce - Go to the Talen Pool sub-menu of the recuitment app - Create a new Talent - Click on the cog button, then on "Edit Properties" # The problem A not very descriptive error message…
# How to reproduce - Go to the Talen Pool sub-menu of the recuitment app - Create a new Talent - Click on the cog button, then on "Edit Properties" # The problem A not very descriptive error message is displayed # Why The hr.applicant model has a Properties field that allows the edition of its properties directly in the UI. This field needs to be linked to a PropertiesDefintion field in another model. In our case, that definition is in the hr.job model linked to the hr.applicant model via the field job_id. To be able to edit the properties of the hr.applicant model, it needs to be linked to a job, which is not always the case. A fix was made in master to allow the edition of properties even when there is no job_id (https://github.com/odoo/odoo/commit/99aa75bc64ee8898a0815163603e5861c35b0b94) but that fix is not applicable to a stable version. The fix I implemented instead hides the button when editing the properties would fail. opw-5932666 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248691
This update fixes a problem where multiple serial numbers generated during subcontracting weren't correctly displayed in the 'Move' detail operations. By ensuring each move line is linked to the receipt picking, the system now accurately shows all produced items, improving transparency and traceability for users. This enhances the overall efficiency of subcontracting processes.
Original PR description
*: mrp_subcontracting Issue: --------------------------------- When subcontracting a lot/serial-tracked product and generating multiple subcontracting MOs by generating SN numbers or the "Create New…
*: mrp_subcontracting Issue: --------------------------------- When subcontracting a lot/serial-tracked product and generating multiple subcontracting MOs by generating SN numbers or the "Create New Production" action, only the `first serial number line` appears in the "Move" detail operations smart button. Although all move lines are correctly created on the move, this behaviour is confusing for the user. Steps to reproduce: --------------------------------- 1. Install the `mrp_subcontracting_purchase` module. 2. Create a serial-tracked product and its subcontracting BoM. 3. Create a PO with a subcontracting vendor and a product quantity greater than 1. 4. Confirm the PO and validate the resupply. 5. Open the receipt and click on the "Subcontracting Production" smart button. 6. Generate serial numbers for the product. 7. Validate the receipt and open the "Move" detail operations smart button. 8. Only one line (the first serial number) is shown, while the move actually contains all move lines. Cause: --------------------------------- When serial numbers are generated from the subcontracting MO view, or when a new MO is created using the "Create New Production" action introduced in [PR](https://github.com/odoo/odoo/pull/218377), new move lines are created without setting the `picking_id`. As a result, these move lines are linked to the stock move but not directly to the picking. Since the "Move" detail operations smart button relies on the picking’s `move_line_ids`, the newly created move lines are not displayed. With this commit: --------------------------------- The `picking_id` is now set on newly created move lines. This ensures that all move lines are directly linked to the picking, allowing the "Move" detail operations smart button to display all serial/lot lines correctly and improving traceability for the user. And also When working with a subcontracting order, if the user opens the lot/serial number generation wizard from the subcontracting production and directly clicks 'Apply' without creating or assigning any lot/serial number, Odoo raises the following traceback: `IndexError: tuple index out of range` This issue has also been fixed here. Forward-Port-Of: odoo/odoo#243988
This update resolves an issue where users with limited accounting access (read-only) were encountering errors when viewing invoices or partner details. The change ensures that certain data fields are only displayed to users who have the necessary permissions, improving stability and usability.
Original PR description
User with "read-only" access to accounting will trigger an error if they try to open an invoice or partner due to field addenda_ids. This commit aims to render this field only if the have the right to fetch it. opw-5931178 opw-5954244 Forward-Port-Of: odoo/enterprise#108332
A small bug was fixed in the Timesheet grid view where the total overtime displayed in the month view was incorrectly labeled as 'Weekly Overtime'. This update now accurately shows 'Total Overtime', ensuring users see the correct cumulative overtime figures regardless of the time period selected.
Original PR description
### Issue: When displaying the month in the grid view and hovering the bottom right cell, where the total overtime is displayed, it shows "Weekly overtime". ### Steps to reproduce: - Open Timesheet app - In "My Timesheet", display the grid in day or month - Hover the bottom right cell - It displays "Weekly Overtime" ### Solution: Rename it to "Total overtime" to handle all periods (day, week, month). opw-5502864 Forward-Port-Of: odoo/enterprise#108480 Forward-Port-Of: odoo/enterprise#107642
This update fixes an issue where the 'Total' hours displayed in the Gantt view were incorrect for employees with calendars in non-UTC timezones. The change ensures that working hours are accurately calculated and displayed, regardless of the employee's timezone, improving planning accuracy.
Original PR description
### Issue: Having a calendar with a timezone different from utc and looking at the planning gantt view, the hours displayed in the "Total" row are wrong. ### Steps to reproduce: - Have an employee…
### Issue: Having a calendar with a timezone different from utc and looking at the planning gantt view, the hours displayed in the "Total" row are wrong. ### Steps to reproduce: - Have an employee with a calendar in "Europe/Brussels" and working from 8 to 17 - In planning add a line for this employee - Display the gantt view on a day - Create a shift for this employee from 8 to 17 - In the "Total" row, the first hour is not counted ### Cause: To compute the values displayed in the Total row, we take the intersection of the shift and the working hours from the calendar. ([src](https://github.com/odoo/enterprise/blob/2b887d094c66be7aebd92fbf735b1852f5dde4b5/planning/static/src/views/planning_gantt/planning_gantt_renderer.js#L318)) But the working hours from the calendar are given in UTC for this computation (without conversion), this result in a discrepancy between the actual hours of the calendar (with timezone conversion) and the one given to compute the total row. ### Solution: `resource_work_intervals()` returns the work intervals with the calendar hours and the resource timezone. In our case, only the hours are interesting (the previous code replaced the timezone by UTC). We need to convert them from the calendar timezone to UTC. So the first thing to do is remove the timezone from `resource_work_interval` then we localize it in the calendar timezone and to finish we convert it to UTC. opw-5564749 Forward-Port-Of: odoo/enterprise#106891
This update resolves a technical issue preventing the correct download of the AW timesheet application on Linux systems. The fix ensures that users can properly access and install the timesheet component, improving the overall user experience. This change focuses on internal technical improvements.
This update corrects a bug where internal users were incorrectly added as vendors when supplier invoices were received via email forwarding. This issue was causing problems with our OCR (Optical Character Recognition) process, which relies on accurate partner information. The fix ensures that invoices are correctly associated with the actual supplier, maintaining the integrity of the OCR workflow.
Original PR description
Currently we have an issue with OCR flow, where if internal users forward an email from an internal email address, the internal user is added as vendor Steps to reproduce: - Setup email alias for journal "Purchases" - From an internal user email, forward a supplier bill to the vendor bill alias Issue: If the supplier is not already a registered partner, the bill will be created with the internal user set as partner. This will break OCR flow where the missing document fields will be auto populated from the bill opw-5487368 Forward-Port-Of: odoo/odoo#246352
This update fixes a problem where users attempting to print resumes with incorrect templates received a generic error message. Now, when an invalid template is used, a detailed traceback is displayed, making it easier to identify and resolve the issue. This improves the user experience and streamlines troubleshooting.
Original PR description
Currently, when a user tries to print a resume with an invalid template there’s no traceback to show what went wrong. **Steps to produce:** * Install `hr` with demo data * Modify the view…
Currently, when a user tries to print a resume with an invalid template there’s no traceback to show what went wrong. **Steps to produce:** * Install `hr` with demo data * Modify the view `report_employee_cv` by adding `<div t-if=o.no/>` * Print resume of any employee **Observed Behavior:** Currently it only shows the error in [1], with no context or traceback to explain what went wrong. **Root cause:** * This happens because the route doesn’t include the website parameter. Without it, the system treats the route as non–front end [2], so the error handler never reaches [3].That means [4] never loads the templates [5], and the browser just gets a plain response at [6]. **Solution:** * Catching and raising UserError shows appropriate traceback. **Before:** <img width="1606" height="796" alt="image" src="https://github.com/user-attachments/assets/d5432fbf-d016-46a9-bade-8e8408848c66" /> **After:** <img width="1832" height="928" alt="image" src="https://github.com/user-attachments/assets/6f0413ca-a82a-487d-888f-81be6f0fab03" /> [1]: https://drive.google.com/file/d/1qJLkFGw4bEclqKihdUI-4bjJofdFArEc/view?usp=sharing [2]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L386 [3]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L611 [4]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L573-L576 [5]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/views/http_routing_template.xml#L139 [6]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L575 Related: https://github.com/odoo/enterprise/pull/100142 opw-5167898 Forward-Port-Of: odoo/odoo#250286 Forward-Port-Of: odoo/odoo#237262
This update fixes a problem where users received a generic error message when trying to print invalid PDF reports. Now, when an error occurs, a detailed traceback is displayed, making it easier to identify and resolve the issue with the document layout. This improves the user experience and troubleshooting process.
Original PR description
Currently, when a user tries to print a PDF report with an invalid document layout template, there’s no traceback to show what went wrong. **Steps to produce:** * Install payroll with demo data. *…
Currently, when a user tries to print a PDF report with an invalid document layout template, there’s no traceback to show what went wrong. **Steps to produce:** * Install payroll with demo data. * Settings > Configure Document Layout then Edit Layout * Add non-existent field `<div t-if='o.no'/>` * Payroll > All payslips > print any payslip **Observed Behavior:** * Currently it only shows the error in [1], with no context or traceback to explain what went wrong. **Root cause:** * This happens because the route doesn’t include the website parameter. Without it, the system treats the route as non–front end [2], so the error handler never reaches [3].That means [4] never loads the templates [5], and the browser just gets a plain response at [6]. **Solution:** * Catching and raising UserError shows appropriate traceback. **Before:** <img width="1601" height="507" alt="image" src="https://github.com/user-attachments/assets/f7f208f0-cdd7-410e-87e7-32a9651df9d8" /> **After:** <img width="1847" height="928" alt="image" src="https://github.com/user-attachments/assets/c73522d6-2632-422b-b1d1-234e6c61ed2e" /> [1]: https://drive.google.com/file/d/1qJLkFGw4bEclqKihdUI-4bjJofdFArEc/view?usp=sharing [2]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L386 [3]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L611 [4]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L573-L576 [5]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/views/http_routing_template.xml#L139 [6]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L575 Related:https://github.com/odoo/odoo/pull/237262 opw-5167898 Forward-Port-Of: odoo/enterprise#108438 Forward-Port-Of: odoo/enterprise#100142
This update fixes an issue where the 'Call Settings' header in chat windows was visually obscured due to a missing background color. The fix ensures the header remains properly positioned and readable, preventing overlapping text and improving the user experience. This resolves a minor visual inconsistency.
Original PR description
Before this commit, when opening the "Call Settings" in a chat window, the header of the action panel was missing a background color. Because of this, when scrolling down, the Action panel title was floating above the content and the text was overlapping, making it hard to read. This comes from `.bg-inherit` that requires the parented chain to rigorously have `.bg-inherit` too until reaching an actual bg color. In this case, one parent container lacked it, which is what this commit fixes. Task-5867464 (point 84) Before / After <img width="382" height="465" alt="Screenshot 2026-02-24 at 16 06 32" src="https://github.com/user-attachments/assets/f5c4a309-c60a-4e9b-bef0-06ee7ba731b8" /> <img width="386" height="468" alt="Screenshot 2026-02-24 at 16 06 18" src="https://github.com/user-attachments/assets/fea35f8f-2a76-4c40-b51e-28dbfce3a281" /> Forward-Port-Of: odoo/odoo#250398
This update fixes a technical issue related to invoice generation when using BIS3 files for B2C transactions. Previously, R010/R020 checks were performed unnecessarily. Now, these checks only occur when PEPPOL is enabled, ensuring accurate invoice processing for all transaction types.
Original PR description
…peppol checked Some people are using BIS3 files even for B2C. They give the xml files to the accountant for him/her to import the file and generate the invoice in the accounting software. In that case, since it's a B2C transaction, the EndpointId might not be set but that's ok since it's only used to generate the invoice. opw-5952109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249751
This update corrects a bug where the total hours displayed in the planning Gantt view were inaccurate due to timezone discrepancies. The fix ensures that shift durations are calculated correctly, regardless of the employee's timezone, providing more reliable planning data. This improves the accuracy of time tracking and scheduling.
Original PR description
Description: ----------- When viewing planning shifts in the gantt view, the total hours column displayed wrong totals due to timezone misalignment in work interval calculations. Steps to reproduce:…
Description: ----------- When viewing planning shifts in the gantt view, the total hours column displayed wrong totals due to timezone misalignment in work interval calculations. Steps to reproduce: ------------------- 1. Create an employee with a fixed working schedule (e.g., 8am-12pm, 1pm-5pm with 1-hour lunch break) 2. Ensure the employee's timezone differs from UTC (e.g., Europe/Brussels UTC+1) 3. Create a shift for this employee covering their full working day (8am-5pm) 4. Open the planning gantt view and check the total hours column for that day 5. Expected: 8 hours total | Actual: 7 hours total (with hours misaligned by timezone offset) Root Cause: ----------- In version 19.0, `_gantt_progress_bar_resource_id` used `.replace(tzinfo=pytz.UTC)` when building work intervals, which only changes the timezone label without converting the actual time values. This caused a timezone offset mismatch in the frontend's hour-by-hour comparison. Solution: --------- Replace `.replace(tzinfo=pytz.UTC)` with `.astimezone(pytz.UTC)` to properly convert datetime values to UTC before sending to the frontend. opw-5190244 Forward-Port-Of: odoo/enterprise#104185
4 changes
Resolved issues and error corrections
This update fixes an issue where the names of Ecuadorian invoicing regimes didn't comply with government regulations. The changes ensure that all invoice data sent to the Ecuadorian tax authority (SRI) uses the correct, officially mandated terminology. This ensures compliance and avoids potential delays or errors in invoice processing.
Original PR description
[FIX] l10n_ec_edi: fiscal localizations name The name of the regimes for the Ecuadorian localization does not respect the government requirements Steps to reproduce: 1. Install l10n_ec_edi module 2. Go to Settings > Invoicing > Ecuadorian Localization 3. In Electronic Invoicing > Regime, the names of the regimes do not respect government requirements Solution: Change the name of the fiscal localizations to respect the requirements Add a computed field used to map the name of the regime to the technical name of the regime used in SRI documents We write them in Spanish because we always want the name of the regime to be in Spanish in the XML invoice sent to the government, even if the user didn't install any other language. opw-5221871 Forward-Port-Of: odoo/enterprise#105914
This update fixes an issue in the barcode picking interface where adding multiple extra products triggered a disruptive confirmation dialog repeatedly. Now, the dialog opens only once and allows users to easily select and deselect extra products before confirming, streamlining the process and reducing user frustration.
Original PR description
When adding extra products in the barcode picking interface, the confirmation dialog did not handle correctly the scan of multiple extra items. Before: Scanning multiple extra products successively opened (mutex + promise) the dialog multiple times. The user had to confirm/cancel each extra product addition one by one. After: The dialog is now only opened once and updated when scanning multiple extra products before confirming. The user can select/deselect the extra products to add before validating. [opw-5193269](https://www.odoo.com/odoo/project/49/tasks/5193269) Forward-Port-Of: odoo/enterprise#107932 Forward-Port-Of: odoo/enterprise#104932
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction in accessing related stock data. The fix adds a permission group to allow helpdesk users to read the necessary stock information, ensuring they can properly access and manage tickets. This improves usability for helpdesk staff.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update fixes a bug where deleting a partially signed offer would incorrectly delete the associated employee. The fix ensures the employee is only deleted when archived and without other active offers, preventing data loss and maintaining accurate employee records. This improves data integrity and user experience.
Original PR description
Version – saas-18.4 ### Issue: When an applicant has both a partially signed offer and a fully signed offer, deleting the partially signed one also deletes the employee that was created from the fully signed offer. ### Steps to Reproduce: - Create two offers for an applicant. - Fully sign the first offer and partially sign the second one. - Delete the partially signed offer. The employee created from the fully signed offer is also deleted. ### Cause: Due to this issue, the employee record is incorrectly deleted from the system, which is not expected behavior. ### Fix: Improved the employee deletion logic by deleting the employee only when: - the employee is archived, and - they do not have any other offers besides the one being deleted. ### Impact: The employee will no longer be deleted when another partially signed offer for the same applicant is removed. --- Task – 5347109
6 changes
Resolved issues and error corrections
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction on accessing related stock records. The fix adds a permission group to allow helpdesk users to read the necessary stock information, ensuring they can properly access and manage tickets.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update allows branch companies to correctly see and use contacts belonging to their parent company when creating invoices or vendor bills. Previously, a branch company couldn't access these contacts due to a technical restriction. This fix ensures seamless multi-company operations.
Original PR description
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills. ### **Steps to reproduce:** 1) Create a…
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills.
### **Steps to reproduce:**
1) Create a multi-company hierarchy (Company A -> Branch B).
2) Create a contact owned by Company A.
3) Switch the current company to Branch B.
4) Go to Accounting > Customers > Invoices and create a new invoice.
5) Try to select the contact created in step 2.
### **Current/Buggy Behavior:**
The contact does not appear in the search results.
### **Expected Behavior:**
The contact should be selectable.
### **Root Cause:**
since commit https://github.com/odoo/odoo/commit/67169c42061cb51bc68f6c74f0674a670dd04f58,
the partner model supports the standard
`check_company=True` mechanism, and record rules were updated to allow
branches to access partners of their parent company.
However, the `partner_id` field on the `account.move` form view still
retained a explicit domain: `[('company_id', 'in', (False,
company_id))]` as shown at [1].
This domain overrides the standard `check_company` behavior.
due to which it restricts the selection to partners owned by the current company
(the branch) or partners with no company set. It explicitly excludes
partners owned by the parent company.
### **Fix:**
Remove the domain at [1],
This allows the field to rely on the standard `check_company=True`
logic, which correctly handles the multi-company hierarchy and allows
branches to select parent company partners.
[1]- https://github.com/odoo/odoo/blob/6b7b83449739932aa8420ef8fcd888116e3c0f8a/addons/account/views/account_move_views.xml#L896
**opw-5484611**
Forward-Port-Of: odoo/odoo#244671This update fixes an issue where POS receipts incorrectly showed the standard 21% tax label, even when a fiscal position (like 6%) was applied. The fix ensures that the POS receipt accurately reflects the tax rate based on the selected fiscal position, improving accuracy and compliance.
Original PR description
Steps: - Install l10n_be_pos_restaurant. - Create a restaurant POS configuration with presets. - Assign a fiscal position to one preset that replaces 21% tax with 6%. - Open a POS session and process an order using that preset. Issue: - The POS receipt still displays the 21% tax's tax group label, even though the 6% tax is correctly applied. Cause: - Fiscal position was not taken into account when computing the tax group label for POS receipt orderlines. Fix: - Apply the fiscal position when determining the POS receipt tax group label. Task-5899938 Forward-Port-Of: odoo/odoo#248571
This update resolves an issue preventing the export of BOE reports when using multi-company mode with companies having different VATs. The fix ensures the report options correctly recognize all branch companies, allowing users to proceed with the export functionality. This improves the reliability of tax reporting.
Original PR description
**Steps to reproduce:** * Install the **l10n_es_reports** module. * Create a parent company with two branch companies with all has different VATs. * Enable **multi-company mode** with all companies selected. * Go to tax report `Mod 390` * From gear icon clck on `BOE`. **Observed behavior:** * A warning appears: Please select the main company and its branches in the company selector to proceed. * Not able to export BOE. **Cause:** * This is because the tax report's options only consider one of the two companies (because they have different VAT numbers). The button is not declared as branch_allowed, so when clicked, it checks whether all the companies of the branch hierachy are in the options => they're not => error. **Fix:** * Added the `'branch_allowed': True` to the `BOE` button options. opw-5891472
This update resolves an issue where products weren't automatically marked as 'published' when assigned to a category in the product editor. The fix ensures that category assignments correctly update the product's visibility status, preventing products from being incorrectly hidden. This improves the user experience and data accuracy.
Original PR description
Error: AssertionError: False is not true self.assertTrue(product.website_published) Cause: Commit https://github.com/odoo/odoo/commit/ca198cfc7c41a8c15b2734518016007aa1c16457 relies on _onchange_public_categ_ids to set website_published=True when a category is assigned. Two issues: 1. website_published was not in the dialog form view, so its onchange value was never tracked or sent to the server on save. 2. The tour clicks Save before the onchange response is received, so the product is saved without website_published=True. Fix: - Add website_published as an invisible field in the dialog form view so its value is tracked and sent on save. - Wait for the category badge to appear before submitting, ensuring the onchange has completed before save. runbot-237976 Forward-Port-Of: odoo/odoo#249027
This update fixes an issue where salary calculations for employees on attendance-based contracts were incorrect. The system now accurately determines hourly rates for various allowances by using the employee's planned working schedule instead of their recorded attendance hours, ensuring accurate payroll processing for this contract type.
Original PR description
Step to Reproduce: - install UAE Payroll localization and attendance - create employee and running employee contract and give basic salary, housing, transportation and other allowance. - work entry source should be attendance - create a payslip and compute sheet. Issue: - The values for payslip lines are not as expected. - The rate per hour for basic salary , housing, transportation and other allowances was being calculated based on employee's attendance work entries, not the planned working schedule. Reason: - When using attendance-based contracts, the hourly rates for basic salary, housing, transportation, and other allowances should be calculated based on the working schedule's hours per day, if a working schedule is available. Solution: - Instead of sum_worked_hours which takes working hours of employee's work entries, use total_number_of_days multiplied by the hours per day from the working schedule. task-5270185 Forward-Port-Of: odoo/enterprise#103282
3 changes
Resolved issues and error corrections
This update corrects a display issue in the Timesheet grid view. Previously, hovering over the total overtime cell showed 'Weekly Overtime' instead of the accurate 'Total Overtime'. The change ensures consistent and correct overtime calculations are shown across day, week, and month views.
Original PR description
### Issue: When displaying the month in the grid view and hovering the bottom right cell, where the total overtime is displayed, it shows "Weekly overtime". ### Steps to reproduce: - Open Timesheet app - In "My Timesheet", display the grid in day or month - Hover the bottom right cell - It displays "Weekly Overtime" ### Solution: Rename it to "Total overtime" to handle all periods (day, week, month). opw-5502864 Forward-Port-Of: odoo/enterprise#107642
This update fixes a problem where users received a generic error message when printing invalid PDF reports. Now, when an error occurs, a detailed traceback is displayed, making it easier to identify and resolve the issue with the report template. This ensures a smoother user experience when generating payroll reports.
Original PR description
Currently, when a user tries to print a PDF report with an invalid document layout template, there’s no traceback to show what went wrong. **Steps to produce:** * Install payroll with demo data. *…
Currently, when a user tries to print a PDF report with an invalid document layout template, there’s no traceback to show what went wrong. **Steps to produce:** * Install payroll with demo data. * Settings > Configure Document Layout then Edit Layout * Add non-existent field `<div t-if='o.no'/>` * Payroll > All payslips > print any payslip **Observed Behavior:** * Currently it only shows the error in [1], with no context or traceback to explain what went wrong. **Root cause:** * This happens because the route doesn’t include the website parameter. Without it, the system treats the route as non–front end [2], so the error handler never reaches [3].That means [4] never loads the templates [5], and the browser just gets a plain response at [6]. **Solution:** * Catching and raising UserError shows appropriate traceback. **Before:** <img width="1601" height="507" alt="image" src="https://github.com/user-attachments/assets/f7f208f0-cdd7-410e-87e7-32a9651df9d8" /> **After:** <img width="1847" height="928" alt="image" src="https://github.com/user-attachments/assets/c73522d6-2632-422b-b1d1-234e6c61ed2e" /> [1]: https://drive.google.com/file/d/1qJLkFGw4bEclqKihdUI-4bjJofdFArEc/view?usp=sharing [2]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L386 [3]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L611 [4]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L573-L576 [5]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/views/http_routing_template.xml#L139 [6]: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/http_routing/models/ir_http.py#L575 Related:https://github.com/odoo/odoo/pull/237262 opw-5167898 Forward-Port-Of: odoo/enterprise#100142
This change removes an unnecessary `div` wrapper from article body formatting. Previously, a technical detail in the code caused an extra HTML element to be added, increasing the complexity of article content. This fix ensures cleaner and more efficient HTML structure for articles, without impacting their display.
Original PR description
Prior to this commit, `_get_transformed_body_from` wrapped the source body in a `div` because `lxml.html.fragment_fromstring` is used with a `create_parent=True` argument. That argument is required because otherwise, the function throws an error if there are multiple root nodes in the parsed string, which is frequent in an article body. The final returned string still contained that additional `div` ancestor. This does not break an article per se, but repeated usage would increase the html structure depth by 1 every time, and that additional `div` was not part of the function desired transformations. task-5960616
25 changes
Resolved issues and error corrections
This update enhances the stability of performance tests within Odoo's HR modules (appointment_hr and hr_payroll). The changes address issues related to how data is prepared for testing, specifically around transaction management, resulting in more reliable test results. This improves the overall quality and confidence in these core HR functionalities.
Original PR description
https://github.com/odoo/odoo/pull/249309
This update simplifies how Odoo identifies part-time workers. Previously, a worker exceeding their contract hours was incorrectly categorized as part-time. This change clarifies the definition by using 'work_time_rate' to accurately reflect actual hours worked, improving payroll accuracy and reporting.
Original PR description
Previously , 'is_full_time' indicated just if the worker , has worked the exact amount in his contract or less , but it has a problem, for workers who worked more than there legal contract, They were also considered on Part Time. For the sake of simplicity and clarity, instead of adding a new field like "excess Time", it would be better to just precise the work_time_rate.
This update resolves a previous issue where automation flows involving moving documents and triggering subsequent actions often failed due to security restrictions. The change now allows actions to run seamlessly even after a document is moved, simplifying automation setup for users. The fix also removes a redundant security override, streamlining the system.
Original PR description
Prior to this commit, creating a multi-action that moved a document to a new folder and immediately triggered another action (e.g., "Create Invoice") often failed. This occurred because the security…
Prior to this commit, creating a multi-action that moved a document to a new folder and immediately triggered another action (e.g., "Create Invoice") often failed. This occurred because the security check required the sub-action to be explicitly embedded (pinned) on the *destination* folder. Since the record was moved during the process, the subsequent action failed the security check on the new folder where it wasn't pinned. This limitation caused confusion for users setting up automation flows, as the intent of the sequence (Move -> Action) was clear and initiated from a valid context (the source folder), but strict per-action security rules blocked execution. This commit improves the `ir.actions.server` execution logic to support this pattern by introducing a context-based security sentinel: 1. Entry Point Validation: When a Documents action (root) is triggered, the system enforces strict security: the action must be explicitly embedded on the record's current folder. 2. Context Inheritance: Once the root action is authorized and begins execution, it sets a secure sentinel in the context. 3. Trusted Execution: Any subsequent sub-actions (children) detect this sentinel and are allowed to run, regardless of the record's current folder location. This ensures that if a user has the right to start the process (the root action), they have the right to complete the defined sequence, even if intermediate steps move the record to a folder where the sub-actions are not explicitly pinned. As a result, the `_can_execute_action_on_records` override in `documents_account` is no longer necessary and has been removed. Tests have been extended in the `documents` and `documents_account` modules to cover these scenarios (using Tags in the `documents` module instead of Accounting-specific models to make the tests generic). A new test file `test_documents_ir_actions_server.py` was created to maintain a clean testing environment, covering nesting, move sequences, and RPC spoofing attempts. Task-5916630 Forward-Port-Of: odoo/enterprise#108204 Forward-Port-Of: odoo/enterprise#106702
This update resolves an issue where Odoo incorrectly defaulted to USD as the Stripe currency, causing potential blocking for EU companies with non-USD currencies. We've switched to EUR as the default, ensuring accurate Stripe integration and preventing disruptions for our European users. This change addresses previous support tickets (opw-5393508, opw-5913327, opw-5953025).
Original PR description
Right now, we need to guess the correct stripe currency for the stripe account depending on the country, we used the USD as an ultimate fallback But, the USD currency is easy to guess, where the EUR is way harder (it may not be the company currency). So, it is too error-prone to set the USD as the default fallback, and it can lead to EU companies being blocked as their stripe currency is the wrong one. We therefore switch it to EUR. opw-5393508 opw-5913327 opw-5953025 Forward-Port-Of: odoo/enterprise#108293
This update resolves a display issue in the employee offer screen for the Belgium payroll localization. The contract type field was incorrectly appearing due to a previous addition by the localization module. This fix removes the unnecessary field addition, ensuring the correct offer screen display.
Original PR description
Bug reproduction: Ensure that belgium payroll localization is not installed, go to offer of employee, contract type field is not there. Bug cause: Contract type field does not exist in the model, it was adding to the view by l10n_be_hr_payroll. Bug solution: I added new field contract_type_id to the hr_contract_salary_offer model (to show it on UI). Solved from 17.0 Note: I need to fix after version 19.0, because by starting from 19.0, the Belgium one will try to add the same field to the view again task - 5500488 Forward-Port-Of: odoo/enterprise#108179 Forward-Port-Of: odoo/enterprise#104578
This update fixes an issue where trial websites were sometimes created multiple times. The changes ensure that a trial website is always associated with the original website requesting it, streamlining the process and preventing unnecessary website creation. A new, more reliable method for generating trial websites has also been implemented.
Original PR description
Forward-Port-Of: odoo/enterprise#107320
This update addresses usability issues in the mobile version of the bank reconciliation widget. Specifically, the layout has been adjusted to better accommodate the smaller screen size, and some secondary buttons have been moved to a dropdown menu to optimize space. This enhances the user experience on mobile devices.
Original PR description
The mobile style on bank rec widget is a bit buggy, this commit adds few improvements: 1 - When in mobile view, chatter is shown on the right (like in desktop view), but the screen is way too tight to display both chatter and st_lines at the same time. Solution: Display the chatter at the bottom of the screen. 2 - If the screen is too tight to show 2 primary buttons (Example: Set Partner & Set Account), We remove the "Set " on the buttons label to save some space. 3 - In tablet view, we don't have enought place to show all the secondary buttons we are showing in desktop view. This commit removes the reco model secondary buttons. (Now accessible in the dropdown menu) task-5114831 Forward-Port-Of: odoo/enterprise#96103
This update improves the speed of changing order stages in the Point of Sale system. By separating customer display calculations and optimizing database queries, the process is now significantly faster, especially when multiple orders are being prepared. This enhances the user experience and overall system performance.
Original PR description
Before this commit when a lot of orders were in the preparation display and when clicking on an order to change its stage, it was very slow because we were doing the customer display computation directly. Now we compute customer display data in a separate RPC call, and we only call it when the customer display receives a notification of new orders, which makes the stage change much faster. The `_get_pos_orders` is updated to avoid an O(n²) loop; The `_get_open_orderlines_in_display` is updated to avoid deep joins. Forward-Port-Of: odoo/enterprise#108233 Forward-Port-Of: odoo/enterprise#107727
This update enhances how Odoo extracts amounts from bank statements (like CODA files). It now supports regex patterns that identify integer and fractional parts, allowing for accurate decimal amount recognition. This resolves an issue where amounts in cents were not correctly processed, improving the reliability of reconciliation processes.
Original PR description
Update the reconciliation logic of reco models to support regex patterns using named capture groups 'integer' and 'fraction'. This is specifically designed for cases where bank statement labels (like CODA files) provide amounts in cents i.e continuous string of digits without a decimal separator. The logic now: - Prioritizes 'integer' and 'fraction' named groups if present in the match. - Concatenates these groups with a decimal point to form a valid float. - Falls back to the standard digit extraction logic if named groups are not found. So now if user wants the amount to be extracted in decimal values from label then user needs to add regex which supports two groups 'integer' and 'fraction'. Community PR: odoo/odoo#242750 Task [link](https://www.odoo.com/odoo/project.task/5449413) Task-5449413 Forward-Port-Of: odoo/enterprise#108328 Forward-Port-Of: odoo/enterprise#103630
This update fixes issues with downloading Activitywatch, specifically adding a link for the Linux (Ubuntu) build and correcting the Windows link. It also improves how the system identifies the user's operating system, ensuring a smoother download experience.
Original PR description
This PR adds the download link for the Ubuntu build of activitywatch, fixes the windows link, and fixes the platform detection. Forward-Port-Of: odoo/enterprise#108079
This update resolves an error that prevented the generation of CFDI payslips in the Mexican payroll module. The fix updates a template reference to correctly display the employee's SSN, ensuring accurate payroll reporting. This change improves the reliability of the Mexican payroll functionality.
Original PR description
Steps to reproduce the issue: 1. Install the module `l10n_mx_hr_payroll_account_edi`. 2. Generate a payslip for an employee. 3. The following traceback is raised at the moment to click on "Generate…
Steps to reproduce the issue:
1. Install the module `l10n_mx_hr_payroll_account_edi`.
2. Generate a payslip for an employee.
3. The following traceback is raised at the moment to click on "Generate CFDI" button:
```py
File "/data/build/odoo/odoo/addons/base/models/ir_qweb.py", line 858, in _render_iterall raise
QWebError(qweb_error_info) from error odoo.addons.base.models.ir_qweb.QWebError: Error while rendering the
template: KeyError: 'l10n_mx_ssn' Template: l10n_mx_hr_payroll_account_edi.report_payslip_mx_cfdi Reference:
8166 Path: /t/t/div/t[2]/div[4]/table[2]/tbody/tr/td/div[5]/span[1]
Element: <span class="ms-1" t-field="o.version_id.l10n_mx_ssn"/>
```
---
To avoid moving the `l10n_mx_ssn` field from the `hr.employee` model to `hr.version`, the `t-field` in the template is updated to `o.employee_id.l10n_mx_ssn`.
This approach is valid because an employee's SSN rarely changes. If a modification is ever needed, it can be updated directly on the employee form, where the field is already tracked.
target: saas-19.2
task-5962423
Forward-Port-Of: odoo/enterprise#108398This update fixes a calculation error in the Belgian payroll system. Previously, meal vouchers and private car expenses were incorrectly reported with a quantity of zero on payslips. This change ensures accurate reporting of these benefits, aligning with Belgian regulations and providing correct financial data.
Original PR description
In this commit, we fixed the data of the existing Belgian structure types by setting the right work entry type as default_work_entry_type_id. Belgian's structure types should have the correct attendance work entry type to consider the meal vouchers and the private car in the benefits and payslip lines Before this change, the belgian payslips will have quantity 0 for meal vouchers and private car. After this change, the belgian payslips will have the correct quantity for both meal vouchers and private car. task-5946425 Forward-Port-Of: odoo/enterprise#108061
This update resolves an issue where sharing document templates with readonly fields caused errors. By separating validation logic and removing unnecessary security checks, the system now correctly handles shared template requests, ensuring seamless document sharing and collaboration. This improves the reliability of our document management features.
Original PR description
Currently, attempting to share a document template that contains readonly fields fails. When `_populate_constant_items` calls `_fill` to pre-fill these fields, `_fill` aggressively checks that the request state is 'sent'. Since shared links create requests in the 'shared' state, the transaction crashes. Additionally, `_fill` throws a `UserError` if not called with `sudo`, which inappropriately treats a developer/privilege error as an end-user error. This commit resolves the issue by separating concerns: - Moves the `state == 'sent'` validation out of the `_fill` helper and into `_sign` (the caller responsible for actual user signatures). - Removes the artificial `sudo` check in `_fill`, relying instead on standard ORM Access Errors to block unauthorized database writes. (only in master) Task: 5949263 Forward-Port-Of: odoo/enterprise#107898
This update resolves an issue related to the accurate reporting of cycle transportation declarations in Belgium's HR and payroll system. The changes ensure that tax calculations and reporting align with Belgian regulations, improving compliance and accuracy for businesses operating in Belgium.
Original PR description
Forward-Port-Of: odoo/enterprise#108173 Forward-Port-Of: odoo/enterprise#108069
This update fixes an issue where the names of Ecuadorian invoicing regimes didn't comply with government regulations. The changes ensure that all invoice data sent to the Ecuadorian tax authority (SRI) uses the correct, officially mandated terminology. This ensures compliance and avoids potential processing delays.
Original PR description
[FIX] l10n_ec_edi: fiscal localizations name The name of the regimes for the Ecuadorian localization does not respect the government requirements Steps to reproduce: 1. Install l10n_ec_edi module 2. Go to Settings > Invoicing > Ecuadorian Localization 3. In Electronic Invoicing > Regime, the names of the regimes do not respect government requirements Solution: Change the name of the fiscal localizations to respect the requirements Add a computed field used to map the name of the regime to the technical name of the regime used in SRI documents We write them in Spanish because we always want the name of the regime to be in Spanish in the XML invoice sent to the government, even if the user didn't install any other language. opw-5221871 Forward-Port-Of: odoo/enterprise#105914
This update reverses a recent change that was incorrectly removing accented characters from partner names used for Mexican VAT (EDI) processing. The system now correctly accepts the accented characters the user inputs, aligning with current SAT regulations. This ensures accurate processing and avoids blocking users from entering legally required name information.
Original PR description
An accent sanitization feature was introduced in Odoo 18 [1]. It was done because it appeared the SAT replaced certain characters with their unaccented counterpart, but it's not the case. At least…
An accent sanitization feature was introduced in Odoo 18 [1]. It was done because it appeared the SAT replaced certain characters with their unaccented counterpart, but it's not the case. At least today, the SAT allows all characters (pointed out in [2]). This explains why in the past 6 months this feature has been slowly undone [3][4][5], character by character, after customers run into issues. The approach can not work, so we go back to the name with the accents the user puts on the partner. Users need to put the correct, legally registered name in Odoo. If it doesn't work then they can adapt it as needed. This way the user is in full control, and we don't block them. This reverts the whole accent sanitization saga: - Revert "[FIX] l10n_mx_edi - More accented characters accepted by SAT", this reverts commit 46cc41ddd258e80372478a746ea79d154a5931d9. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit dcbd8797667b5be88f48045e48da86ac42db362c. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit 32b8333fd3f813ec3188394c2634129e3fbfe31d. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit 05ed1fb9059bd1459e38dc00b041cada6bf06ac4. This also removes the unused frozendict import to make "Check Style" happy. opw-5915515 [1] https://github.com/odoo/enterprise/pull/95207 [2] https://github.com/odoo/enterprise/pull/107960 [3] https://github.com/odoo/enterprise/pull/96043 [4] https://github.com/odoo/enterprise/pull/106557 [5] https://github.com/odoo/enterprise/pull/107677 Closes odoo/enterprise#107960 Forward-Port-Of: odoo/enterprise#108425 Forward-Port-Of: odoo/enterprise#108189
This update corrects a recent issue that prevented Invoicing and Banks users from accessing basic financial reports. The change restores the necessary permissions, ensuring these users can view critical reporting data without errors. This resolves a disruption to key business reporting functionality.
Original PR description
* Revert commit https://github.com/odoo/enterprise/commit/86c3c212bb79fbc2becac46f4d83b6f2fc381854 that introduced having Accounting features, menu items, and Account on invoice lines available for Invoicing users. * Allow Invoicing & Banks group to access basic reports * Backport missing access rights to properly open the reports without an access error. task-5925567 Forward-Port-Of: odoo/enterprise#108174 Forward-Port-Of: odoo/enterprise#107654
This update ensures that the order of selection options within Odoo Sign templates is preserved when saving. Previously, options were scrambled due to a technical issue in how the system processed selections. This change corrects the underlying code to maintain the user's intended order, improving data consistency.
Original PR description
Steps to reproduce: 1. Open a Sign template. 2. Drag a 'Selection' field onto the document. 3. In the popover, type options in a specific order (e.g., Delta, Alpha, Beta). 4. Click save. 5. Re-open or inspect the data 6. observe the order is scrambled based on Database ID. Cause: The Python method used `list(set())` which is an unordered collection, losing the user's input sequence. Furthermore, the final `search().ids` call returned records sorted by primary key (ID) rather than the provided list order. Solution: Replace `set()` with `dict.fromkeys()` to deduplicate while preserving input order. opw-5896373 Forward-Port-Of: odoo/enterprise#108380 Forward-Port-Of: odoo/enterprise#107175
This update fixes a discrepancy in how invoice reports are generated across different localization versions (e.g., EC, MX). The changes ensure that address information displayed on invoices is consistent with the latest requirements for each region, improving accuracy and compliance.
Original PR description
Adapted each localization report invoice inheritance on the changes to address block Forward-Port-Of: odoo/enterprise#108426
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction on accessing related stock records. The fix adds a necessary permission allowing helpdesk users to read ticket information, ensuring they can properly manage and access tickets. This improves usability for all helpdesk users.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update corrects a technical issue related to how the system identifies active VoIP sessions. A previous change introduced new session types, and this fix ensures the system correctly searches for sessions in the updated session map. This improves the reliability of VoIP functionality.
Original PR description
In this PR: https://github.com/odoo/enterprise/pull/104426 session management was introduced that changed the concept of `mainSession` and `transferSession` in the userAgent. There was a missing cleanup in the function `isInProgress` that is still using the old main and transfer sessions. This commit fixes this bug by searching for the session in the new sessions map. Forward-Port-Of: odoo/enterprise#108526
This update fixes a critical issue where mandatory fields were incorrectly included in signature validation, forcing users to sign them. Now, automatic completion is enabled for these fields, and a clear placeholder is used when the auto-field is empty, improving the user experience and data accuracy.
Original PR description
Before this commit, constant required sign fields with auto_fieldwere incorrectly included in signature validation, forcing users to sign them. Additionally, when auto_field had no value, these fields remained empty instead of using placeholder text as fallback. After this commit, constant required fields are excluded from signature validation, allowing automatic completion. When auto_field returns no value, the placeholder or item type name is used, providing a more clear and informative fallback content for users. task-5886200
This update resolves an issue where users with limited accounting access (read-only) were encountering errors when viewing invoices or partner details. The change ensures that the 'addenda_ids' field is only displayed to users who have the necessary permissions, improving stability and usability.
Original PR description
User with "read-only" access to accounting will trigger an error if they try to open an invoice or partner due to field addenda_ids. This commit aims to render this field only if the have the right to fetch it. opw-5931178 opw-5954244 Forward-Port-Of: odoo/enterprise#108332
This update ensures that essential products like 'settle due' and 'deposit' are automatically configured for all Point of Sale (POS) settings within the Odoo Enterprise system. Previously, these products were only available in POS sessions without open sessions, causing potential issues. Now, all POS configurations will have these products set, streamlining operations and preventing errors.
Original PR description
Before this commit, when the module pos_settle_due was installed, the special products (settle due, deposit, settle invoice) were only set on the POS configurations that did not have any open session. This could lead to issues when trying to use these products in a POS session of a configuration that did not have them set. Now, the special products are set on all POS configurations when installing the module. Community PR: https://github.com/odoo/odoo/pull/229074 Forward-Port-Of: odoo/enterprise#96788 Forward-Port-Of: odoo/enterprise#95789
This update corrects a restriction preventing HR officers from creating new employees in the Belgian version of the HR Payroll module. The fix utilizes 'sudo' to grant necessary access to a key field, allowing users with standard HR officer permissions to complete the employee creation process without encountering errors. This ensures seamless employee onboarding for our Belgian clients.
Original PR description
Steps to reproduce: - Install l10n_be_hr_payroll - Have a user with only HR officer rights - Try to create a new employee with that user (in BE) - You have an access error on the field l10n_be_resident_situation The field `l10n_be_resident_situation` has the HR Payroll officer group. This field is used on the inverse of the is_non_resident field, which is accessible to HR officers. This commit fixes the issue by using sudo to read the field's value. task-5779779 Forward-Port-Of: odoo/enterprise#108492 Forward-Port-Of: odoo/enterprise#104888
1 change
Resolved issues and error corrections
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction in accessing related stock records. The fix adds a necessary permission group, allowing helpdesk users to correctly read ticket information and access associated products. This ensures all helpdesk users can efficiently manage tickets.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
24 changes
Resolved issues and error corrections
This pull request corrects a typographical error in the Combo Configurator module, improving the user experience and preventing potential confusion. The fix ensures accurate display of configuration options, leading to a smoother and more reliable process for users creating custom product combinations. This is a minor fix with no impact on core functionality.
Original PR description
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 fixes an issue where manually invoicing subscriptions or upsells didn't correctly update their invoice status. Now, subscriptions and upsells are automatically marked as 'Fully Invoiced' after invoicing, ensuring accurate financial reporting. This improves the reliability of subscription billing.
Original PR description
## Issue When manually invoicing a subscription or an upsell, its *Invoice Status* would not be updated to *Fully Invoiced* (`invoiced`), and would stay as *To invoice* (`to invoice`) instead. ##…
## Issue
When manually invoicing a subscription or an upsell, its *Invoice Status* would not be updated to *Fully Invoiced* (`invoiced`), and would stay as *To invoice* (`to invoice`) instead.
## Steps to reproduce
1. Install *Subscriptions* (`sale_subscription`)
2. Create a Product P
- *Subscriptions* checked
- *Invoicing Policy*: *Delivered quantities*
3. Create a Subscription S
- Any Customer
- Any plan
- Product P (any quantity)
4. Confirm the subscription S, set the amount delivered to the quantity ordered, then create and confirm the invoice
5. On the subscription S, click *Upsell*, add the product P to the upsell, and repeat step 4 on the upsell
6. **The upsell's _Invoice Status_ is still _To Invoice_, even though we invoiced it in the previous step**
## Causes
In the `SaleOrderLine._compute_invoice_status`, the following condition skips line from orders that are not considered to be "subscriptions":
https://github.com/odoo/enterprise/blob/c33e668bbba37c34d18af8c5371ab80eedf1b965/sale_subscription/models/sale_order_line.py#L51-L62
This is the case of upsells, as explained here:
https://github.com/odoo/enterprise/blob/6bfd057b3d17ce8b266aa6dbd88ffef70ca634aa/sale_subscription/models/sale_order.py#L193-L201
---
Updating the above condition to take upsells in account is not enough. The condition to set the `invoice_status` to `invoiced` does not work as expected either.
https://github.com/odoo/enterprise/blob/5f4bb0ca22d068247540a4dcae88905c7b312f3c/sale_subscription/models/sale_order_line.py#L77-L78
In fact, when invoicing the subscription/upsell manually, there are multiple cases where the `last_invoiced_date` will be after `today`, and the subscription will be invoiced, so its status should be `invoiced`.
| Upsell | Invoiced based on delivered quantities | last_invoiced_date |
|--------|----------------------------------------|-------------------------|
| True | True | today + 1 month |
| False | True | today |
| True | False | today + 1 month - 1 day |
| False | False | today + 1 month - 1 day |
An alternative logic is to consider the subscription to be invoiced as long as the `next_invoice_date` is not reached.
---
opw-5500585This update ensures Verifactu invoices generated from Point of Sale (PoS) orders correctly reflect the invoice type ('F3') when replacing a previous simplified invoice. Previously, the system incorrectly defaulted to 'F1'. This change aligns with Spanish tax regulations and guarantees accurate invoice generation for Verifactu documents.
Original PR description
To reproduce ------------- 1. Install `l10n_es_edi_verifactu_pos`, and select the ES company 2. Make an order in PoS with a price less than 400, and don't invoice it. 3. Close the PoS session, then…
To reproduce ------------- 1. Install `l10n_es_edi_verifactu_pos`, and select the ES company 2. Make an order in PoS with a price less than 400, and don't invoice it. 3. Close the PoS session, then go to PoS > Orders, and select the previously made order 4. It will have a Verifactu generated document with invoice type as 'F2', which is correct since it's a simplified order. 5. Click invoice to invoice the order; the invoice is no longer simplified. Notice now that the new Verifactu document has an invoice type of 'F1', which corresponds to a normal non simplified invoice. However, since the new invoice is replacing an old simplified one, it should be of type 'F3' instead. The fix ------- When fully invoicing, we check if the order had a linked Veri*factu document of type F2, which means we are now replacing it and should set the type of the new invoice to F3 instead of F1. Sources: -------- Difference between 'F1', 'F2', and 'F3' invoice types: https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/preguntas-frecuentes/procedimientos-facturacion.html?faqId=bdbd20022fe06910VgnVCM100000dc381e0aRCRD opw-5343973
This update fixes an issue where payroll rates weren't accurately calculated for employees using attendance-based contracts. The system now correctly uses the employee's planned working schedule (hours per day) to determine the appropriate hourly rates for salary and allowances, ensuring accurate pay calculations.
Original PR description
Step to Reproduce: - install UAE Payroll localization and attendance - create employee and running employee contract and give basic salary, housing, transportation and other allowance. - work entry source should be attendance - create a payslip and compute sheet. Issue: - The values for payslip lines are not as expected. - The rate per hour for basic salary , housing, transportation and other allowances was being calculated based on employee's attendance work entries, not the planned working schedule. Reason: - When using attendance-based contracts, the hourly rates for basic salary, housing, transportation, and other allowances should be calculated based on the working schedule's hours per day, if a working schedule is available. Solution: - Instead of sum_worked_hours which takes working hours of employee's work entries, use total_number_of_days multiplied by the hours per day from the working schedule. task-5270185
This update restores the display of the account holder's name in bank records within Odoo. Previously, this information was accidentally removed, which created confusion when viewing payment details. Restoring this field ensures accurate and complete information for financial transactions, allowing users to easily identify the correct account holder.
Original PR description
`account_holder_name` was removed from the view in 18.0 by mistake in 0eddc18b08d2b3a374162dc24ea93dd0350dbdc2 and should be shown again since we want the account holder name to be independent of the partner name. task-5967143
This update fixes an issue where warehouse names with only numbers (like '01') were displayed incorrectly in the barcode app. The fix removes a browser setting that caused numerical warehouse codes to be reversed, ensuring they are always shown in the correct order. This improves the user experience when scanning and tracking inventory.
Original PR description
### Steps to detect the bug: - Download stock apps - Enable "storage locations" settings under warehouse index - Change name of warehouse with a name composed only of numbers (ex. 01) - Create a…
### Steps to detect the bug:
- Download stock apps
- Enable "storage locations" settings under warehouse index
- Change name of warehouse with a name composed only of numbers (ex. 01)
- Create a product (with barcode number)
- Insert a number of products available with smart button "on hand"
- Create a new delivery for that product
- Go to barcode app and search for the delivery you just created
- Click on it and see that the name of the warehouse will be stock/01 instead of the correct 01/stock
### The problem:
The previous configuration used direction: rtl; on the warehouse name
element in the barcode app. So if the string contains only letters the
standard visual order is maintained, however, when the string consists
entirely of numbers the rtl property forces the browser to reorder them
from right to left.
### The reson to introduce the fix:
By removing this property, it is ensured that numerical warehouse codes are displayed in their natural sequence without being flipped.
opw-5730199This update corrects a rounding error in how early payment discounts are calculated when 'Always (upon invoice)' cash discount tax reduction is used. Previously, discounts were applied line-by-line, leading to discrepancies. This change ensures consistent and accurate discount calculations across all invoices.
Original PR description
**PROBLEM** There is a rounding issue with early payment discount when cash discount tax reduction is set to always (upon invoice). The move.line created for the discount is computed by applying the discount to each line, rounding each line individually. But the early payment discount is computed by rounding globally. **STEP TO REPRODUCE** 1. Create a payment term, with early discount of 1%, and cash discount tax reduction set to 'Always (upon invoice)'. 2. Create an invoice with 4 identical lines, unit price 4.76€ and tax 15%. 3. set the payment term on the invoice and save. 4. Go to journal item, early payment discount is 0.20€. 5. toggle discount_amount column on the the journal item tab. 6. notice on the last line, that balance - discount_amount = 0.19€ instead of 0.20€ opw-5865308
This update ensures that when users send multiple messages in a live chat, only one channel is created. Previously, sending multiple messages could lead to duplicate channel creation. This change prevents confusion and streamlines the live chat experience for users.
Original PR description
Before this commit, sending multiple messages before the channel creation can result in multiple channels being created. It occurs because the post function is overriden to first persist the channel. When the persist call is still in progress, we shouldn't issue a new one. task-4756758 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 fixes an issue where product variant pricelists were incorrectly storing data after a rule was removed. Previously, the data remained tied to the variant, but now it's reset to the standard global pricelist setting, ensuring accurate pricing calculations. This resolves a data corruption problem impacting product variant pricing.
Original PR description
Steps: - Create a price list (or existing one) - Create (or find) a product with only one variant - Add price list rule for that variant (Should show as Variant:... in Pricelist listing) - Go to…
Steps: - Create a price list (or existing one) - Create (or find) a product with only one variant - Add price list rule for that variant (Should show as Variant:... in Pricelist listing) - Go to pricelist listing, select the pricelist - Edit price list rule - Remove the product - Save and check the data (applied_on, product_id, product_tmpl_id) (applied_on still 0_product_variant, product_id, and NO product_tmpl_id) Related ticket: opw-5411034 (Video: https://drive.google.com/file/d/1xmg9A9NgavFQkIFkUZrzuAxVF-PNqdnL/view) Description of the issue/feature this PR addresses: Fix corrupted data <img width="583" height="108" alt="image" src="https://github.com/user-attachments/assets/961e75f8-b2a6-4812-a0b4-d73e02d52b08" /> Current behavior before PR: product_tmpl_id set to None product_id / applied_on data stays the same Desired behavior after PR is merged: When product_tmpl_id is removed, reset the applied_on type back to 3_global --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a critical error preventing UK tax reports from submitting correctly. The issue stemmed from a missing VAT value on the company record, which was blocking the connection to HMRC. The fix ensures VAT is always set, allowing reports to be successfully transmitted.
Original PR description
Steps to Reproduce: https://www.awesomescreenshot.com/video/49329263?key=2daddfb65e4ee8dcf1a047c09c6bd2b5 - Install l10n_uk_reports module - Keep the VAT value empty for the UK Company - On the Tax…
Steps to Reproduce: https://www.awesomescreenshot.com/video/49329263?key=2daddfb65e4ee8dcf1a047c09c6bd2b5
- Install l10n_uk_reports module
- Keep the VAT value empty for the UK Company
- On the Tax Report (GB), click Connect to HMRC
- Establish connection with HMRC
- After a successful connection, try to send the tax report to HMRC
- Traceback will appear
<details><summary>Exact Traceback</summary>
<p>
```
RPC_ERROR
Odoo Server Error
Occured on 100710704-master-all.runbot216.odoo.com on model account.report on 2026-02-11 12:50:03 GMT
Traceback (most recent call last):
File "/data/build/odoo/odoo/http/requestlib.py", line 632, in _serve_db
return retrying(serve_func, env=self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/http/retrying.py", line 52, in retrying
result = func()
^^^^^^
File "/data/build/odoo/odoo/http/requestlib.py", line 687, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/http/dispatcher.py", line 308, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/addons/base/models/ir_http.py", line 374, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/http/routing_map.py", line 207, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/addons/web/controllers/dataset.py", line 32, in call_kw
return call_kw(request.env[model], method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/service/model.py", line 57, in call_kw
result = method(recs, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 2825, in dispatch_report_action
return report_to_call.dispatch_report_action(options, action, action_param=action_param, on_sections_source=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 2836, in dispatch_report_action
return report_method(model, *args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/l10n_uk_reports/models/account_financial_report.py", line 30, in send_hmrc
self.env['l10n_uk.vat.obligation'].import_vat_obligations(self.env.context['client_data'])
File "/data/build/enterprise/l10n_uk_reports/models/hmrc_vat_obligation.py", line 124, in import_vat_obligations
self._get_vat(),
^^^^^^^^^^^^^^^
File "/data/build/enterprise/l10n_uk_reports/models/hmrc_vat_obligation.py", line 111, in _get_vat
if vat.startswith(('GB', 'XI')):
^^^^^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'startswith'
The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
RPC_ERROR
at makeErrorFromResponse (https://100710704-master-all.runbot216.odoo.com/web/assets/0a37914/web.assets_web.min.js:3225:165)
at XMLHttpRequest.<anonymous> (https://100710704-master-all.runbot216.odoo.com/web/assets/0a37914/web.assets_web.min.js:3231:13)
```
</p>
</details>
Reason:
- No VAT set on the current company.
Solution:
- Blocking level error for the user to set VAT on the current company.
Task-5929908This update corrects a bug that prevented the website event registration page from rendering correctly after a change in the system's architecture. The fix ensures the page displays properly, regardless of whether tickets are available for sale. This improves the user experience for event registration.
Original PR description
After splitting the controller, the return early was omitted, and there was a try to render the template if there weren't tickets to sell, and it gave an error. Now, this is being fixed. --- 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 names of Ecuadorian localization regimes didn't comply with government regulations. The changes ensure that all names are now correctly formatted for electronic invoicing to the SRI (Servicio de Rentas Internas), maintaining consistency and avoiding potential compliance problems. The system now always uses Spanish names for these regimes, regardless of the user's language settings.
Original PR description
[FIX] l10n_ec_edi: fiscal localizations name The name of the regimes for the Ecuadorian localization does not respect the government requirements Steps to reproduce: 1. Install l10n_ec_edi module 2. Go to Settings > Invoicing > Ecuadorian Localization 3. In Electronic Invoicing > Regime, the names of the regimes do not respect government requirements Solution: Change the name of the fiscal localizations to respect the requirements Add a computed field used to map the name of the regime to the technical name of the regime used in SRI documents We write them in Spanish because we always want the name of the regime to be in Spanish in the XML invoice sent to the government, even if the user didn't install any other language. opw-5221871 Forward-Port-Of: odoo/enterprise#105914
This update ensures that the Website Studio XML editor correctly translates views only for the active website being used, preventing issues where the default website's language was incorrectly applied. The change refines how related views are retrieved, improving the accuracy of translations within the Studio interface. This ensures a consistent and reliable translation experience for website content.
Original PR description
Problem: When opening the Studio XML editor when Website is installed, the translation terms corresponding to the Default Language of the first website in the database are used. This behavior should only be applied to the HTML/CSS Editor in Website. Purpose: Modify Website's override of get_related_views to only return translated views when called with a specific website in context. This is done here by adding a context flag, as to not interfere with customizations made in stable versions. This will be changed for master. Steps to Reproduce in Runbot: 1. Activate a non-English (US) language. 2. Add this language to the Website with the lowest ID in the database, then set it to the Default Language of the Website. 3. Enter Studio and navigate to a view that has translation terms in its view (ex. Invoice PDF Report), then open the XML editor. opw-5136124 Forward-Port-Of: odoo/odoo#237000
This update ensures that the Studio XML editor correctly uses translations only for Website views, resolving an issue where the default language of the first website was incorrectly applied. The change refines how Studio retrieves related views, preventing unintended translation behavior and improving the accuracy of website content translations.
Original PR description
Problem: When opening the Studio XML editor when Website is installed, the translation terms corresponding to the Default Language of the first website in the database are used. This behavior should only be applied to the HTML/CSS Editor in Website. Purpose: Modify Website's override of get_related_views to only return translated views when called with a specific website in context. Steps to Reproduce in Runbot: 1. Activate a non-English (US) language. 2. Add this language to the Website with the lowest ID in the database, then set it to the Default Language of the Website. 3. Enter Studio and navigate to a view that has translation terms in its view (ex. Invoice PDF Report), then open the XML editor. opw-5136124 Forward-Port-Of: odoo/enterprise#107459
Some libraries expect to find the language direction on the HTML element (e.g. Bootstrap). As we didn't set it, there were some issues. For instance on the website: - set the website language to some RTL language (e.g. Arabic) - drop an image gallery snippet and save - navigate with the keyboard to the carousel and start using the arrows to switch images => Pressing left should show the _next_ image, and pressing right should show the _previous_ image (contrary to LTR languages). This is ill
Original PR description
Some libraries expect to find the language direction on the HTML element (e.g. Bootstrap). As we didn't set it, there were some issues. For instance on the website: - set the website language to some RTL language (e.g. Arabic) - drop an image gallery snippet and save - navigate with the keyboard to the carousel and start using the arrows to switch images => Pressing left should show the _next_ image, and pressing right should show the _previous_ image (contrary to LTR languages). This is illustrated by the image indicators at the bottom of the carousel (the 1st image is on the right, the last image on the left). But without `dir="rtl"` on the HTML element, the arrows keep their LTR behavior: pressing left goes to the previous image, and right to the next image. task-5109547 Forward-Port-Of: odoo/odoo#240611
This update fixes a problem where the automated invoice processing cron job would fail and lose progress. The change ensures the cron job processes invoices in smaller batches, committing changes after each one to prevent data loss and wasted credits. This improves the reliability of the BR EDI service.
Original PR description
The cron searched with limit=batch_size and only retriggered when >batch_size records were found which never happens. It also ran all invoices in a single transaction so one failure rolled back all progress while IAP credits were already consumed. Search batch_size + 1 so remaining invoices are detected, and commit after each invoice to preserve progress. opw-5954211 Forward-Port-Of: odoo/enterprise#108191
This update allows branch companies to see and use contacts belonging to their parent companies when creating invoices or vendor bills. Previously, branch companies were restricted from selecting these contacts. This change resolves a technical issue related to how company affiliations were handled within the accounting module.
Original PR description
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills. ### **Steps to reproduce:** 1) Create a…
Currently, when operating in a branch company, contacts belonging to the parent company are not visible in the partner dropdown on Invoices or Vendor Bills.
### **Steps to reproduce:**
1) Create a multi-company hierarchy (Company A -> Branch B).
2) Create a contact owned by Company A.
3) Switch the current company to Branch B.
4) Go to Accounting > Customers > Invoices and create a new invoice.
5) Try to select the contact created in step 2.
### **Current/Buggy Behavior:**
The contact does not appear in the search results.
### **Expected Behavior:**
The contact should be selectable.
### **Root Cause:**
since commit https://github.com/odoo/odoo/commit/67169c42061cb51bc68f6c74f0674a670dd04f58,
the partner model supports the standard
`check_company=True` mechanism, and record rules were updated to allow
branches to access partners of their parent company.
However, the `partner_id` field on the `account.move` form view still
retained a explicit domain: `[('company_id', 'in', (False,
company_id))]` as shown at [1].
This domain overrides the standard `check_company` behavior.
due to which it restricts the selection to partners owned by the current company
(the branch) or partners with no company set. It explicitly excludes
partners owned by the parent company.
### **Fix:**
Remove the domain at [1],
This allows the field to rely on the standard `check_company=True`
logic, which correctly handles the multi-company hierarchy and allows
branches to select parent company partners.
[1]- https://github.com/odoo/odoo/blob/6b7b83449739932aa8420ef8fcd888116e3c0f8a/addons/account/views/account_move_views.xml#L896
**opw-5484611**
Forward-Port-Of: odoo/odoo#244671This update ensures that check printing in the Philippines accurately reflects the net payment amount after withholding taxes. Previously, the checks were displaying incorrect amounts. A new test case has been added to verify this fix and maintain the correct calculation.
Original PR description
In Philippines' check localization module, the amount on check should be based on the net amount after deducing withholding amount for payments if the payment is with taxes that are set as withholding on payment. This commit fixes the check print's values to reflect the net amount. Minimal test case is also added to safeguard the new behavior. [Task-5928813](https://www.odoo.com/odoo/all-tasks/5928813)
This update corrects a technical issue where certain Intrastat codes (99450000, 99500000, 99600000 & 99700000) were incorrectly marked as expired. This ensures accurate reporting for Intrastat data, aligning with official Belgian regulations. The fix improves data integrity for international trade reporting.
Original PR description
99450000, 99500000, 99600000 & 99700000 were erroneously expired. They are still active : https://www.nbb.be/doc/dd/onegate/data/intrastat_manual_basis_en.pdf page 13 Forward-Port-Of: odoo/enterprise#108451
This update resolves an issue where customer emails with accented characters were being rejected by strict email servers like Yahoo. By eliminating subject header folding, Odoo now ensures all emails, regardless of character encoding, are delivered successfully, improving customer communication and support.
Original PR description
Description of the issue/feature this PR addresses: Yahoo and other strict mail servers reject emails with `554 Invalid Subject header` when Subject headers are folded at 78 characters and contain…
Description of the issue/feature this PR addresses: Yahoo and other strict mail servers reject emails with `554 Invalid Subject header` when Subject headers are folded at 78 characters and contain RFC 2047 encoded-words representing non-ASCII characters. The issue occurs because: 1. Long email subjects with accented characters (French: "arrière", "connecté", etc.) are RFC 2047 encoded 2. Python's `email.policy.SMTP` folds these headers at 78 characters per RFC 5322 SHOULD recommendation 3. Yahoo's strict validation rejects folded subjects when the fold occurs at certain positions within or between encoded-words 4. This results in customer-facing emails being rejected with no delivery failing silently, leading to missed communications. Current behavior before PR: > Subject: [SOS-1477030] Commande et livraison - Demande de retour - user pseudo 251003-GD1U0E - Cosmo Connected Casque Fusion avec feu =?utf-8?q?arri?==?utf-8?q?=C3=A8re_connect=C3=A9?= et accessoire (#1031590) This subject: - Is 168 characters when unfolded - Is folded into 3 lines (78, 74, 60 chars) - Contains RFC 2047 encoded "arrière connecté" - Is technically RFC 2822 compliant - **Gets rejected by Yahoo with "554 Invalid Subject header"** While this is technically RFC 2822 compliant, Yahoo's strict validation rejects it. Python's `email.policy.SMTP` folds headers at 78 characters to follow RFC 5322's SHOULD recommendation. However, when subjects contain non-ASCII characters that get RFC 2047 encoded, the folding can create patterns that strict mail servers reject. Desired behavior after PR is merged: - No folding of Subject headers, regardless of length - Yahoo and all strict SMTP servers accept these emails - Customer support emails deliver successfully --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where custom analytic distributions on sales order lines were being reset to the default model distribution when the order was confirmed. Previously, users couldn't maintain their specific distribution settings. Now, custom distributions will be preserved, ensuring accurate tracking of costs within project sales.
Original PR description
*: project_purchase, sale_project --- Decription of the issue this commit addresses: When confirming a sales order with a product-partner combination that has an Analytic Distribution Model assigned,…
*: project_purchase, sale_project --- Decription of the issue this commit addresses: When confirming a sales order with a product-partner combination that has an Analytic Distribution Model assigned, any custom analytic distribution done on the line of the product will be lost, resetting the analytic distribution to the default value set on the Analytic Distribution Model. --- Steps to reproduce: 1. Install sale_project,project_purchase. 2. Activate "Analytic Accounting" in the settings. 3. Create a new Product "test"; Type: Service, Create on Order: Project. 4. Create a new Analytic Distribution Models; Partner: Acme, Product: test, Analytic Distribution: anything but blank. 5. Create a new Quotation in the Sales apps; Partner: Acme. 6. Assign the Product test to the first order line. This will automatically set the analytic distrib of the Analytic Distribution Model. 7. In the Analytic Distribution cell, add a line with any non null distribution. 8. Confirm the Quotation. 9. The analytic distribution that was anually added has been removed. Only the default analytic distribution of the model remains. --- Desired behavior after this commit is merged: Any custom analytic distribution done on a line is never lost. The Analytic Distribution Model's distribution serves as a template but never overrides the values set by the user. --- opw-4934291 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a minor issue within the employee departure process. Previously, archiving an employee used an outdated method. Now, the system correctly utilizes the 'action_archive' method, ensuring employees are properly removed from records when departing, aligning with enterprise standards.
Original PR description
When archiving an employee from the departure wizard, use the action_archive method instead of toggle_active. Related to odoo/enterprise#100437 task: 5354002 Forward-Port-Of: odoo/odoo#247224
This update fixes a problem where archived employees caused conflicts when managing appraisal plans. The fix ensures that archived employees' appraisal dates are cleared, preventing errors when setting appraisal plans for active employees. This improves the stability and usability of the appraisal management feature.
Original PR description
**Steps to reproduce:** Based on this feedback https://www.odoo.com/odoo/project.task/5270281 companies with archived employees face an issue when they try to toggle Appraisals Plans from Appraisls -> Configuration -> Settings -> Appraisals Plans **Issue:** The propblem is that when employees with next appraisal date are archived, their next appraisal date is not cleared which leads to past date conflicts upon trying to set the next appraisals dates for all the employees (which is done through toggling the Appraisals Plans checkbox) **Solution:** - Unset the next appraisal date upon archiving an employee - exclude archived employees from _compute_next_appraisal_date method Task: 5354002 Forward-Port-Of: odoo/enterprise#100437
This update corrects a bug where invoices created by users in time zones before Saudi Arabia could be incorrectly dated in the future, leading to ZATCA rejection. The change ensures invoice dates are properly aligned with Saudi Arabia's time, preventing future invoicing issues and maintaining compliance.
Original PR description
In odoo/odoo#236865 we decided to allow clients to backdate invoices by letting them use the `invoice_date` field for the invoice date and use the current time as the issue time because we are not supposed to use a dummy value for time. This created an issue where if a user in a timezone before SA tries to invoice a document around midnight using the current date in SA the datetime created will be in the future which will lead to the invoice being rejected by ZATCA. This commit makes sure we normalize the selected date wrt to the current datetime in saudi arabia so that we never accidentally invoice into the future. task-5890423 opw-5373067 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246311
3 changes
Resolved issues and error corrections
This update fixes a technical issue where certain Intrastat codes (99450000, 99500000, 99600000 & 99700000) were incorrectly marked as expired. The update ensures these codes remain active, aligning with official Belgian regulations as outlined in the NBb manual, ensuring accurate reporting.
Original PR description
99450000, 99500000, 99600000 & 99700000 were erroneously expired. They are still active : https://www.nbb.be/doc/dd/onegate/data/intrastat_manual_basis_en.pdf page 13 Forward-Port-Of: odoo/enterprise#108451
This update resolves an issue where the General Ledger Excel export was blank when generating reports from branch companies. The fix ensures that all relevant financial data, including accounts and journal entries, are correctly included in the exported file, providing accurate reporting for branch operations.
Original PR description
Behavior before: When exporting the General Ledger to Excel from a branch company, the generated file was empty. Behavior after: The General Ledger Excel export now correctly includes all relevant data for branch companies. Root cause: The SQL query used to retrieve accounts did not properly account for multi-company hierarchies. In a branch setup, the chart of accounts is typically defined on the parent company, while the journal entries (account_move_line) belong to the branch company. As a result, conditions such as aml.company_id = account.company_id or account.company_id IN company_ids returned no records, leading to an empty export. Steps to reproduce: 1. Create a branch company. 2. Create invoices in the branch company using accounts from the parent company. 3. Open the General Ledger report and export it to Excel. 4. The exported file is empty. OPW: 5901758
This update resolves an issue where the General Ledger XLSX export for branch companies was blank. The fix ensures that branch companies correctly display their transactions in the XLSX file by properly considering the parent company hierarchy and transaction company IDs. This improves reporting accuracy for branch financial data.
Original PR description
**Steps to reproduce:** * Install **Accounting** module. * Create a **branch company** with a parent company. * Create and post an invoice for the branch. * Go to **Accounting → Reporting → Profit &…
**Steps to reproduce:** * Install **Accounting** module. * Create a **branch company** with a parent company. * Create and post an invoice for the branch. * Go to **Accounting → Reporting → Profit & Loss**. * Switch to the **branch company**. * Click an report line **⋮ → General Ledger**. * Click **Download XLSX**. **Observed behavior:** * The exported XLSX file is **blank**. * The report displays correctly in the UI, but the XLSX export shows no accounts. **Cause:** * `_get_accounts_with_move_lines` filtered accounts with `account.company_id IN company_ids`, while accounts are defined on the **parent company** and shared with branches via `check_company_domain_parent_of`. When only a branch is selected, no accounts match. * The AML existence check used `aml.company_id = account.company_id`, but AMLs are recorded with the **branch's company_id**, not the parent’s, so the join never matches branch transactions. * Additionally, `export_to_xlsx` passed the raw `options` to `_get_accounts_with_move_lines` instead of the regenerated `report_options`, leading to an inconsistent company context. **Fix:** * Search accounts using the **parent hierarchy**. * Still filter move lines by the selected branch company. * Branches now see parent accounts with only their own transactions in the XLSX export. opw-5902062