Daily updates from Odoo
Navigate
Branch
Tuesday, April 14, 2026
255 changes
9 changes
Enhancements to existing features
This update enhances the budget report to automatically include tracking of asset accounts. Previously, budget reports only covered expense accounts. Now, when tracking expenses or both expenses and budgets, the system will include asset accounts like current, non-current, and fixed assets, providing a more complete financial picture.
Original PR description
Expand the scope of budget tracking to include asset accounts. Modified the account filtering logic so that when a budget type is set to "Expenses" or "Both", the query includes 'asset_current', 'asset_non_current', and 'asset_fixed' account types. task-5994048 Forward-Port-Of: odoo/enterprise#112239 Forward-Port-Of: odoo/enterprise#109496
This update enhances the processing of point-of-sale transactions within the German tax reporting module (l10n_de_pos_cert). Specifically, it ensures accurate tracking of transaction times and automatically clears active transactions at the end of each session to align with tax reporting requirements. This improves data reliability and simplifies compliance.
Original PR description
In this commit: ------------------ - The transactions were shown to be processed within 0-1 seconds as we were used to call start and finish transaction calls on validation so in the case of retails it won't give actual data of start and end time so we need to improve this and called now for `start transaction` when first orderline added to a new order, calling `cancelled` if the order is deleted or all the orderlines are removed manually, and `finished` on validation of the order. - Also will delete all active transactions on the fiskaly at the time of closing of session so that no active order remains (if cleared cache) As a lot things are already handled in v19 Handled https://github.com/odoo/enterprise/pull/99216 pr's remaining updates here. Forward-Port-Of: odoo/enterprise#113669 Forward-Port-Of: odoo/enterprise#107530
Resolved issues and error corrections
This update resolves an error preventing customers from successfully connecting or refreshing their Shopee accounts through the `sale_shopee` module. The fix corrects a technical issue within the module's code that was causing an error during the authorization process. New automated tests have been added to ensure this functionality remains stable.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update creates a direct link between Documents and Project Tasks, resolving a previous issue where attachments and saved documents weren't automatically connected. Now, documents created from Project Tasks will have a clear link back to the task, improving organization and workflow efficiency.
Original PR description
Previously, there was no connection between the Documents app and Project Tasks (`project.task`). Attachments added to a task via the chatter were not synced to the Documents app, and documents manually saved from the chatter lacked a link back to the corresponding task. This commit introduces a link between them by posting a message in the created document's chatter, linking it back to the task. This solution is specifically for stable versions. On `master`, we introduce a proper bridge. task-5941719 Forward-Port-Of: odoo/enterprise#111996
This update resolves a visual issue where text in the payroll view would split and misalign with checkboxes when the browser window was resized. The fix ensures all text remains on a single line, maintaining a consistent and professional appearance for users. This improves the user experience and data readability.
Original PR description
Step to reproduce: play with the width of the window, at some point text splits and item are unaligned. Cause: with some window width, the text is splitted on 2 lines, which makes it unaligned with the checkbox. Solution: force text on same line using style="white-space: nowrap". Task: 6069017 Forward-Port-Of: odoo/enterprise#113570 Forward-Port-Of: odoo/enterprise#113386
This update fixes an issue where the FAIA report was incorrectly showing only the first product ID when multiple products lacked a required internal reference. Now, the report accurately displays all products with missing internal references, ensuring accurate reporting for Luxembourg accounting. This resolves a previous data discrepancy.
Original PR description
This is one of several commits fixing the FAIA xml export. The internal reference must be set for all products reported in the FAIA report. When there are multiple products missing this field, our previous code only reported the first ID to the customer. This commit shows the customer all incorrectly configured products. opw-5427296, opw-6113665 Forward-Port-Of: odoo/enterprise#113563 Forward-Port-Of: odoo/enterprise#113452
This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within a list view's optional fields dropdown in Odoo Studio. The fix prevents Studio from opening multiple times simultaneously, ensuring a stable user experience. This improves reliability for users working with list views.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
This update ensures that CSV files are now correctly recognized and viewable within Odoo's list views, mirroring the behavior in the Kanban view. This improves usability by allowing users to directly access and work with CSV data from the standard list view interface.
Original PR description
Current behavior before PR: - CSV files were viewable from the Kanban view, and opened the spreadsheet conversion dialog - In list view, CSV files were not considered viewable - Same issue for trashed CSV files in list view Desired behavior after PR is merged: - Consider CSV files as viewable in list view - Align behavior with the Kanban view Task: 6052134 Forward-Port-Of: odoo/enterprise#113586 Forward-Port-Of: odoo/enterprise#112869
This update fixes an issue where search filters applied in the MRP Planning section (MPS) would disappear when users navigated away and returned via the breadcrumb. The fix ensures that search filter state is correctly maintained, providing a smoother and more reliable user experience for planning.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
15 changes
New functionality added to Odoo
This update introduces basic financial reporting capabilities specifically tailored for businesses in Uzbekistan. It includes essential reports like the Balance Sheet and Profit & Loss Report, allowing users to track key financial data relevant to this market. This enhancement supports our growing presence and compliance needs in Uzbekistan.
Original PR description
This commit introduces basic report package for Uzbekistan and includes Balance Sheet and Profit & Loss Report. task-3927927 Community PR - https://github.com/odoo/odoo/pull/241811 Forward-Port-Of: odoo/enterprise#103136
Enhancements to existing features
This update enhances the processing of point-of-sale transactions within Odoo Enterprise, specifically for German tax reporting (l10n_de_pos_cert). It optimizes transaction timing and ensures all active transactions are cleared at the end of each session, improving data accuracy and compliance.
Original PR description
In this commit: ------------------ - The transactions were shown to be processed within 0-1 seconds as we were used to call start and finish transaction calls on validation so in the case of retails it won't give actual data of start and end time so we need to improve this and called now for `start transaction` when first orderline added to a new order, calling `cancelled` if the order is deleted or all the orderlines are removed manually, and `finished` on validation of the order. - Also will delete all active transactions on the fiskaly at the time of closing of session so that no active order remains (if cleared cache) As a lot things are already handled in v19 Handled https://github.com/odoo/enterprise/pull/99216 pr's remaining updates here. Forward-Port-Of: odoo/enterprise#107530
This update enhances the budget reporting feature to now automatically include asset accounts (current, non-current, and fixed) in budget tracking. This provides a more complete view of financial performance and aligns budget reports with a broader range of business expenses.
Original PR description
Expand the scope of budget tracking to include asset accounts. Modified the account filtering logic so that when a budget type is set to "Expenses" or "Both", the query includes 'asset_current', 'asset_non_current', and 'asset_fixed' account types. task-5994048 Forward-Port-Of: odoo/enterprise#112239 Forward-Port-Of: odoo/enterprise#109496
Resolved issues and error corrections
This update resolves an error preventing customers from successfully connecting or refreshing their Shopee accounts within the Odoo Enterprise system. The fix corrects a technical issue within the module's code that was causing errors during the authorization process. New automated tests have been added to ensure this functionality remains stable.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update resolves a problem where embedded PDF previews in XML invoices (like UBL files) were not displaying correctly in the Documents app. The fix restores a key parameter that allows the backend to properly extract and serve the PDF data, ensuring the preview panel functions as intended. This improves the user experience when working with invoices.
Original PR description
Steps to reproduce: 1. Upload an XML invoice (e.g., UBL) containing an embedded PDF into the Documents app. 2. Select the document to open the preview panel. 3. The viewer opens but shows a…
Steps to reproduce: 1. Upload an XML invoice (e.g., UBL) containing an embedded PDF into the Documents app. 2. Select the document to open the preview panel. 3. The viewer opens but shows a grey/empty PDF viewer. Context: Commit odoo/odoo@5035107e introduced an updated PDF viewer.js. Subsequently, commit d3481a5e removed the `download=0` query parameter from the viewer route to prevent `new URL()` parsing errors on relative paths. However, the backend specifically relies on the `download=0` flag to intercept the request, extract the Base64 data, and serve the raw PDF binary. Without this parameter, the backend serves the raw XML string directly to the PDF viewer, causing the parser to crash. Fix: Restore the `download=0` parameter by using the core `url` utility to construct a safe, absolute URL before encoding it for the viewer. This satisfies the strict `new URL()` parsing in the updated PDF viewer while ensuring the backend correctly triggers the PDF extraction. Task-6065246
This update creates a direct connection between Documents and Project Tasks, resolving a previous issue where attachments and saved documents weren't automatically linked. Now, documents created from Project Tasks will automatically include a link back to the task, improving workflow and organization.
Original PR description
Previously, there was no connection between the Documents app and Project Tasks (`project.task`). Attachments added to a task via the chatter were not synced to the Documents app, and documents manually saved from the chatter lacked a link back to the corresponding task. This commit introduces a link between them by posting a message in the created document's chatter, linking it back to the task. This solution is specifically for stable versions. On `master`, we introduce a proper bridge. task-5941719 Forward-Port-Of: odoo/enterprise#111996
This update fixes an issue where global invoices generated from customer invoices weren't correctly including the issued address's zip code in the XML export. The change ensures that the correct shipping information is accurately reflected in the required Mexican tax documents. This improves compliance and data accuracy for Mexican VAT reporting.
Original PR description
**STEP TO REPRODUCE** 1. install l10n_mx_edi_extended. 2. Add an issued address on the customer invoice journal, with a zip code. 3. Create invoices, and create a global invoice with them. 4. download the xml, and notice the field LugarExpedicion is not using the zip from the issued address while it should. opw-5956837 Forward-Port-Of: odoo/enterprise#112223 Forward-Port-Of: odoo/enterprise#108732
This update removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, users were redirected to enable the feature, which wasn't ideal for all tax return types. Now, users can access all tax returns regardless of the GST e-filing setting.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests…
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Com PR: https://github.com/odoo/odoo/pull/247216 Task-5486586 Forward-Port-Of: odoo/enterprise#105983
This update resolves an issue where the LU VAT reports were incorrectly showing only the first product with a missing internal reference. Now, the report accurately displays all products that needed this reference set, ensuring accurate VAT reporting for Luxembourg businesses. This addresses a previous reporting error.
Original PR description
This is one of several commits fixing the FAIA xml export. The internal reference must be set for all products reported in the FAIA report. When there are multiple products missing this field, our previous code only reported the first ID to the customer. This commit shows the customer all incorrectly configured products. opw-5427296, opw-6113665 Forward-Port-Of: odoo/enterprise#113563 Forward-Port-Of: odoo/enterprise#113452
This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within Odoo's list views. The fix ensures that opening the web studio is properly protected, preventing the previous instability. This improves the overall stability and usability of the Enterprise edition.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
This update corrects a technical issue within the web_studio report editor that was causing unwanted formatting placeholders to appear in generated reports. This prevented reports from printing correctly, and the fix ensures that layouts are properly formatted during the report generation process. The change improves report quality and reliability.
Original PR description
… sections Before this commit, the html_editor automatically put placeholders between hearder, article and footer nodes (identified with classes) This is caused by odoo/odoo@edf7f7bb0c62978640c181eccb4934855d5d872d. This caused issues because at print time those cracks are not printed because of base/ir_actions_report.py:def _prepare_html (which separates header, footer, and articles to pass them to wkhtmltopdf) After this commit, those placeholders are not present in those cracks. opw-6048955 Forward-Port-Of: odoo/enterprise#112458
This update streamlines the loading of data for the self-ordering point-of-sale system. By limiting the fields loaded, we've optimized performance and reduced the load on the system, particularly for self-ordering transactions. This results in a faster and more responsive experience for users.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. X-original-commit: ce78609b368e541a70c17141ee5b51543c73c1d0
This update resolves an issue where submitting helpdesk tickets with emails in different capitalization (e.g., 'partner@mail.com' vs. 'Partner@mail.com') would incorrectly create a new partner. Now, the system correctly identifies and uses the intended partner, preventing duplicate entries and ensuring accurate ticket assignment.
Original PR description
**Steps to reproduce** - Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123"). - Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com"…
**Steps to reproduce**
- Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123").
- Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com" as email (notice the different capitalization) and "456" as phone number.
Behavior without this fix: a new partner is created, but the ticket is assigned to the orignal partner ("partner@mail.com") and its phone number is updated.
Behavior after this fix: no partner is created.
**Causes**
- the partner search was case sensitive
- the created partner was not used as the `partner_id` of the ticket as it was added to the params but needs to be in the kwargs passed to `handle_website_form` in order to be found used by `extract_data`. The original partner was found in `_find_or_create_partner` by the call to
`_mail_find_partner_from_emails` (case-insensitive)
Note: this commit also ensures consistency between the partner's company and the ticket's company (same as in `_find_or_create_partner` of `helpdesk.ticket`).
Also, avoid allowing modifying existing partner's phone via this form.
opw-5914064
Forward-Port-Of: odoo/enterprise#109393This update fixes an issue where search filters applied in the Manufacturing Production Scheduling (MPS) view would disappear when navigating away and returning via the breadcrumb. The fix ensures that the search state is correctly maintained, providing a more consistent and user-friendly experience for users working with MPS reports.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
This update resolves an issue where prompts within email templates weren't being evaluated correctly. The fix ensures that all prompt containers are wrapped in a `<div>` element, preventing errors and guaranteeing prompt evaluation. This improves the functionality of AI-powered email templates.
Original PR description
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to…
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to reproduce: - Create a new email template. - Insert a prompt by using the '/prompt' command. - Type any prompt like 'Say Hello'. - Save the email template. - Click on preview. - The prompt isn't evaluated. The '_eval_ai_prompts' method creates a root element from the passed html content. When the passed content represents a single prompt container html element, the root will become that prompt container. The method will try to evaluate the prompt and replace the prompt container and then return the root. The returned root won't contain the evaluation of the prompt in this case because the whole root should be replaced by the evaluation given that there is no other elements. To fix this, the html content will always be wrapped in a `<div>` to avoid the need for replacing the whole root element. Forward-Port-Of: odoo/enterprise#111645 Forward-Port-Of: odoo/enterprise#110247
4 changes
Resolved issues and error corrections
This update resolves an error preventing customers from successfully connecting or refreshing their Shopee accounts through the Odoo module. The fix corrects a technical issue within the module's code that was causing an error during the authorization process. New automated tests have been added to ensure this functionality remains stable.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within a list view's optional fields dropdown in Odoo Studio. The fix ensures Studio isn't opened multiple times simultaneously, preventing the instability. This improves the user experience and reliability of Studio.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
This update corrects a bug where ticket submissions with emails using different capitalization would incorrectly create a new partner record. Now, the system correctly identifies and uses the submitted email address to create a ticket without generating a new partner, ensuring accurate ticket assignment and data management.
Original PR description
**Steps to reproduce** - Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123"). - Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com"…
**Steps to reproduce**
- Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123").
- Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com" as email (notice the different capitalization) and "456" as phone number.
Behavior without this fix: a new partner is created, but the ticket is assigned to the orignal partner ("partner@mail.com") and its phone number is updated.
Behavior after this fix: no partner is created.
**Causes**
- the partner search was case sensitive
- the created partner was not used as the `partner_id` of the ticket as it was added to the params but needs to be in the kwargs passed to `handle_website_form` in order to be found used by `extract_data`. The original partner was found in `_find_or_create_partner` by the call to
`_mail_find_partner_from_emails` (case-insensitive)
Note: this commit also ensures consistency between the partner's company and the ticket's company (same as in `_find_or_create_partner` of `helpdesk.ticket`).
Also, avoid allowing modifying existing partner's phone via this form.
opw-5914064
Forward-Port-Of: odoo/enterprise#109393Users can now consistently maintain their search filters within the Manufacturing Production Planning (MPS) view. Previously, returning to the MPS view after navigating away would clear the applied filters. This fix ensures the system remembers and applies the user's search criteria, improving workflow efficiency.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
12 changes
Resolved issues and error corrections
This update resolves an error preventing customers from connecting or refreshing their Shopee accounts through the Odoo module. The fix corrects a technical issue within the module's code that was causing authorization failures. New automated tests have been added to ensure this functionality remains stable going forward.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update fixes an issue where sale orders were incorrectly using the analytic distribution account from Company A instead of the correct Company B when multiple companies were involved. The change ensures that the system accurately assigns the appropriate project and analytic account based on the company context of the sale order, improving financial reporting accuracy.
Original PR description
Pre-requisites: ------------------------------------------ 1. Install `sale_project` and `project_account_budget` modules 2. Have two companies configured in the system 3. Enable Timesheets from the…
Pre-requisites:
------------------------------------------
1. Install `sale_project` and `project_account_budget` modules
2. Have two companies configured in the system
3. Enable Timesheets from the Settings app
4. Create two projects (one for each company)
5. Ensure the following settings are enabled on both projects:
* Timesheets
* Billable
Steps to Reproduce:
------------------------------------------
1. Switched to Company A
2. Create a product with:
* Type: Service
* Create on Order: Task
* No company restriction
3. Set the product's `project_id` to Company A's project
4. Switch to the newly created company (Company B)
5. Set the product's `project_id` to Company B's project
6. Enable Analytic Distribution from SOL Optional
7. Create a sale order with the configured product, and delete the auto-fetched
Analytic Distribution account for the sale order (Company B's project)
8. Now confirm the sale order
Observation:
----------------------------------------
The SOL's analytic distribution uses the analytic account from Company A's project instead of Company B
Issue:
----------------------------------------
The `project_id` field on `product.template` is `company_dependent=True`, meaning it stores different values per company. However, in `_compute_analytic_distribution()`, the code accesses `line.product_id.project_id` without calling `with_company`, so it resolves the field using the wrong company context
Solution:
----------------------------------------
using `with_company()`, the correct company context is applied when accessing
`project_id`, preventing inconsistencies in multi-company environments and
ensuring the appropriate project is used for the corresponding company.
opw-5864452
Forward-Port-Of: odoo/odoo#257776This update fixes an error in the leave balance report that was miscalculating employee leave accruals and balances, particularly when leaves spanned multiple years. The fix ensures accurate reporting by addressing timezone issues and improving how overlapping leave periods are handled, leading to more reliable leave data.
Original PR description
__ISSUE__: - FIFO balance miscalculation for non-overlapping allocations. cumulative_allocated_days was partitioned globally by (employee, leave_type), but taken_per_allocation scoped leaves to each…
__ISSUE__:
- FIFO balance miscalculation for non-overlapping allocations. cumulative_allocated_days was partitioned globally by (employee, leave_type), but taken_per_allocation scoped leaves to each allocation's date range. This caused the FIFO formula to silently absorb leaves from one period into another's allocation capacity.
ex:
Alloc A (20 days) 2025, taken leaves 15 days
Alloc B (20 days) 2026, taken leaves 5 days
report: 2025: (15 taken), (5 left)
2026: (7 taken), (20 left)
- Left" rows shifted by one year in non-UTC timezones. Allocation date_from/date_to (Date fields) were cast to timestamp as midnight UTC. In negative-UTC /positive-UTC timezones midnight UTC of Dec 31 renders as the prev/next day.
__FIX__:
- detect overlap groups using a running MAX(date_to) and partition the cumulative sums within each overlap group. This way non-overlapping allocations are treated as independent, while overlapping or open-ended allocations still share FIFO within their group.
- offset allocation dates by 12 hours so no timezone can shift them across a day boundary.
- opw-5169606
- opw-5352114
Forward-Port-Of: odoo/odoo#257873This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within Odoo's list views. The fix prevents the studio from opening multiple times simultaneously, ensuring a stable user experience. This improves reliability for users adding custom fields to their lists.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
This update fixes an issue where delivery slips incorrectly displayed product prices in the company currency instead of the customer's order currency. This ensures accurate pricing and invoicing for sales made in foreign currencies, improving financial reporting and customer satisfaction. The change was triggered by a previous bug fix.
Original PR description
The product value reported on delivery slips may incorrectly use the company currency instead of the order currency. Steps to reproduce: - Enable multi-currency and create a foreign currency - Create a pricelist in the foreign currency - Create and confirm a Sale Order using that pricelist - Add a delivery via carrier (eg. Fedex) - Confirm the delivery and generate the commercial invoice. Issue: The 'sale_price' on the stock move lines is taken in company currency rather than order currency. opw-6104130 Forward-Port-Of: odoo/odoo#258875
This update fixes an issue where sales orders with fully returned products incorrectly displayed as 'Fully Invoiced'. The fix ensures that the invoice status accurately reflects zero delivered and invoiced quantities after a customer returns a product, preventing incorrect invoicing and improving order accuracy.
Original PR description
### Issue before this commit: When a sales order with a product invoiced on delivered quantities is fully delivered and then completely returned the delivered quantity is reset to zero. In this…
### Issue before this commit: When a sales order with a product invoiced on delivered quantities is fully delivered and then completely returned the delivered quantity is reset to zero. In this situation, where nothing has been invoiced and nothing remains to be invoiced, the invoice status of the sales order line is incorrectly set to "Fully Invoiced" instead of "Nothing to Invoice". ### Steps to reproduce the issue: 1. Create a new quotation for a storable product. 2. Confirm the order. 3. Validate the delivery of the product. 4. Perform a return for the product 5. Validate that return to simulate a customer return. 6. The sales order details correctly reflect that the delivered quantity and invoiced quantity are both zero. Despite these values—which indicate there is nothing to invoice—the invoice status on the quotation erroneously displays as "fully invoiced". ### Cause of the issue: The invoice status computation includes a fallback logic that marks a sales order line as "invoiced" when all related stock moves are either done or cancelled. However, this logic does not verify whether any quantity remains effectively delivered. As a result, after a full return, even when qty_delivered = 0, the condition is still met and the line is incorrectly marked as fully invoiced. ### Reason to introduce the fix: A fully returned sales order line with no delivered and no invoiced quantity should not be considered fully invoiced. The fix ensures that the fallback to "invoiced" only applies when there is a strictly positive delivered quantity, preventing incorrect invoice status after full customer returns. opw-6014772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257942 Forward-Port-Of: odoo/odoo#254871
This update fixes a problem where action buttons in email notifications (like 'View Quotation') weren't consistently translated correctly for recipients in different languages. The change ensures the email composer uses the correct language context, resulting in fully accurate translations for all users, regardless of their language settings.
Original PR description
When sending a quotation or sales order via email to a follower, the action button in the notification (e.g., "View Quotation") was appearing partially translated in the recipient's language. The issue came from the document description being explicitly evaluated using the sender's language context usually English) during the email composition phase, so it could not be correctly re-translated by the mail engine when rendering the final layout for a recipient using a different language. This commit allows the language context to be dynamic when preparing the document description for the email composer, ensuring the action button is fully and accurately translated. --- opw-5976084 Forward-Port-Of: odoo/odoo#257349 Forward-Port-Of: odoo/odoo#256077
This update corrects a problem where electronic invoices generated with units of measure containing special characters (like m² or m³) failed validation by the Italian tax authority (FatturaPA). The fix ensures that units of measure are properly formatted before being included in the XML, guaranteeing compliance with the required standards and preventing invoice rejection.
Original PR description
### Issue before this commit: When generating the electronic invoice XML (FatturaPA) with units of measure containing non-standard Unicode characters (e.g. m², m³), the resulting XML fails…
### Issue before this commit: When generating the electronic invoice XML (FatturaPA) with units of measure containing non-standard Unicode characters (e.g. m², m³), the resulting XML fails validation, as these characters are not accepted by the SdI format. ### Steps to reproduce the issue: 1. Download Italian loc + electronic invoicing 2. Activate UoM option in settings 3. Set a product UoM in any unit that has an apex/power of (ex. m2, m3) 4. Invoice this product 5. Create the XML for SdI 6. Check format with Fex > apex is not recognised as a valid character ### Cause of the issue: The UoM name is exported as-is into the XML. Non-standard Unicode characters are preserved during formatting and are not compatible with the allowed character set defined by the FatturaPA specifications. ### Reason to introduce the fix: Ensure that units of measure are normalized into a compatible representation before being included in the XML, so that the generated file complies with SdI validation rules. opw-6075119 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258851 Forward-Port-Of: odoo/odoo#257012
This update ensures that all participant answers are now consistently included when surveys are printed, regardless of the survey type. Previously, certain survey types omitted answers, leading to inaccurate and incomplete reports. This change improves the reliability and usefulness of survey data for analysis and reporting.
Original PR description
Previously, printing surveys of type scoring_without_answers omitted participants' answers, resulting in incomplete and inconsistent reports. This commit ensures answers are always included, regardless of survey type. Task-5407701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258616
This update prevents errors during invoice settlement when the commercial partner information wasn't fully loaded. By directly using the partner ID from the invoice data, the system now reliably settles invoices without interruption. This improves the stability and usability of the point-of-sale system.
Original PR description
Before this commit, it was possible that commercial_partner_id was not loaded, which caused an error when settling an invoice. This commit fixes the issue by avoiding the need to load the full partner record. Since only the partner ID is required to load the account move, it is now read directly from the raw data, which already includes the ID. opw-6023150
This update resolves an issue where ticket submissions with emails in different capitalization formats would incorrectly create a new partner record. Now, the system correctly identifies and uses the provided email address to create the ticket, preventing duplicate partner creation and ensuring accurate ticket assignment.
Original PR description
**Steps to reproduce** - Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123"). - Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com"…
**Steps to reproduce**
- Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123").
- Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com" as email (notice the different capitalization) and "456" as phone number.
Behavior without this fix: a new partner is created, but the ticket is assigned to the orignal partner ("partner@mail.com") and its phone number is updated.
Behavior after this fix: no partner is created.
**Causes**
- the partner search was case sensitive
- the created partner was not used as the `partner_id` of the ticket as it was added to the params but needs to be in the kwargs passed to `handle_website_form` in order to be found used by `extract_data`. The original partner was found in `_find_or_create_partner` by the call to
`_mail_find_partner_from_emails` (case-insensitive)
Note: this commit also ensures consistency between the partner's company and the ticket's company (same as in `_find_or_create_partner` of `helpdesk.ticket`).
Also, avoid allowing modifying existing partner's phone via this form.
opw-5914064
Forward-Port-Of: odoo/enterprise#109393This update fixes an issue where search filters applied in the Manufacturing Production Scheduling (MPS) view would disappear when navigating away and returning via the breadcrumb. The fix ensures that the search state is correctly maintained, providing a more consistent and reliable user experience for filtering MPS data.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
4 changes
Enhancements to existing features
This update enhances the reliability of order updates for German Point of Sale (POS) certifications by ensuring sequential processing of changes. Additionally, redundant UI validation for ZIP codes and addresses has been removed, streamlining the user experience. This change improves order consistency and reduces unnecessary steps for users.
Original PR description
In this commit: ------------------- - We have added logic to execute API calls using a mutex for order updates (such as line updates and removals). This ensures that each update is processed (sequentially), allowing us to properly track and maintain order consistency. - We removed the ZIP and address validation on the UI since the backend already assigns default values if they are missing. So, there’s no need to restrict the user on the UI. task:5941742 Forward-Port-Of: odoo/enterprise#108694
Resolved issues and error corrections
This update resolves an error preventing customers from connecting or refreshing their Shopee accounts through the `sale_shopee` module. The fix corrects a technical issue within the module's code that was causing errors during the authorization process. New tests have been added to ensure this functionality remains stable.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update resolves an issue where ticket submissions with emails in different capitalization (e.g., 'partner@mail.com' vs. 'Partner@mail.com') would incorrectly create a new partner. Now, the system correctly identifies and uses the submitted email to create the ticket without unnecessary partner creation.
Original PR description
**Steps to reproduce** - Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123"). - Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com"…
**Steps to reproduce**
- Create a first partner (name: "Partner", email: "partner@mail.com", phone: "123").
- Go to the website form of a helpdesk team, and submit a ticket using "Partner@mail.com" as email (notice the different capitalization) and "456" as phone number.
Behavior without this fix: a new partner is created, but the ticket is assigned to the orignal partner ("partner@mail.com") and its phone number is updated.
Behavior after this fix: no partner is created.
**Causes**
- the partner search was case sensitive
- the created partner was not used as the `partner_id` of the ticket as it was added to the params but needs to be in the kwargs passed to `handle_website_form` in order to be found used by `extract_data`. The original partner was found in `_find_or_create_partner` by the call to
`_mail_find_partner_from_emails` (case-insensitive)
Note: this commit also ensures consistency between the partner's company and the ticket's company (same as in `_find_or_create_partner` of `helpdesk.ticket`).
Also, avoid allowing modifying existing partner's phone via this form.
opw-5914064
Forward-Port-Of: odoo/enterprise#109393This update fixes an issue where users would lose their search filter selections in the MRP Planning view (MPS) after navigating away and returning. The fix ensures that search filter state is correctly maintained, improving the user experience and allowing users to quickly resume their planning tasks. This resolves a minor usability problem.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
37 changes
New functionality added to Odoo
This update introduces new premium pay categories within the payroll system, allowing businesses to accurately account for overtime and special pay arrangements like night shifts, weekends, holidays, team bonuses, and miscellaneous payments. This enhancement improves payroll accuracy and reporting for companies with employees receiving these additional compensation types.
Original PR description
add premium pay categories and rules for night, sunday, holiday, team, and miscellaneous Task: 6033393
This update introduces a required report, DAS2, for French businesses to comply with tax regulations when declaring payments to third-party service providers. It aligns with French legal requirements and ensures accurate financial reporting. A related update also ensures data consistency across Odoo modules.
Original PR description
This PR introduces the DAS2 report for the French localization. This report is essential for companies to comply with French tax regulations and is used to declare payments made to 3rd party service providers. Task ID: 4894097
This update enhances the AI agent's understanding of Odoo's core models by introducing a dedicated 'explanation' field. This allows the AI to generate more relevant and detailed context for its operations, improving its performance and accuracy. The change impacts several key enterprise modules like HR and Sales, leading to better AI-driven insights.
Original PR description
This PR introduces a dedicated _explanation attribute to Odoo's core models and actions to provide verbose, LLM-targeted context. Previously the AI agent relies on the _description attribute, which in fact has little to do with action of describing. It just the human readable display name of the model. By adding a separate explanation field to `ir.model` and `ir.actions.actions`, we can now provide better explainability of the model for both ai and humans use. This PR has introduced a selection of description. Future work should continue to add more in the future. https://github.com/odoo/odoo/pull/256616/ task-6009099
Enhancements to existing features
This update optimizes Odoo's startup speed by delaying the loading of a specific library (openpyxl). This change reduces startup time by approximately 100ms and allows Odoo to function without this library, improving overall system responsiveness. It's a small but important performance enhancement.
Original PR description
This is the only module loading it eagerly at startup. We can save at least 100ms by moving it to the function that uses it. Moreover, this way we can start odoo without openpyxl being available.
This update incorporates changes from the Odoo community to enhance tracking functionality across multiple modules. Specifically, it simplifies tracking value checks and adds new tracking tests, particularly in appointment flows and mail tracking. The changes improve the reliability and accuracy of tracking data within Odoo.
This update enhances budget reporting by automatically incorporating asset accounts (current, non-current, and fixed) into budget tracking. Previously, budget reports only covered expense accounts; now, users can gain a more complete financial picture, especially when tracking expenses related to company assets.
Original PR description
Expand the scope of budget tracking to include asset accounts. Modified the account filtering logic so that when a budget type is set to "Expenses" or "Both", the query includes 'asset_current', 'asset_non_current', and 'asset_fixed' account types. task-5994048 Forward-Port-Of: odoo/enterprise#112239 Forward-Port-Of: odoo/enterprise#109496
This update simplifies quotation templates by organizing advanced settings into a dedicated tab, reducing clutter. Subscription-related fields are now only shown when subscriptions are included, and template sharing is now explicitly enabled, ensuring better data management and a cleaner user experience.
Original PR description
This commit enhances the quotation template form view by moving advanced options into a dedicated **Settings** tab, making the form cleaner. Subscription-related fields are now displayed only when the template contains at least one subscription product, avoiding unnecessary clutter. The visibility logic has been refined: templates are shared globally only when `share_template` is explicitly enabled. Demo data has been updated accordingly to reflect this behavior. Additionally, some Many2one relations have been adjusted to align with the introduction of section templates. task-5946222 See Also: - https://github.com/odoo/odoo/pull/250390
This update streamlines the employee form by dynamically showing only relevant benefit information based on each company's configuration. It consolidates payroll data and removes unused modules, resulting in a cleaner and more efficient user experience for HR teams. This change improves performance and reduces complexity.
Original PR description
### **Overview** The employee form view has become increasingly cluttered with benefit-related fields that are often irrelevant to specific company configurations. This PR introduces a dynamic…
### **Overview** The employee form view has become increasingly cluttered with benefit-related fields that are often irrelevant to specific company configurations. This PR introduces a dynamic mechanism to "lighten" the UI by linking views directly to specific benefits. Key Change: Benefit-related views and salary rules are now conditional. If a benefit is deactivated, its corresponding fields and view elements will no longer appear on the employee form. ### **Technical Changes** Several models and calculations have been moved: `hr.contract.salary.benefit`: Moved from hr_contract_salary to hr_payroll. Yearly Cost Calculation: Logic has been migrated to hr_payroll. Payroll Properties : Activation is now based on the active field of the salary rule Signature & Configurator: The logic specifically tied to the salary configurator and document signing remains in hr_contract_salary. ### **2. Dynamic View Management** view_ids Field: Added to hr.contract.salary.benefit. Benefit-specific UI components are now defined in separate views, which are activated/deactivated based on the benefit's active field. ### 3. Module Consolidation & Cleanup hr_contract_salary_payroll: Merged into hr_contract_salary to reduce module overhead. hr_contract_salary_holidays: Removed. This module contained significant dead code and is no longer required. Data Migration: Localized benefit data has been moved from l10n_be_hr_contract_salary to l10n_be_hr_payroll
This update enhances the budgeting process by clearly separating purchase order commitments (representing expected purchases) from actual invoice liquidations (representing paid invoices). This improved distinction provides more accurate budget tracking and reporting, leading to better financial insights.
Original PR description
Improve the budget committed and liquidation aspects by distinguishing them. Committed represents purchase orders while liquidation represents invoices. task-6067368
This update enhances the accuracy of account reconciliation by ensuring that deferred dates reversal moves are correctly matched with their original transactions. This resolves a potential issue where reconciliation reports might have been incomplete, leading to inaccurate financial reporting. The change impacts the core accounting processes within Odoo Enterprise.
Original PR description
This commit makes that the deffered dates reversal move debit lines reconciled with their corresponding credit lines from the original move. task-5902974
This update enhances the accuracy of German point-of-sale (POS) transaction reporting by refining how transactions are tracked and managed. Specifically, the system now correctly records transaction start and end times, and ensures all active transactions are cleared at the end of each session, aligning with updated tax regulations. This improves data reliability and compliance.
Original PR description
In this commit: ------------------ - The transactions were shown to be processed within 0-1 seconds as we were used to call start and finish transaction calls on validation so in the case of retails it won't give actual data of start and end time so we need to improve this and called now for `start transaction` when first orderline added to a new order, calling `cancelled` if the order is deleted or all the orderlines are removed manually, and `finished` on validation of the order. - Also will delete all active transactions on the fiskaly at the time of closing of session so that no active order remains (if cleared cache) As a lot things are already handled in v19 Handled https://github.com/odoo/enterprise/pull/99216 pr's remaining updates here. Forward-Port-Of: odoo/enterprise#113669 Forward-Port-Of: odoo/enterprise#107530
This update enhances the visual presentation of return reports within Odoo, specifically focusing on the kanban view, checks view, and dashboard card. The changes prioritize highlighting return deadlines to improve urgency awareness and streamline the user experience.
Original PR description
improve the styling of the kanban/list view of returns, the checks view and the dashboard card related to the returns. Focus primarily on bringing the deadline more visibility about the urgency. Slighlty clean the templates as well by optimizing divs and classes. task-6082300
This update clarifies how recurring products are handled in Odoo Enterprise. The name of a key field has been changed from `has_subscription_products` to `has_recurring_products` to better reflect its purpose: controlling which fields are displayed on order templates. This ensures accurate product visibility for subscription-based sales.
Original PR description
Rename `has_subscription_products` to `has_recurring_products` to avoid confusion. Recurring products are only treated as subscriptions when a plan is set; here we only check if products can be sold recurringly to control some fields' visibility on `sale.order.template`
Resolved issues and error corrections
The 'Validate' button for GSTR1 and GSTR2B returns was temporarily hidden. This fix corrects a technical issue caused by a recent code change, ensuring the button is now correctly displayed for these return types. This ensures users can properly process and submit their GSTR filings.
Original PR description
The Validate button was not visible for GSTR1 and GSTR2B return types. This issue was introduced after the removal of the 'new' state from l10n_in_gstr1_status and l10n_in_gstr2b_status in commit: https://github.com/odoo/enterprise/commit/8058bf55918bd0c1ac0de52d696de67ce0b3b45b As a result, the button visibility condition relying on state = 'new' was no longer valid, since the initial state is now represented by False (i.e., no value set) instead of an explicit 'new' selection. This fix updates the visibility condition to correctly handle the new default state and restores the expected behavior. task-6105435
This update fixes an issue where dropdown menus within the softphone wouldn't close when clicking outside the softphone. This improvement ensures consistent navigation and usability when using the softphone, aligning with recent changes to modal behavior. The fix was implemented to restore expected dropdown functionality.
Original PR description
Since [1] (and its follow-up commits), the softphone became the "UI active element" once it opens. This was required to solve multiple keyboard navigation issues that occurred while being on the app…
Since [1] (and its follow-up commits), the softphone became the "UI active element" once it opens. This was required to solve multiple keyboard navigation issues that occurred while being on the app switcher with the softphone opened. It also simply improved navigation any time the softphone is used, allowing it to close on ESC, etc. This is also consistent with what is being done at [2] where the softphone will get closer to modal behavior. However, it came with a bug: dropdown inside and outside the softphone were not closed anymore if clicking outside the softphone. E.g.: - Open the user dropdown menu - Click outside => it closes - Open the softphone - Open the user dropdown menu - Click outside => It does not close anymore This commit adds a test about it. The fix lies in the dropdown closing logic in the community counter-part of this PR. [1]: https://github.com/odoo/enterprise/commit/df1772e877a508150fd3f549526dec9d867354be [2]: https://github.com/odoo/enterprise/pull/111337 task-6055692 Forward-Port-Of: odoo/enterprise#111516
This update resolves issues with the payrun window's filters in Hong Kong, ensuring accurate reporting. It corrects a misconfiguration related to employee type filtering and removes an unnecessary file that was causing problems. These changes improve the reliability and accuracy of payroll processing for Hong Kong users.
Original PR description
[FIX] l10n_hk_hr_payroll: new payrun employee selection Fixes a few issues with the payrun window causing the filters to not work well in Hong Kong. - The override wasn't updated for the new employee type filter - When eMPF was merged into the base module, the js file wasn't added to the backend assets and wasn't loading - Update the JS override to better match the new version of the original file. [FIX] l10n_hk_hr_payroll: remove payrun card The file mas mistakenly reintroduced with the eMPF merging, but unused. The change in manifest done in this pr highlighted that this template is no longer needed and cause issues, so we can properly remove it. task-6108320
This update enhances the stability of the Odoo integration with Fiskaly, primarily by refining error handling and configuration settings. Specifically, the system now correctly manages SCU limits and provides better tracking of company configurations, ensuring smoother operation and accurate data synchronization.
Original PR description
- Retry only on server errors (5xx) instead of client errors (4xx) to avoid masking meaningful API responses with a confusing RetryError. - Reuse the existing active SCU when E_SCU_LIMIT_REACHED is returned, since Fiskaly only allows one active SCU per account. - Pass the pos.config id as metadata when creating a cash register on Fiskaly, making it easier to match Fiskaly register IDs back to their config when the local link is broken. - Hide the test mode toggle once the company is registered with Fiskaly (l10n_at_fiskaly_organization_id is set) to prevent mode changes after registration. opw-5958673 Forward-Port-Of: odoo/enterprise#113601 Forward-Port-Of: odoo/enterprise#113496
This update resolves a critical issue where users could cancel documents after all signatures were collected, potentially compromising legal records. Now, the cancel button disappears automatically after signing is complete, and backend cancellations are blocked to ensure document permanence and security. This protects the integrity of agreements and strengthens legal proof.
Original PR description
Before this commit, users could cancel documents after everyone had signed. This weakened legal records and proof of agreement. After this commit, the cancel button disappears once signing is complete. We also blocked backend cancellations to keep finished documents permanent and secure. task-5980337 Forward-Port-Of: odoo/enterprise#113409 Forward-Port-Of: odoo/enterprise#109353
A recent issue prevented users from accessing server action views correctly within the Document module. This was caused by a priority setting problem in the view configuration. This update resolves the issue by explicitly setting a priority, ensuring the correct server action view is displayed, and improving usability.
Original PR description
When the document module is installed, sometimes the server action view that is shown when accessing the server actions from the normal menu can be broken: the model field for instance is no longer visible, which makes the user interface unusable. <img width="723" height="412" alt="image" src="https://github.com/user-attachments/assets/73f6d516-77be-4f66-80dc-033fd8c0cb7c" /> This is because the document module defines a new primary form view for server actions, but does not set a priority for that view. As a result we have 2 primary views, with the same default priority of 16 in the database, and in that case the sorting of view can lead to the document specific view to be selected, when the other one is expected. We fix this by explicitly setting a priority of 32 on the form view in the document module. Forward-Port-Of: odoo/enterprise#112847
This update creates a direct link between Documents and Project Tasks, resolving a previous issue where attachments and saved documents weren't automatically connected. Now, documents created from Project Tasks will automatically include a link back to the task, improving workflow and organization.
Original PR description
Previously, there was no connection between the Documents app and Project Tasks (`project.task`). Attachments added to a task via the chatter were not synced to the Documents app, and documents manually saved from the chatter lacked a link back to the corresponding task. This commit introduces a link between them by posting a message in the created document's chatter, linking it back to the task. This solution is specifically for stable versions. On `master`, we introduce a proper bridge. task-5941719 Forward-Port-Of: odoo/enterprise#111996
This update fixes an issue where the LU VAT reports were incorrectly showing only the first product ID instead of all products with missing internal references. This ensures accurate reporting for Luxembourg VAT compliance, addressing a previous data discrepancy and improving report reliability.
Original PR description
This is one of several commits fixing the FAIA xml export. The internal reference must be set for all products reported in the FAIA report. When there are multiple products missing this field, our previous code only reported the first ID to the customer. This commit shows the customer all incorrectly configured products. opw-5427296, opw-6113665 Forward-Port-Of: odoo/enterprise#113563 Forward-Port-Of: odoo/enterprise#113452
This update fixes an issue where the employee health warning incorrectly flagged employees with long sick leaves prior to 31 days. The change adjusts the logic to include employees who have been on sick leave for at least the past 31 days, ensuring more accurate health assessments. This improves the reliability of the warning reports.
Original PR description
-**Issue**: The warning shows employees who had a long sick leaves before 31 days, which is incorrect. -**Fix**: Adjust the logic to include employees who have been on a sick leave for the past 31 days (at least). Forward-Port-Of: odoo/enterprise#113443 Forward-Port-Of: odoo/enterprise#112985
This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within a list view's optional fields dropdown in Odoo Studio. The fix prevents Studio from opening multiple times simultaneously, ensuring a stable user experience. This improves reliability and prevents data loss.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
This update ensures CSV files are now correctly recognized as viewable within Odoo's list views, mirroring the behavior in the Kanban view. Previously, CSV files were ignored in list views, creating a discrepancy in functionality. This change enhances usability and consistency across Odoo.
Original PR description
Current behavior before PR: - CSV files were viewable from the Kanban view, and opened the spreadsheet conversion dialog - In list view, CSV files were not considered viewable - Same issue for trashed CSV files in list view Desired behavior after PR is merged: - Consider CSV files as viewable in list view - Align behavior with the Kanban view Task: 6052134 Forward-Port-Of: odoo/enterprise#113586 Forward-Port-Of: odoo/enterprise#112869
This update fixes a bug in the payroll system where warning messages weren't displaying all employees needing review – specifically those marked as 'anomaly'. Now, warning messages accurately include employees in both 'to review' and 'anomaly' states, ensuring accurate review processes and better compliance.
Original PR description
Currently, when a payrun has some employees whose review state is "to review" or "anomaly", a warning message for review is shown, but it shows only employees records with "to review" state. This commit adds the employees with "anomaly" state as well. task-6095318
This update resolves a critical error preventing customers from connecting or refreshing their Shopee accounts through the Odoo module. The fix corrects a technical issue within the module's code, ensuring a smoother onboarding experience. New automated tests have been added to prevent similar problems in the future.
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
This update fixes a problem where the payroll dashboard displayed warnings for all companies, even when a user was only working with one. Now, the dashboard only shows warnings related to the company the user is currently managing, ensuring more relevant and accurate alerts. This improves the user experience and data clarity.
Original PR description
This commit will restrict the payroll dashboard alerts to only display warnings relevant to the user's currently selected company.
**Why:**
Previously, the payroll dashboard search method fetched and displayed warning of `Employees Without Running Contract` from all companies in the database, regardless of the user's active company context.
**What:**
- Added a domain filter ('company_id', '=', self.env.company.id) to the search query.
task-6095361This update fixes an issue where search filters in the MRP Planning section (MPS) were lost when users navigated away and returned. The fix ensures that search filters are correctly retained, providing a more consistent and efficient user experience. This improves usability and data accuracy.
Original PR description
Issue: In the MPS view, when the user sets a search filter, navigates away and then returns via the breadcrumb, the search filters that were applied are gone. This happened because the MPS client action was not passing `globalState` to the `WithSearch` component. Fix by passing `globalState` in `withSearchProps`. task-5368078 Forward-Port-Of: odoo/enterprise#113183 Forward-Port-Of: odoo/enterprise#113125
This update corrects payroll tax rates in the Belgian HR payroll module (l10n_be_hr_payroll) to reflect the latest regulations for the year 2026. This ensures accurate tax calculations and compliance for employees and the company. The change is a technical fix to maintain correct financial reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#113426
This update resolves an issue where prompts within email templates weren't being evaluated correctly. The fix ensures that all prompt containers are wrapped in a `<div>` to prevent errors during evaluation, guaranteeing prompts now function as intended. This improves the reliability of AI-powered email content.
Original PR description
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to…
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to reproduce: - Create a new email template. - Insert a prompt by using the '/prompt' command. - Type any prompt like 'Say Hello'. - Save the email template. - Click on preview. - The prompt isn't evaluated. The '_eval_ai_prompts' method creates a root element from the passed html content. When the passed content represents a single prompt container html element, the root will become that prompt container. The method will try to evaluate the prompt and replace the prompt container and then return the root. The returned root won't contain the evaluation of the prompt in this case because the whole root should be replaced by the evaluation given that there is no other elements. To fix this, the html content will always be wrapped in a `<div>` to avoid the need for replacing the whole root element. Forward-Port-Of: odoo/enterprise#111645 Forward-Port-Of: odoo/enterprise#110247
This update fixes an issue where appointment booking descriptions were displayed in the user's language instead of the website's language. Previously, the system used the user's language setting, regardless of the website's language. Now, booking descriptions will correctly display in the website's language (e.g., French) for users with different language preferences.
Original PR description
When booking an appointment, the cart shows the date/time in the partner's language instead of the website's language. `_prepare_order_line_values` uses `self.partner_id.lang`, ignoring the website language and using the user's language instead. Steps to reproduce: 1. Have a website language different than the user's language 2. Go to the website appointment page 3. Book an appointment 4. Check the booking For this case: - Website language: French - User language: English => You will find, "xxx at xx:xx to yyy at yy:yy" instead of "xxx à xx:xx au yyy à yy:yy" Ticket [link](https://www.odoo.com/odoo/action-4043/5931610) opw-5931610 Forward-Port-Of: odoo/enterprise#113208 Forward-Port-Of: odoo/enterprise#107698
This update resolves an issue where 'Hide Composition' sections weren't consistently hidden in the portal preview. The fix ensures that sections with hidden products are correctly masked, matching the behavior in PDF reports. This improves the accuracy of sales order previews for customers.
Original PR description
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still…
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still visible in the portal's 'preview' view, whereas they are correctly hidden in the PDF report. **Expected behavior:** As observed in pdf format, in preview, the hidden section should hide the components and only view the name of the section. **Steps to reproduce:** - Create quotation with One Goods type product - Add section with Hide composition - Add service type product in the section - Preview it and section products will be hidden - Confirm the quotation and now preview the sales order - Now the hidden section products will be visible **Solution:** - We need to separate the logic of displaying lines and invoiceable lines (since _get_invoiceable_lines doesn't necessarily return the sections/subsections) - The filtering in sale subscription module wasn't considering the `collapse_composition` boolean field, which why hidden sections content were displayed. - We need to hide any product with a parent (section or subsection) collapsed, hide any subsection with a parent section collapsed. opw-5868148 Forward-Port-Of: odoo/enterprise#106287
This update resolves a problem where PDF previews within invoices were not displaying correctly after a recent update to the PDF viewer. The fix restores a key setting that allows the system to properly extract and display the embedded PDF data, ensuring invoices with attached PDFs open correctly.
Original PR description
Steps to reproduce: 1. Upload an XML invoice (e.g., UBL) containing an embedded PDF into the Documents app. 2. Select the document to open the preview panel. 3. The viewer opens but shows a…
Steps to reproduce: 1. Upload an XML invoice (e.g., UBL) containing an embedded PDF into the Documents app. 2. Select the document to open the preview panel. 3. The viewer opens but shows a grey/empty PDF viewer. Context: Commit odoo/odoo@5035107e introduced an updated PDF viewer.js. Subsequently, commit d3481a5e removed the `download=0` query parameter from the viewer route to prevent `new URL()` parsing errors on relative paths. However, the backend specifically relies on the `download=0` flag to intercept the request, extract the Base64 data, and serve the raw PDF binary. Without this parameter, the backend serves the raw XML string directly to the PDF viewer, causing the parser to crash. Fix: Restore the `download=0` parameter by using the core `url` utility to construct a safe, absolute URL before encoding it for the viewer. This satisfies the strict `new URL()` parsing in the updated PDF viewer while ensuring the backend correctly triggers the PDF extraction. Task-6065246 Forward-Port-Of: odoo/enterprise#112007
This update resolves a memory issue that was impacting the performance of the HR payroll dashboard. The team optimized the data processing method, switching from complex unions to a simpler list-based approach. This change results in a faster and more stable dashboard experience.
Original PR description
Instead of using union in _group_records_by_schedule and _group_by_warning_and_date we append in a list and browse to avoid memory errors Forward-Port-Of: odoo/enterprise#113543
This update prevents regular employees from modifying the target job within an appraisal. The original system caused access errors because employees lacked the necessary permissions to view company job postings. This change ensures that target job assignments are managed solely by managers, improving data integrity and security.
Original PR description
Steps to reproduce: 1- Create an appraisal for a regular employee 2- Confirm it so its state changes to 'ongoing' 3- Try to change the target job as an employee 4- Click on see more Cause: The main cause is that regular employees lack the privilage to view job postings by a company. therefore an access rights errors is resulted when the flow is executed. Solution: Made the field readonly for normal employees (as it should be, target jobs are the managers' responsibility to change). Forward-Port-Of: odoo/enterprise#112663
This update resolves an issue where users couldn't exclude leaves that were also considered working time. Now, administrators can correctly designate leaves as non-working time, ensuring accurate tracking of employee availability and preventing scheduling conflicts. This improves the accuracy of holiday planning and reporting.
Original PR description
…orking time We can't take leaves considered as working time. We should be able to task-6089849 Forward-Port-Of: odoo/enterprise#112820
Code cleanup and technical improvements
This update refines the Odoo Studio interface to better support mobile devices. Specifically, a change was made to the template naming convention to align with recent improvements that allow colorpickers to appear inline with labels, enhancing the user experience on smaller screens.
Original PR description
This commit renames the o_wrap_field_boolean to o_wrap_field_inline in studio templates, following the community changes made to support colorpicker field inline next to its label on mobile.
15 changes
Enhancements to existing features
This update enhances budget reporting by automatically including asset accounts (current, non-current, and fixed) in budget reports. This provides a more complete financial picture for users who track expenses and budgets related to company assets.
Original PR description
Expand the scope of budget tracking to include asset accounts. Modified the account filtering logic so that when a budget type is set to "Expenses" or "Both", the query includes 'asset_current', 'asset_non_current', and 'asset_fixed' account types. task-5994048 Forward-Port-Of: odoo/enterprise#109496
This update automatically treats new offer start dates within existing contract periods as amendments, creating new contract versions and archiving outdated ones. A warning alerts users to potential replacements, ensuring data accuracy and preventing conflicts. This improves the management of employee contracts and simplifies the versioning process.
Original PR description
**Contract Amendment & Versioning Logic** * When an offer's contract start date falls within an existing contract period, it is treated as a contract amendment (new version) rather than a new…
**Contract Amendment & Versioning Logic** * When an offer's contract start date falls within an existing contract period, it is treated as a contract amendment (new version) rather than a new contract. * For contract amendments, the offer's contract end date is read-only and automatically inherited from the existing contract. * When creating a new offer, any existing versions with effective dates **on or after** the new offer's contract start date are automatically archived, as they likely contain outdated data. * Added a warning to notify users when a new offer will replace existing future versions. **Technical Refactoring** * Simplified the `employee_version_id` computation by delegating to the existing `_get_version` method on the employee model. This ensures the selected employee version correctly matches the contractual state effective at the new offer's * Ensured cache invalidation after rollback savepoints to prevent stale data. The overridden `_get_version` in `hr_contract_salary_payroll` writes to `employee.version_id` and the `contract_template_id`; although rolled back, it polluted the cache. We now always invalidate the cache after rollbacks to avoid inconsistencies, including later module installation. **Simulation & Chatter** * Inside the simulation, when calling `_get_version`, we need to adjust the contract dates of the version being simulated. The main challenge is allocating this simulated version between existing employee versions without creating contract overlaps, since overlaps raise validation errors. * To avoid this issue, we move to a new approach. We archive all versions after `employee.version_id` and set `employee.version_id.contract_date_end = False`. * Then, instead of replacing the active version, we create the simulation version as an amendment to `employee.version_id`. The amendment's effective date is set to `max(fields.Date.today(), employee.version_id.contract_date_start, self.contract_start_date)` + 1 day. This ensures the current version remains unchanged, avoids contract overlaps, and prevents chatter pollution. task: 5408192
Resolved issues and error corrections
This update resolves an issue where 'Hide Composition' sections weren't consistently hidden in the portal preview. The fix ensures that sections with hidden products accurately reflect the 'Hide Composition' setting, matching the behavior in PDF reports. This improves the accuracy of sales order previews for customers.
Original PR description
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still…
**Problem:** Currently, when 'Hide Composition' is enabled on a section containing at least one product, while the order have subscription product, the recurring lines within that section are still visible in the portal's 'preview' view, whereas they are correctly hidden in the PDF report. **Expected behavior:** As observed in pdf format, in preview, the hidden section should hide the components and only view the name of the section. **Steps to reproduce:** - Create quotation with One Goods type product - Add section with Hide composition - Add service type product in the section - Preview it and section products will be hidden - Confirm the quotation and now preview the sales order - Now the hidden section products will be visible **Solution:** - We need to separate the logic of displaying lines and invoiceable lines (since _get_invoiceable_lines doesn't necessarily return the sections/subsections) - The filtering in sale subscription module wasn't considering the `collapse_composition` boolean field, which why hidden sections content were displayed. - We need to hide any product with a parent (section or subsection) collapsed, hide any subsection with a parent section collapsed. opw-5868148
This update fixes an issue where subscription discounts were incorrectly calculated due to how recurring plan prices were being used. The change ensures discounts are accurately applied by dividing the base plan price by its unit, resulting in more precise pricing on the website. This improves the accuracy of subscription offers for customers.
Original PR description
### Steps to reproduce: - Install Subscriptions and eCommerce modules - Create 3 recurring plans (3 months, 6 months, Yearly) - Create a service subscription product with the created recurring plans - Check the product's page on website - Notice each pricing has a discount tag and with incorrect numbers ### Cause: When calculating the discount we normally use the fixed price of the base plan as the price to compare with. This sometimes introduce inconsistencies if the base plan is not just one unit from the period (>1 week/month/year) ### Fix: We divide the base_plan_price by the unit of the plan so we can get the price of just one plan unit. opw-6048278
This update resolves an issue preventing new language files from being created during the I18N sync process. A misconfigured path in the .weblate.json file was the root cause, leading to sync failures. This fix ensures proper language file generation for all components within the project.
Original PR description
The wrong path caused the sync to fail an not create new language files for any component in the same project.
This update removes a restriction that prevented users from accessing tax returns when the GST e-filing feature was disabled. Previously, the system would redirect users to enable this feature, which wasn't ideal for all returns. Now, users can access all tax returns regardless of the GST e-filing configuration.
Original PR description
BEFORE: - Before this commit, when we disable the gst e-filing feature from the configuration and try to access the tax return view, we are getting blocked by the redirect warning, which suggests enabling the gst e-filing feature from the configuration. - Which is not desirable, as there might be some returns that are not related to gst e-filing, which should be accessible by the user. AFTER: - After this commit, removed the RedirectWarning when accessing the tax return view with gst e-filing feature disabled. So now the user can access tax returns without enabling gst e-filing feature. - At the time of setting the fiscal year(generating/refreshing returns automatically), the GSTR returns will not be created. - And at the time of manual GSTR return creation, we are raising UserError to instruct the user about enabling the gst e-filing feature. Related Com PR: https://github.com/odoo/odoo/pull/247216 Task-5486586
This update resolves an issue where the LU tax reports were incorrectly displaying only the first product ID when multiple products lacked a required internal reference. Now, the reports accurately show all products with missing internal references, ensuring accurate tax reporting compliance. This addresses previous reporting errors related to the FAIA XML export.
Original PR description
This is one of several commits fixing the FAIA xml export. The internal reference must be set for all products reported in the FAIA report. When there are multiple products missing this field, our previous code only reported the first ID to the customer. This commit shows the customer all incorrectly configured products. opw-5427296, opw-6113665 Forward-Port-Of: odoo/enterprise#113452
This update corrects a bug in the Luxembourg VAT reports (l10n_lu_reports) that caused incorrect debit and credit calculations. The fix ensures that invoice line amounts are accurately represented, preventing validation errors and improving report accuracy. This resolves a technical issue impacting financial reporting.
Original PR description
This is one of several commits fixing the FAIA xml export: - #113452 - #113455 - #113846 When an invoice line has a negative `price_unit`, the `Invoice/Line/InvoiceLineAmount/Amount` element has a negative value. This causes validation errors when comparing the total debit or credit values (such as `SalesInvoices/TotalDebit`) to the individual amounts, as the sum of individual "debit" lines will include some credit amounts and vice versa. Solution: record if the line is actually a debit or a credit, then use the absolute value of the balance in the Amount element. opw-5427296 [Link](https://www.odoo.com/odoo/unassigned-tasks/5427296) Forward-Port-Of: odoo/enterprise#113316
This update adjusts the Federal Flexible Employment (FFE) tax rates used in the Belgian payroll calculations within the Enterprise module. The change reflects the latest tax regulations for 2026, ensuring accurate and compliant payroll processing for Belgian businesses using Odoo.
Original PR description
Forward-Port-Of: odoo/enterprise#113426
This update resolves an issue where prompts within email templates weren't being evaluated correctly. The fix ensures that all prompt containers are wrapped in a `<div>` tag, preventing errors and guaranteeing prompt evaluation. This improves the functionality of AI-powered email templates.
Original PR description
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to…
Note: In 18.4, the editor inserts a space before and after the prompt container, in which case the following steps won't cause an error because the container won't be the only html element. Steps to reproduce: - Create a new email template. - Insert a prompt by using the '/prompt' command. - Type any prompt like 'Say Hello'. - Save the email template. - Click on preview. - The prompt isn't evaluated. The '_eval_ai_prompts' method creates a root element from the passed html content. When the passed content represents a single prompt container html element, the root will become that prompt container. The method will try to evaluate the prompt and replace the prompt container and then return the root. The returned root won't contain the evaluation of the prompt in this case because the whole root should be replaced by the evaluation given that there is no other elements. To fix this, the html content will always be wrapped in a `<div>` to avoid the need for replacing the whole root element. Forward-Port-Of: odoo/enterprise#110247
A bug causing OWL crashes during invoice creation in the Colombian edition has been resolved. The issue stemmed from a duplicate selection value within a key field, leading to a JavaScript error. This fix ensures stable invoice processing for Colombian businesses.
Original PR description
The `l10n_co_edi_operation_type` field on `account.move` had two entries with the same selection value `'23'`:
('23', 'Nota Crédito para facturación electrónica V1 (Decreto 2242)'), ('23', 'Inactivo: Nota Crédito para facturación electrónica V1 (Decreto 2242)'),
This caused an OWL crash when opening the invoice form:
"Got duplicate key in t-foreach: 23"
__Steps to reproduce:__
1- Install the l10n_co_edi module
2- switch to colombian company
3- Activate the developer mode
4- Go to Credit Note > Create
__NOTE__: The javascript error is only visible on version 18.4 but the duplicate selection is present since 17.0.
opw-5969595
Forward-Port-Of: odoo/enterprise#112841This update fixes an issue where service subscription discounts were incorrectly calculated when the recurring period was a multiple of the time unit (e.g., 2 months). The fix ensures that discounts are applied accurately across different subscription durations, improving the reliability of pricing for service products. This impacts how discounts are presented to customers.
Original PR description
Currently when creating a subscription for a service product, if the minimal period is a multiple of the time unit: eg two week, three months, etc... The discount amount ends up wrongly computed. The…
Currently when creating a subscription for a service product, if the minimal period is a multiple of the time unit: eg two week, three months, etc... The discount amount ends up wrongly computed. The reason for that is that discounts for services are computed by taking the price of the minimal period and then comparing it to other prices, however that base price is not scaled down to single units of time like the compared prices are. https://github.com/odoo/enterprise/blob/9eac36e4d981fd6062702e7119c664ac7951d613/website_sale_subscription/models/product_template.py#L130-L135 https://github.com/odoo/enterprise/blob/9eac36e4d981fd6062702e7119c664ac7951d613/website_sale_subscription/models/product_template.py#L204-L205 **Steps to reproduce:** - Create a service subscription product - In Recurring Prices, select or create a recurring plan that is a multiple of a unit of time, ex 2 Months - Create two entries, one with the created plan and one with a plan that spans a longer period, ex 1 Year - Set the prices, ex 100 and 600 - Click 'Go to Website' and you'll observe that both are 50% off opw-6107509
This pull request corrects a critical issue in the calculation of employment bonuses for employees in Belgium, ensuring compliance with specific tax regulations. The fix adds the necessary rounding steps required by Belgian law, preventing inaccurate bonus amounts and potential tax discrepancies. This update directly addresses a documented requirement for accurate reporting.
Original PR description
The employment bonus computation was missing two roundings steps that are explicitely asked for in the following documentation: https://www.socialsecurity.be/employer/instructions/dmfa/fr/latest/instructions/deductions/workers_reductions/workbonus.html
This update resolves a crash that occurred when users double-clicked 'Add Custom Field' within Odoo's list views. The fix ensures that Studio isn't opened multiple times simultaneously, preventing the instability. This improves the user experience and prevents data loss.
Original PR description
On a list view, open the optional fields dropdown. Click twice on "Add Custom Field" Before this commit there was a crash, because opening studio while it is already opening was not protected. After this commit, there is no crash. Forward-Port-Of: odoo/enterprise#113299
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return
Original PR description
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt…
Currently, customers report errors when connecting or refreshing a Shopee account through the `sale_shopee` module. **Steps to reproduce:** - Install and configure the `sale_shopee` module - Attempt to connect a Shopee account via the onboarding flow - Complete the authorization process **Observed behavior:** An error is raised during the authorization callback, preventing the Shopee account from being connected or refreshed. **Root cause:** In `onboarding.py`, the `shopee_return_from_authorization` controller incorrectly uses `utils.with_context(authorization_code=code)`. Since `utils` is an imported Python module, calling `with_context` on it attempts to set the context on the module itself rather than on a model instance, which raises an error. **Solution:** Move the `with_context` call from the `utils` module to the `temp_shop` record, which is the appropriate model instance that needs the context. Additionally, this commit adds regression tests for the controller to prevent future regressions, as this functionality was previously untested. opw-6092524 Forward-Port-Of: odoo/enterprise#113081
3 changes
Resolved issues and error corrections
This update fixes an issue preventing users from renting products with 'Daily' pricing when selecting today's date. The fix addresses a mismatch between the rental product's start date (without time) and Luxon's datetime, which includes time. Now, same-day rentals with daily pricing function correctly.
Original PR description
**Steps to reproduce:** - Install `website_sale_stock_rental` module - Create a rental product with "Daily" pricing - Open product on website - Try to set today's date for renting **Observation:** - A restriction occurs when selecting today’s date with the error: “Your rental product cannot be prepared as fast, please rent later.” **Cause:** - With Daily rental pricing, the startDate considers only the date without time. - When compared against Luxon’s current datetime (which includes time), the condition is always satisfied, resulting in the error message. - For Hourly rental pricing, it works fine because the startDate includes both date and time. https://github.com/odoo/enterprise/blob/7b5d2e123e3f14f2fbf775ee6b5bd2e51b4520d4/website_sale_stock_renting/static/src/js/renting_mixin.js#L18-L20 **Solution:** - Add a condition: if the duration is without hours, use only the date in Luxon time comparison. opw-5016324
This update resolves a bug where EPD (Early Payment Discount) bill payments weren't correctly updating their status. The fix ensures that payments are accurately marked as 'paid' after reconciliation, preventing delays in financial reporting. This improves the reliability of our accounting processes.
Original PR description
Steps to reproduce: - Create an early payment term. - Create a Vendor Bill with EPD and post it. - Register a payment for this bill (no outstanding account set on journal => no move created). - Create a bank transaction fully paying the bill. - Reconcile the transaction with the bill. Issue: Access the payment of the bill. The payment state remains 'in_process' instead of 'paid'. opw-5881976 Backport of https://github.com/odoo/enterprise/commit/3dc53e00600c9030fc5e85f2e0ca448fa135e9b1
This update corrects a discrepancy in the sale and purchase journal dashboards by including receipt data. Previously, receipts weren't reflected in the dashboard metrics, leading to inaccurate counts. This change ensures that dashboard reports align with the actual recorded transactions, providing a more reliable view of financial data.
Original PR description
- The sale and purchase journal dashboards excluded receipts while the action view included them, causing a mismatch between counts and displayed records. Include receipts in the dashboard query to ensure consistency. Related PR:https://github.com/odoo/odoo/pull/254295 taskID-6040828
1 change
Resolved issues and error corrections
This update fixes an error in how Odoo calculates depreciation for assets with shortened fiscal years. Previously, entries were skipped during certain months, leading to inaccurate depreciation reporting. The fix ensures that depreciation calculations align with the correct fiscal year boundaries, improving financial accuracy.
Original PR description
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next…
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next fiscal year using `date_from + 1 year` instead of querying the actual next fiscal year. This causes entries for the months between the wrong and correct FY start (e.g. January-April) to be skipped entirely. Step to reproduce: - Create a company with a fiscal year starting in May (e.g. May 1st 2025 to 31st December 2025) - Create an asset with a start date in the 1 December 2025, with a 24 months duration and degressive method - Compute the board and observe that entries from January to April 2026 are missing Fix the FY boundary detection in _recompute_board to query the fiscal year containing the day after the current period end, revert the effective_start_date logic in _compute_board_amount that was masking the root cause, and move the prorata date clamping to _create_move_before_date where it is needed for disposal. opw-6016834