Daily updates from Odoo
Friday, June 19, 2026
147 changes
4 changes
Resolved issues and error corrections
This update resolves an issue where users with restricted accounting rights incorrectly marked invoices as fully paid, leading to inaccurate financial reporting. The fix ensures automatic bank reconciliation works correctly for these users by safely bypassing a group check during the reconciliation process, maintaining data auditability.
Original PR description
### Issue When you have an invoice partially paid via a method using an Outstanding Account, the payment can be kept open, leaving the invoice considered as partially paid If a user with only…
### Issue When you have an invoice partially paid via a method using an Outstanding Account, the payment can be kept open, leaving the invoice considered as partially paid If a user with only "Invoicing & Banks" rights tries to reconcile a Bank Statement with the same partner, amount, and the invoice name as the memo, the automatic reconciliation fails to properly match the payment Instead, the invoice is incorrectly considered as Fully Paid with an unwanted extra Account Receivable line added ### Cause When a new Bank Statement is created, `_try_auto_reconcile_statement_lines()` is called and matches the outstanding credit, which invokes `set_line_bank_statement_line()` This function creates a balancing line and triggers `move._compute_checked()` to update dependencies However, `move.checked` requires `_is_user_able_to_review()` to be True A user with "Invoicing & Banks" rights lacks the `account.group_account_user` group, meaning the move is not marked as checked, preventing dependencies from computing correctly Consequently, the statement line's `amount_residual` is not cleared and the line is not removed from `remaining_st_line_ids` Later in the process, `_try_auto_reconcile_statement_lines()` is called again with `with_user(SUPERUSER_ID)` Because the payment matching was never finalized in the previous step, the engine fallback matches against the full invoice, adding an incorrect Account Receivable line to close it ### Steps to reproduce - Install `accountant` - Go to Accounting / Configuration / Accounting / Journals - Open the Bank, under Incoming Payments tab, set the Manual Payment method's Outstanding Receipts account to 101403 Outstanding Receipts - Update the Demo user's accounting rights to Invoicing & Banks - Log in with the Demo user - Create and confirm an invoice for Acme Corporation (Amount: $1100) - Register a payment on the invoice (Amount: $500, Keep open) - Copy the invoice name - Open the Bank Reconciliation widget from the Accounting Dashboard - Create and add a new Bank Statement Line (Label: Invoice name, Partner: Acme Corporation, Amount: $500) Before the fix, an unexpected Account Receivable line is created and the invoice is marked as Fully Paid ### Notes Instead of processing the entire block under SUPERUSER_ID, which would hide the creator identity in logs and chatter, the context key `skip_account_review_check=True` is injected during the automated statement line reconciliation This safely bypasses the group check inside `_is_user_able_to_review` for this specific automated flow A fallback using `.with_user(SUPERUSER_ID)` is already implemented twice within the same `_try_auto_reconcile_statement_lines` method for this specific use case, but avoiding it here preserves data auditability opw-6077137 Forward-Port-Of: odoo/enterprise#120217 Forward-Port-Of: odoo/enterprise#118023
This update resolves an issue where users with limited accounting permissions incorrectly marked invoices as 'Fully Paid' after reconciling bank statements. The fix ensures accurate reconciliation by correctly handling user permissions and preventing the creation of unwanted Account Receivable lines, maintaining data integrity.
Original PR description
### Issue When you have an invoice partially paid via a method using an Outstanding Account, the payment can be kept open, leaving the invoice considered as partially paid If a user with only…
### Issue When you have an invoice partially paid via a method using an Outstanding Account, the payment can be kept open, leaving the invoice considered as partially paid If a user with only "Invoicing & Banks" rights tries to reconcile a Bank Statement with the same partner, amount, and the invoice name as the memo, the automatic reconciliation fails to properly match the payment Instead, the invoice is incorrectly considered as Fully Paid with an unwanted extra Account Receivable line added ### Cause When a new Bank Statement is created, `_try_auto_reconcile_statement_lines()` is called and matches the outstanding credit, which invokes `set_line_bank_statement_line()` In 19.0, this function creates a balancing line and triggers `move._compute_checked()` to update dependencies Especially `_compute_is_reconciled` But checked as been replaced by `review_state` This FW port will use an update on the `review_state` instead of the `checked` A user with "Invoicing & Banks" rights lacks the `account.group_account_user` group, meaning the move is not marked as `reviewed`, preventing dependencies from computing correctly Consequently, the statement line's `amount_residual` is not cleared and the line is not removed from `remaining_st_line_ids` Later in the process, `_try_auto_reconcile_statement_lines()` is called again with `with_user(SUPERUSER_ID)` Because the payment matching was never finalized in the previous step, the engine fallback matches against the full invoice, adding an incorrect Account Receivable line to close it ### Steps to reproduce - Install `accountant` - Go to Accounting / Configuration / Accounting / Journals - Open the Bank, under Incoming Payments tab, set the Manual Payment method's Outstanding Receipts account to 101403 Outstanding Receipts - Update the Demo user's accounting rights to Invoicing & Banks - Log in with the Demo user - Create and confirm an invoice for Acme Corporation (Amount: $1100) - Register a payment on the invoice (Amount: $500, Keep open) - Copy the invoice name - Open the Bank Reconciliation widget from the Accounting Dashboard - Create and add a new Bank Statement Line (Label: Invoice name, Partner: Acme Corporation, Amount: $500) Before the fix, an unexpected Account Receivable line is created and the invoice is marked as Fully Paid ### Notes Instead of processing the entire block under SUPERUSER_ID, which would hide the creator identity in logs and chatter, the context key `skip_account_review_check=True` is injected during the automated statement line reconciliation This safely bypasses the group check inside `_is_user_able_to_review` for this specific automated flow A fallback using `.with_user(SUPERUSER_ID)` is already implemented twice within the same `_try_auto_reconcile_statement_lines` method for this specific use case, but avoiding it here preserves data auditability opw-6077137 Forward-Port-Of: odoo/odoo#270080
This update resolves a minor issue in the marketing automation dashboard by correcting calculations for key engagement metrics. Specifically, the KPI engagement rate and its n-1 version are now accurately calculated, ensuring more reliable reporting on marketing campaign performance. This improves the accuracy of the data presented to marketing teams.
Original PR description
This commit fixes two issues:
- KPI engagement rate ('Mailing Statistics'!B16) should be =iferror((B7+B9)/B10),0)
- KPI engagement rate n-1 ('Mailing Statistics'!C16) should be =iferror((C7+C9)/C10),0)
Task: 5418449
Forward-Port-Of: odoo/enterprise#120962This update resolves an issue where opening the chat feature in the account module was unintentionally expanding detailed financial data. The change prevents this expansion, improving the user experience and ensuring data is only displayed when needed. This is a minor fix to enhance efficiency.
Original PR description
Before this commit, open_chatter use the selectStatementLine function that will unfold the line. But we don't want the unfold when opening the chatter. task-6306311 Forward-Port-Of: odoo/enterprise#120847
5 changes
Resolved issues and error corrections
This update fixes a potential issue where vendor bills were automatically emailed to vendors by default. The change disables the 'Email' option by default for standard vendor bills, reducing the risk of sending incorrect invoices. This improves efficiency and prevents unnecessary communication.
Original PR description
Issue: By default, the "Email" option is checked in the wizard. Since this is a standard vendor bill (sent to us by the vendor), emailing it back to them is usually incorrect and can lead to accidental emails. Cause: The default sending methods for all moves fallback to the partner's preference or 'email', regardless of whether it is a customer or vendor document. Solution: Update `_get_default_sending_methods` to return an empty set for purchase documents, except in the case of self-billing (where the bill is generated on behalf of the vendor and a copy must be sent to them). This ensures the "Email" checkbox is disabled by default for standard vendor bills, preventing accidental emails, while leaving it available for manual selection if needed.
This update resolves a minor issue with the marketing automation dashboard by correcting calculations for key engagement metrics. Specifically, the KPI engagement rate and its n-1 counterpart are now accurately calculated, ensuring more reliable data reporting for marketing performance. This improves the dashboard's accuracy and provides a better view of marketing campaign effectiveness.
Original PR description
This commit fixes two issues:
- KPI engagement rate ('Mailing Statistics'!B16) should be =iferror((B7+B9)/B10),0)
- KPI engagement rate n-1 ('Mailing Statistics'!C16) should be =iferror((C7+C9)/C10),0)
Task: 5418449
Forward-Port-Of: odoo/enterprise#120962This update resolves an issue where opening the chatter for bank reconciliation statements was causing an unintended data expansion. The change prevents this unfolding process, improving the user experience and performance. This ensures a smoother and more efficient workflow for users.
Original PR description
Before this commit, open_chatter use the selectStatementLine function that will unfold the line. But we don't want the unfold when opening the chatter. task-6306311 Forward-Port-Of: odoo/enterprise#120847
This update resolves an issue preventing users with Sale access rights from inserting data into Quotation templates through the spreadsheet management feature. The change adds a setting to ensure the necessary flag is activated when the module is installed and the user has the correct permissions, improving usability.
Original PR description
Current behavior before PR: - The `can_insert_in_spreadsheet` session flag was not set by the spreadsheet_sale_management module. - Users with proper Sale access rights still could not insert into Quotation templates. Desired behavior after PR is merged: - Added logic to set `can_insert_in_spreadsheet` when the module is installed and the user has the required access rights. Task: [5960761](https://www.odoo.com/odoo/project/2328/tasks/5960761) Forward-Port-Of: odoo/enterprise#120903 Forward-Port-Of: odoo/enterprise#108674
This update enhances the visual clarity of the account reconciliation search dialog. The commit removes text truncation and adjusts the layout to ensure dates and balances are prominently displayed, providing a more user-friendly experience. This improves the readability of key financial data.
Original PR description
This commit will remove the text-truncate from the reference so that we have it full. Also removing the align item so that the date and balance are on top. no task id Forward-Port-Of: odoo/enterprise#120963
2 changes
Resolved issues and error corrections
This update resolves a minor issue affecting the marketing automation dashboard by correcting calculations for key engagement metrics. Specifically, the 'engagement rate' KPI now accurately reflects data, ensuring more reliable reporting on campaign performance. This improves the accuracy of marketing insights.
Original PR description
This commit fixes two issues:
- KPI engagement rate ('Mailing Statistics'!B16) should be =iferror((B7+B9)/B10),0)
- KPI engagement rate n-1 ('Mailing Statistics'!C16) should be =iferror((C7+C9)/C10),0)
Task: 5418449
Forward-Port-Of: odoo/enterprise#120962This update resolves an issue where opening the chatter in the accounting module was unintentionally unfolding financial lines. This change ensures a smoother user experience by preventing unnecessary data expansion and improving performance. The fix addresses a technical detail that didn't directly impact users but contributed to a better overall system operation.
Original PR description
Before this commit, open_chatter use the selectStatementLine function that will unfold the line. But we don't want the unfold when opening the chatter. task-6306311 Forward-Port-Of: odoo/enterprise#120847
1 change
Resolved issues and error corrections
This update fixes an issue where payments to Mexican CFDI invoices could be sent multiple times, leading to inaccurate reporting. The change ensures the 'Update Payments' button only appears after the invoice is fully reconciled, preventing over-reporting of payment amounts. This improves financial accuracy and compliance.
Original PR description
Issue: Sending payments to CFDI before its full amount is reconciled allow sending the same invoice payment several times to CFDI. So some invoices are declared as paid several times and the total…
Issue: Sending payments to CFDI before its full amount is reconciled allow sending the same invoice payment several times to CFDI. So some invoices are declared as paid several times and the total amount of the payment is seen as exceeding the real total. This fix is a back port of odoo/enterprise#108355 and aim to prevent some things the backend allow, but the front end prevents. Following steps could be used to reproduce from 18.3. Steps to reproduce: - In a Mexican company - Create an invoice A of $40 to Inmobiliaria CVA - Confirm and send to CFDI - Go to bank, create a new Bank transaction of $80 - reconcile with Invoice A - Go to invoice A => click on button "Update payments" (it doesn't appear before version 18.3) - Then sheet CFDI and Download There is the first XML sent to CFDI with payment for invoice A - Create an invoice B of $40 to Inmobiliaria CVA - Confirm and send to CFDI - reconcile the transaction with Invoice B - Go to invoice B - Click on button "Update payments" - Then sheet CFDI and Download There is the second XML sent to CFDI with payment for invoices A and B Invoice A payment was sent twice to CFDI Expected behavior: - The "Update payment" button should appear only once the invoice payment is fully reconciled. Current behavior: - The update payment button appear once the invoice is reconciled with a payment. opw-5432421 Forward-Port-Of: odoo/enterprise#119357
27 changes
New functionality added to Odoo
This update adds the ability to track equipment used during service shifts, including serial numbers and a history of interventions. This improves accountability and traceability for service technicians and allows for better management of valuable assets. The changes integrate equipment data with shift scheduling and lot tracking within the Odoo stock module.
Original PR description
- Create a `Equipment` option that enables lots & serial numbers - Create an `Equipment` page in the shift form view - Create a `Shifts` stat button in the lots form view - Activate lots from stock settings when setting equipments - Prefill the `lot_ids` with the customer and its descendant lots when picking a customer for the shift --- task-5184419
Enhancements to existing features
This pull request simplifies the process of configuring car options for employees within the salary offer and employee view. The changes focus on improving the user experience, making it easier for HR to manage car-related benefits and for employees to select their preferred vehicle options. This enhances efficiency and clarity in the contract creation process.
Original PR description
-Introducing some UX changes in salary configurator and employee's offer view to simplify car options.
This update allows users to specify quantities and units for sections within subscription orders. Changes to these values are now accurately reflected in both the generated PDF reports and the customer portal, providing more precise order information. This enhancement improves transparency and accuracy for subscription management.
Original PR description
In the community PR, users can set the quantity and unit on sections and subsections. When a user changes the quantity or unit, these values are displayed on the generated PDF and in the portal. To support this, we changed the table architecture to keep it consistent in sale_subscription. PR: https://github.com/odoo/odoo/pull/267933 Upgrade: https://github.com/odoo/upgrade/pull/10417 task-6075605
This update enhances the user experience for managing shifts within Odoo, particularly in the planning and portal sections. Key changes include direct sign-in and completion buttons on the planning kanban view, a simplified portal interface, and improved navigation for mobile users. These improvements streamline shift management workflows and boost operational efficiency.
Original PR description
_*= planning_field_service,project_forecast,planning_field_service_sale_timesheet,
sale_planning
- Add a Sign Report button to allow users to sign reports directly from planning shifts
- Improve the planning kanban UI by adding Sign In and Complete buttons,
allowing users to directly sign in and complete shifts from the kanban view
- Enhance the portal view by hiding breadcrumbs, banners, and print button in sign mode
- Add a back-to-shift navigation button in the portal
- Improve the mobile view of the shift form view
task-6218179This change addresses a requirement from Avalara, who need the LC16 code to be dotted for their city web services. Previously, Odoo automatically removed these dots. Now, the LC16 code is sent with the dots, allowing Avalara's tool to correctly sanitize the data.
Original PR description
Purpose: Avalara requires the LC116 code to be dotted for certain city webservices. Their tool will automatically sanitize the dots for cities that don't support it. Current Behavior: Odoo sanitizes the LC116 code before sending the JSON payload. Expected Behavior: The LC116 code is sent in the JSON payload with the dots. task-6304351 Forward-Port-Of: odoo/enterprise#120648
This update enhances navigation between sold assets and related customer invoices. Now, invoices linked to a sold asset are directly accessible from the asset's record, and vice versa, streamlining workflows for sales and accounting teams. This improves visibility and efficiency in managing related transactions.
Original PR description
This commit improves the navigation from a sold asset to the customer invoice and vice versa. A reference link of the sold asset is added to the chatter of each invoice used in sale. Also, all invoices used in sale are added as reference link to the asset's chatter. task-4413649 Forward-Port-Of: odoo/enterprise#118665
This update allows users to connect their personal LinkedIn accounts and schedule posts to Facebook and Instagram Stories. It also includes several UX improvements to make the social posting experience easier and more intuitive.
Original PR description
Purpose ======= This PR addresses many improvements in the social app, the two main ones being allowing to link your personal LinkedIn account and to post Facebook and Instagram "Stories". We also…
Purpose ======= This PR addresses many improvements in the social app, the two main ones being allowing to link your personal LinkedIn account and to post Facebook and Instagram "Stories". We also made a lot of UX tweaks along the way to make the social app easier to use, with a bit of much needed polish as the app has not been worked on a lot since it was introduced (about 7 years before this PR). Specifications =========== Allow the users to add their personal LinkedIn account in Social (and not only the page for which they are admin), and to post on them. During the authentication process of Social, if something went wrong we need to manually go back or enter the Odoo database URL to retry. It can be very frustrating, and so now we open the authentication URL in a new window, and when the process is done we close the window and refresh the view. Show a loading page while doing the token exchange process (which can take some time depending on the number of pages). Allow removing the accounts from the "Connect Account" modal. Show the icons of the selected medias in the calendar view. Improve the way we schedule posts. Allow the users to comment their own posts right after posting. Allow posting stories on Facebook and Instagram. Allow sorting the image when posting on a social media. Use AI to write social post. Show the chars count for all medias while typing the message. Improve the computation of the tweet length (URL must count for 23 chars and emoji for 2). In the post form view, show the media icon instead of the media name when selecting the accounts. Do some refactoring to unify the name for the social post message field. Schedule the social post with a modal, like it's done in mass-mailing. (see each individual commits for more details) Task-5491124
Resolved issues and error corrections
This update resolves an issue where the Odoo softphone would throw errors when receiving calls from numbers not linked to a contact. The fix ensures that creating tasks from these calls works as expected, and the 'Tasks' button is no longer displayed when a call lacks a contact.
Original PR description
**Problem:** Two linked errors occur in the Phone (VoIP) softphone when a call is made to or received from a number that is not linked to any contact. **Steps to reproduce:** 1. Receive or make a…
**Problem:** Two linked errors occur in the Phone (VoIP) softphone when a call is made to or received from a number that is not linked to any contact. **Steps to reproduce:** 1. Receive or make a call from the softphone using a phone number that is not linked to any existing contact. 2. Open the call's actions and click "Create" > "Task". -> A client error appears and the task is not created. 3. On a voip.call form whose Contact has been removed, click the "Tasks" smart button. -> A server error is raised. **Current behavior:** Step 2 raises "Cannot read properties of undefined (reading 'id')" and step 3 raises "ValueError: not enough values to unpack (expected 1, got 0)". **Expected behavior:** Creating a task from a contactless call should open the task form without a default contact, and the Tasks smart button should not be reachable when the call has no contact. **Cause of the issue:** Both code paths assume a call always has a linked partner. In `action_list_patch.js`, `getCreateTaskAction` only checks `shouldShowTaskButton` in its predicate but reads `this.contact.id` in its `onClick`; for a contactless call `this.contact` is undefined. In `voip_call.py`, `action_view_tasks` delegates to `self.partner_id.action_view_tasks()`, whose `ensure_one()` fails on the empty partner recordset. Unlike the softphone "view tasks" action, which is gated by `this.contact?.task_count`, the form stat button had no visibility guard. **Fix:** The create-task action now mirrors the existing contact and lead actions, which already build their context conditionally on `this.contact`, so a contactless call simply opens the task form with no default partner. The Tasks stat button is hidden when there are no tasks, matching the softphone predicate and ensuring the partner-less code path is never reached. opw-6246641 Forward-Port-Of: odoo/enterprise#119412
This update resolves a technical issue that caused tracebacks when printing invoices through IoT devices. The fix corrects how printer information is retrieved, preventing errors and ensuring invoices print correctly. Additionally, the update includes a security enhancement to redact sensitive data from logged websocket messages.
Original PR description
When printing invoices from PoS, using an IoT device, we get a traceback, as the orm call to read device infos gets the whole selected printers params (duplex, don't ask me again, printer ids) instead of the printer ids. Issue was introduced in odoo/enterprise#113128 We also take the opportunity to redact documents from logged websocket messages. task-6307690 opw-6284287 Forward-Port-Of: odoo/enterprise#120742
A visual glitch was causing the Timesheets Configuration menu to appear twice in the application. This update corrects a technical issue where the menu was incorrectly listed, ensuring a cleaner and more consistent user experience. This change improves the usability of the Timesheets module.
Original PR description
Steps to reproduce the issue: 1- Log in as a user with Timesheets Administrator access rights. 2- Go to Timesheets → Configuration. 3- Disable Timesheets Assistant (BETA) and save. 4- Refresh the page. The Configuration menu is displayed twice. After (Expected): The Configuration menu should be displayed only once in the Timesheets app. solution: Adjusted the config menu blacklisting condition to hide the unwanted menu --- task-6302568 Forward-Port-Of: odoo/enterprise#120609
This update corrects a bug where selection fields within the Odoo Studio were incorrectly flagged as required. The fix ensures that selection fields are only required when explicitly marked as such, improving usability and preventing unintended data restrictions. This resolves an issue impacting how users design forms and reports.
Original PR description
Before: any studio property using a SelectMenu (selection) component, without a `required: false` in the childProps, was implicitly required because the check used `required !== false`, which evaluates `undefined` as truthy. After: `required` is only applied when explicitly set to `true`. task-5226503 Forward-Port-Of: odoo/enterprise#120782 Forward-Port-Of: odoo/enterprise#120037
A recent issue causing the Documents view to crash when navigating from an activity has been resolved. This was due to a timing problem with how different parts of the system handled data updates. This fix ensures the Documents view functions reliably for all users.
Original PR description
### Description When navigating to Documents via an activity, the list view crashes with a TypeError on setting 'COMPANY'. ### Root Cause An asynchronous race condition occurs between parent and child `onWillStart` hooks. The child finishes an await before the parent's hook runs `expandDefaultValue()`. Thus, `this.state.expanded[sectionId]` is undefined when the child tries to write to its nested keys. ### Solution Await `sectionsPromise` first in the child hook. opw-6276003 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#120713 Forward-Port-Of: odoo/enterprise#119634
This update fixes a critical crash related to AvaTax connections and enhances the user experience. It now clearly indicates when a connection isn't set up correctly, preventing confusion and ensuring accurate tax calculations. Additionally, the connection test results are now more organized and version-aware.
Original PR description
Several related fixes around the AvaTax connection settings: - Surface an unconnected "Avalara Included" setup instead of silently using Direct credentials. Filling Direct credentials, switching to…
Several related fixes around the AvaTax connection settings: - Surface an unconnected "Avalara Included" setup instead of silently using Direct credentials. Filling Direct credentials, switching to Included, then not completing the connection (link/migrate/create) left the company looking configured through those leftover credentials: the user believed they were on Included while a request either silently used Direct or crashed on the unset IAP proxy user (ensure_one). Direct credentials now only count in Direct mode, so the not-connected state raises the usual RedirectWarning pointing to the configuration. - Group nexus locations by country in the connection test result. The list dumped every nexus row flat, so countries appeared alongside their own regions and each jurisdiction repeated once per tax type (e.g. "California" dozens of times). Group by country, drop the country-wide rows, dedupe and sort, with a short summary line. - Make the "Help me choose" documentation link version-aware via the documentation_link widget instead of the /latest/ alias, which redirects to the latest major release (19.0) where the AvaTax docs don't exist. task-6295272 Forward-Port-Of: odoo/enterprise#120761
This update resolves an error that occurred when generating payment reports for Swiss companies. The issue arose when the required module ('hr_payroll_account_iso20022') wasn't installed, leading to a system error. Now, the system correctly handles the report generation process regardless of this module's presence.
Original PR description
*=l10n_ch_hr_payroll,hr_payroll_account_iso20022 When clicking the create payment report button on a payslip for a Swiss company, a traceback occurs if the ``hr_payroll_account_iso20022`` module is…
*=l10n_ch_hr_payroll,hr_payroll_account_iso20022 When clicking the create payment report button on a payslip for a Swiss company, a traceback occurs if the ``hr_payroll_account_iso20022`` module is not installed. Steps to reproduce the error: - Install ``l10n_ch_hr_payroll`` module - Switch to CH Company - Create an Employee and running contract for it - Go to Payroll > Payslip > All payslips > Create a new payslip > Set the employee > Confirm > Create payment report Traceback: ```py ValueError: Wrong value for hr.payroll.payment.report.wizard.export_format: 'iso20022_ch' ``` https://github.com/odoo/enterprise/blob/7792926504a823590fbbe574a96994002a92fc17/l10n_ch_hr_payroll/models/hr_payslip.py#L383 https://github.com/odoo/enterprise/blob/7792926504a823590fbbe574a96994002a92fc17/l10n_ch_hr_payroll/models/hr_payslip_run.py#L13 Here, ``iso20022_ch`` is passed as ``export_format``, However, ``iso20022_ch`` is added to the selection field in the ``hr_payroll_account_iso20022`` module at [1]. When that module is not installed, the selection value does not exist, leading to the above error. [1]: https://github.com/odoo/enterprise/blob/7792926504a823590fbbe574a96994002a92fc17/hr_payroll_account_iso20022/wizard/hr_payroll_payment_report_wizard.py#L11 sentry-7391832811 Forward-Port-Of: odoo/enterprise#120825 Forward-Port-Of: odoo/enterprise#113277
This update resolves an error that occurred when refreshing Facebook statistics for users. The issue stemmed from a system error where a failed request returned 'None', causing a calculation to fail. This fix ensures that the statistics refresh process is more robust and reliable, preventing disruptions to user data.
Original PR description
Traceback: ```py TypeError: unsupported operand type(s) for -: 'NoneType' and 'int' ``` Cause: https://github.com/odoo/enterprise/blob/f6c5ce7de737794a675d1b2485dd5c1a9ed0cb17/social_facebook/models/social_account.py#L92-L108 ``meta_run_request_batch()`` may return ``None`` for failed requests. In that case, ``page_global_stats`` is ``None``, leading to ``fan_count`` being ``None``. The statistics computation then calls ``_compute_trend()`` with a ``None`` value, causing the above traceback. https://github.com/odoo/enterprise/blob/f6c5ce7de737794a675d1b2485dd5c1a9ed0cb17/social/models/social_account.py#L143-L144 sentry-7545763666 Forward-Port-Of: odoo/enterprise#120733
This update resolves an issue where the EC List XML export was incorrectly identifying invoices with the same VAT number as separate entities, leading to rejection by tax authorities. The fix ensures that invoices with identical VAT numbers are treated as a single partner, complying with Belgian tax regulations. This prevents errors and ensures accurate EC List reporting.
Original PR description
With l10n_be: - Create two contacts with the same VAT - Create an invoice for each that is EC List compatible - Generate the return and export the EC List XML In the generated xml the two partners with the same vat are treated as different partners, which causes a rejection by the tax agency. opw-6109585 Forward-Port-Of: odoo/enterprise#120305 Forward-Port-Of: odoo/enterprise#117702
This update resolves an issue where invoices for Persona Natura customers in Colombia were incorrectly formatted for export to the DIAN tax authority. The change ensures the correct XML structure is generated, addressing a mismatch in account identification. This prevents export errors and ensures compliance with Colombian tax regulations.
Original PR description
Issue: Colombian partner being Persona Natura are misinterpreted as Person Juridica. It raises issue while exporting XMLs for dian. Steps to reproduce: - In a Colombian company - Create a Customer with NIT and "Obligaciones y Responsabilidades" to "R-99-PN" - Create an invoice - Send the invoice Current behavior: - node <cbc:AdditionalAccountID> is set to 1 and node PartyIdentification is missing Expected behavior: - node <cbc:AdditionalAccountID> is set to 2 and there is a PartyIdentification node Cause: Colombian partners having a NIT have is_company to True. However, Persona Natura have NIT but aren't companies. opw-6206308 Forward-Port-Of: odoo/enterprise#118193
This update resolves an error that prevented users from opening the Gantt view for work orders. The issue stemmed from how the system handled resources without calendars, leading to a system crash. The fix ensures the system gracefully handles these resources, preventing the error and allowing users to access the Gantt view.
Original PR description
Currently, an error occurs when opening the gantt view of work orders. **Steps to Reproduce:** - Install `mrp_workorder` with demo data. - Go to `Settings` > `Technical` > `Resource` > `Resources`. -…
Currently, an error occurs when opening the gantt view of work orders. **Steps to Reproduce:** - Install `mrp_workorder` with demo data. - Go to `Settings` > `Technical` > `Resource` > `Resources`. - Open the `Assembly 1` resource and remove its `working time`. - Go to `Manufacturing` > `Operations` > `Work Orders`. - Switch to the `Gantt view`. `KeyError: 22` when the user opens the Gantt view, the system checks the unavailability of work centers and employees based on their resource calendars. While computing unavailable intervals for resources [1], resources without a calendar are flexible resources. If no leave interval exists within the specified start and end range that matches the domain, the resource is not included in the result [2]. when updating the unavailable intervals dictionary [3], the resource is missing. As a result, when it later tries to access the unavailable intervals for that resource, it raises an error [4]. This commit prevents the error by safely handling resources that are not present in the unavailable intervals dictionary by using an empty list instead. [1]: https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_resource.py#L186 [2]: https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_calendar.py#L532-L536 [3]:https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_resource.py#L187 [4] https://github.com/odoo/enterprise/blob/47f2e9e88fa0bbb8852fe7734c6bece4dca8b9d0/mrp_workorder/models/mrp_workorder.py#L692-L694 sentry-7525704808 Forward-Port-Of: odoo/enterprise#119385
This update resolves an issue where the barcode inventory count feature would fail when using archived units of measure. The fix ensures that archived UOMs are correctly included in the inventory count cache, allowing accurate counts to be performed. This improves the reliability of physical inventory processes.
Original PR description
### Steps to reproduce: - In the settings enable: "Units of Measure & Packagings", "Storage Locations" - Create a product in units and register 1 unit in stock - Inventory > Operations > Adjustments…
### Steps to reproduce: - In the settings enable: "Units of Measure & Packagings", "Storage Locations" - Create a product in units and register 1 unit in stock - Inventory > Operations > Adjustments > Physical Inventory - Select your line and request a count > Set Current Value - Inventory > Configurations > units of measures > UOM categories - Select unit and archive it - Go to the barcode app > Click Count inventory ### > Owl error: Uncaught promise ### Cause of the issue: Since the uom used on the quant is archived, it is not found by the search used to fill the barcodeCache: https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/components/main.js#L209-L213 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/models/stock_quant.py#L104-L106 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/components/main.js#L229 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/models/barcode_model.js#L37-L39 However, if the uom is not present in the barcode cache the `BarcodeQautnModel` will fail to createLinesState whihc raises a missing error: https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/models/barcode_quant_model.js#L712 https://github.com/odoo/enterprise/blob/26546bcd3beebc7f65ce08385441b6284b46598e/stock_barcode/static/src/lazy_barcode_cache.js#L107-L110 opw-6250090 Forward-Port-Of: odoo/enterprise#120683 Forward-Port-Of: odoo/enterprise#118813
A recent issue was causing the Enterprise application to crash when opening articles with embedded account reports. This fix prevents a critical error related to modifying component properties during setup, ensuring stability and proper functionality of account reporting within the system. This resolves a technical problem that could impact users accessing financial reports.
Original PR description
When opening an article containing an embedded account report component, the application crashes because the `name` prop is mutated during the component `setup`, which is not allowed.
Steps to reproduce:
1. Create a new audit report
2. Open the "Journal Audit" article containing an embedded account report
=> The following exception is raised:
```
Uncaught (in promise) TypeError: setting getter-only property "name"
setup account_report.js:15
```
To fix the issue, the translation of the `name` prop is moved to `getProps`, which prepares component props before mounting. This ensures the value is already translated at instantiation time, avoids any mutation during setup, and preserves prop immutability throughout the component lifecycle.
Ref: odoo/enterprise#109962
Task-6292898
Forward-Port-Of: odoo/enterprise#120077This update fixes an issue where a specific invoice origin code was incorrectly triggering a cancellation request to Mexican tax authorities (CFDI). The change ensures that only invoices with '04' origin codes are used for down payment cancellations, aligning with Mexican regulations. This prevents unintended cancellations of down payments and improves the accuracy of CFDI processing.
Original PR description
**Steps to reproduce:** - Install Sales, Accounting and l10n_mx_edi - Switch to a Mexican company (e.g. ZAPATERIA URTADO ÑERI) - Create a SO: * Customer: [a Mexican customer] (e.g. INMOBILIARIA CVA) * Payment Way: Efectivo * Payment Policy: PUE * Product: [any product with a UNSPSC Category] * Taxes: [any] (e.g. 16%) - Confirm the SO - Create a down payment (e.g. 60%) - Confirm the down payment - Send it to CFDI - Copy the fiscal folio - Go back to SO - Create the final invoice - Set the copied fiscal folio prepend with "07|" as CFDI Origin - Confirm the invoice - Send to CFDI **Issue:** A cancellation request is sent to CFDI for the down payment. "07" origin code is used to link the invoice to a down payment. It should not cancel the down payment. It should only be done with "04" origin code used for substitution of a previous invoice. opw-6266678 Forward-Port-Of: odoo/enterprise#120757
This update resolves a requirement from Luxembourg auditors regarding the classification of partners in our SAFT reports. Specifically, it ensures that less than 30% of transactions with payable or receivable accounts have missing supplier or customer IDs, respectively. The changes update the XML reports to align with these specific reporting guidelines.
Original PR description
This PR is one of many triggered by responses from Luxembourg auditors. See PR #113316 for a full list of these PRs. As described in PR #117799, the \CustomerID and \SupplierID elements on…
This PR is one of many triggered by responses from Luxembourg auditors. See PR #113316 for a full list of these PRs. As described in PR #117799, the \CustomerID and \SupplierID elements on \Transaction\Line elements is determined by a partner's `customer_rank` and `supplier_rank`. This is a binary designation, one or the other. The Luxembourg FAIA report requires that less than 30% of \Transaction\Line elements with payable accounts (class 6) can not have \SupplierID. The same applies for \Transaction\Line elements with receivable accounts (class 7) and the \CustomerID element. TSB clarified that any partner on an receivable or payable line should be added to the Customer list or Supplier list respectively https://github.com/odoo/enterprise/pull/100749#issuecomment-3655127511. In addition, I verified that Luxembourg's analysis of four separate FAIA files (from ticket 5427296) aligns with this expectation. <img width="1322" height="690" alt="image" src="https://github.com/user-attachments/assets/1a82f99e-5b32-4dbb-96e1-1b25bab2629b" /> This commit adds partners to the \Supplier and \Customer lists if they have any payable or receivable lines, respectively. It also picks between the \CustomerID and \SupplierID based on a line's `account_type`. This logic is applied to `account_saft` and updates the other, country-specific SAFT reports where appropriate. It also retains the previous `customer_rank` and `supplier_rank` logic as a fallback for older XML reports and for accounts other than `asset_receivable` or `liability_payable`. opw-6118024 Forward-Port-Of: odoo/enterprise#120790 Forward-Port-Of: odoo/enterprise#118714
This update resolves a technical problem preventing the 'XML Polizas (SAT)' export from working correctly for the Mexican accounting reports. The fix ensures the exported file is formatted correctly, allowing users to download the necessary financial reports. This improves the reliability of the reporting process.
Original PR description
How to reproduce it: - Install l10n_mx_reports and select Innovacion Company - Go to accounting app > reporting and Open the General Ledger report - Trigger the "XML Polizas (SAT)" export, fill in…
How to reproduce it: - Install l10n_mx_reports and select Innovacion Company - Go to accounting app > reporting and Open the General Ledger report - Trigger the "XML Polizas (SAT)" export, fill in the wizard (export type and order/process number) and click Export - A traceback is raised instead of downloading the file: TypeError: ... report_data: use BinaryValue instead of bytes This error happens because export_xml writes the generated file to the report_data field as raw bytes. After the introduction of BinaryValue, no longer accepts bytes values (unless raw field) for Binary fields and now expects a BinaryValue, causing the traceback. The write was modified on refactoring PR, but not correctly and there wasn't a test targeting the url action part so it was not flagged. This commit fixes the issue by wrapping the content in BinaryBytes (since is a BinaryValue) before assigning it to report_data and added tests covering the single and multiple period cases. task-6297731 Forward-Port-Of: odoo/enterprise#120339
This update resolves a minor issue with the marketing automation dashboard by correcting calculations for key engagement metrics. Specifically, the formulas for calculating 'engagement rate' and 'engagement rate n-1' have been adjusted to handle potential errors and ensure accurate reporting of mailing statistics. This improves the reliability of the dashboard data.
Original PR description
This commit fixes two issues:
- KPI engagement rate ('Mailing Statistics'!B16) should be =iferror((B7+B9)/B10),0)
- KPI engagement rate n-1 ('Mailing Statistics'!C16) should be =iferror((C7+C9)/C10),0)
Task: 5418449
Forward-Port-Of: odoo/enterprise#120962This update corrects a technical issue where the system was unintentionally unfolding financial lines when opening the chat interface. This change ensures a smoother and more efficient user experience, preventing potential performance impacts. The fix focuses on optimizing the chat functionality within the account accounting module.
Original PR description
Before this commit, open_chatter use the selectStatementLine function that will unfold the line. But we don't want the unfold when opening the chatter. task-6306311 Forward-Port-Of: odoo/enterprise#120847
Features or functions removed from Odoo
This update removes a redundant feature related to payment processing through payment terminals. The removal of fast payments using these terminals made a previous override unnecessary, streamlining the system. This change improves efficiency and reduces potential complexity.
Original PR description
We removed fast payments using payment terminals, making the `fastPayments` method override useless. see odoo/odoo#270240 task-6303855 Forward-Port-Of: odoo/enterprise#120766 Forward-Port-Of: odoo/enterprise#120672
Code cleanup and technical improvements
This update refines the controller for account bank statement imports, addressing previous issues caused by shared logic with the main accounting module. By using a more targeted controller and removing unnecessary code, the import process is now more reliable and efficient.
Original PR description
account_bank_statement_import_view was using the same controller used in account.move which caused some wrong behavior when some logic isn't shared between both modules, now account_bank_statement_import uses a generic controller that doesn't add unneeded behavior. As well as removing all of the account move classes from bank statement import and using generic ones or ones specific to account bank statement import. task-5892419 Forward-Port-Of: odoo/enterprise#120639 Forward-Port-Of: odoo/enterprise#117476
7 changes
Enhancements to existing features
This update enhances the system's ability to process payments through Powens and Saltedge by adding debtor and creditor information to the data sent to our payment processor. This change ensures accurate payment initiation and improved integration with payment gateways.
Original PR description
In order to be able to initiate payments using Powens and Saltedge, we need to include debtor information in the payload sent to Odoofin. This commit adds the necessary fields and updates the tests accordingly. Task ID: 5977148, 6095729 Forward-Port-Of: odoo/enterprise#119843
Resolved issues and error corrections
This update resolves an issue where the system incorrectly rejected zero measurements received from caliper devices via IoT. The fix allows for valid zero readings, ensuring accurate data capture for quality checks. It also includes a minor typo correction.
Original PR description
Fix a check on the IoT response that incorrectly rejected valid measurements of 0 from caliper devices Also fix a typo opw-6184669
This update fixes a technical detail in the Odoo Enterprise system related to the DiDi Food delivery provider. The provider's technical name has been corrected from 'didifood' to 'didi' to align with recent updates from UrbanPiper. This ensures accurate identification and integration of the DiDi Food delivery service.
Original PR description
In this commit: - Following up on this commit https://github.com/odoo/enterprise/commit/6d44f403e3fc8f47e899b9ac6fc63b8a3f66861d, UrbanPiper updated `DiDi Food` technical name to `didi`. So, we are updating the `DiDi Food` provider technical name from `didifood` to `didi`. Task-6310690
This update fixes a bug in the Preparation Time report for Point of Sale, ensuring that preparation durations are displayed correctly based on the user's current timezone. Previously, the report always used the timezone of the OdooBot, leading to inaccurate data. This change improves reporting accuracy and user experience.
Original PR description
In POS, the Preparation Time report groups average preparation durations by hour. Those hour buckets were always computed with the timezone of the user who ran the module upgrade (OdooBot /…
In POS, the Preparation Time report groups average preparation durations by hour. Those hour buckets were always computed with the timezone of the user who ran the module upgrade (OdooBot / superuser), not the timezone of the user viewing the report. Changing the user, company, or browser timezone had no effect on the graph until the module was upgraded again. Steps to reproduce: ------------------- * Configure a Preparation Display and create POS orders with measured preparation times. * Open Point of Sale → Reporting → Preparation Time. * Note the hour bucket used for the orders. * Change your user timezone in Preferences and reload the report. > Observation: The hour buckets stay the same. Before the fix, they only changed after upgrading `pos_enterprise`, because the timezone was embedded in the SQL view created during `init()` as superuser. Why the fix: ------------ Replace the static PostgreSQL view with a dynamic `_table_query` so `order_hour` is computed with the current user's timezone on each report read. `init()` now only drops the legacy view instead of recreating it with a frozen timezone. opw-6220248
This update resolves an issue where users couldn't select child contacts when creating bank statement lines. The change aligns the system's contact selection process, allowing users to correctly associate bank statements with child contacts within the bank reconciliation workflow. This improves the usability and accuracy of financial reporting.
Original PR description
When creating a bank statement line, we can not set an individual contact that is a children of a company contact. However, when clicking on the 'Set Partner' button, all contacts are shown in the modal list view. This commit aligns the domain coming from the 'Set Partner' button with the domain from the 'partner_id' field of the auto reconcile wizard Steps: - Have a contact X, with a child contact Y - Create and confirm an invoice for contact Y, amount 1000 - Create a bank statement line for 1000 -> You can not select Y, only X - Click 'Add & Close' - Click on 'Set Partner' button -> Y is displayed opw-6205154
This update eliminates a frequent warning message that appeared when automatic OCR was disabled for invoices. This message was not helpful to users and has now been removed, streamlining the invoice processing experience. It improves the user experience by reducing unnecessary notifications.
Original PR description
The warning "Automatic OCR does not apply to this document" was logged for every upload when automatic OCR isn't enabled, it isn't very useful. opw-[6232122](https://www.odoo.com/odoo/unassigned-tasks/6232122)
This update fixes a display issue where rental prices weren't correctly formatted on the website. The fix adds a necessary separator (/) to ensure rental prices and durations are shown clearly, improving the user experience for rental product configuration and ordering. This ensures accurate pricing information is presented to customers.
Original PR description
Steps to produce: --- - Install the `Rental and eCommerce `modules. - Create a rental product and configure a rental price for it. - Add an optional product from the Sales tab. - Publish the product on the website. - Open the product page on the website and click` Add to Cart`. Issue: --- - In the product configurator, the rental price is displayed without the `/` separator between the price and the rental duration period. Cause: --- - The string used to generate the rental duration label does not include the `/` separator. Fix: --- - Add the missing `/` separator to the rental duration label so that rental prices are displayed correctly. Before: --- <img width="974" height="185" alt="image" src="https://github.com/user-attachments/assets/64a88a60-bcc0-4657-97fd-584da57d0aff" /> After: --- <img width="967" height="188" alt="image" src="https://github.com/user-attachments/assets/b4d50019-1db4-4817-a8ce-446cc3c55df4" /> opw-6293015
1 change
Resolved issues and error corrections
This update fixes an issue where the reconciliation wizard incorrectly used foreign currency when a company currency exchange difference remained after the reconciliation plan. The fix ensures the wizard accurately reflects the final difference, preventing inflated write-off amounts and improving financial reporting accuracy. This impacts how receivables are reconciled.
Original PR description
## Problem In `account_reconcile_wizard.py`, the internal helper `get_reco_currency` (inside `_compute_reco_wizard_data`) returned the single foreign currency found among the selected lines without…
## Problem
In `account_reconcile_wizard.py`, the internal helper `get_reco_currency` (inside `_compute_reco_wizard_data`) returned the single foreign currency found among the selected lines without checking whether any residual in that currency actually remained after the reconciliation plan ran.
When reconciling a company-currency line against a foreign-currency line where the plan fully consumed the foreign-currency residual (leaving only a small company-currency exchange-difference balance), the wizard still set `reco_currency_id` to the foreign currency, inflating the write-off amount by the exchange rate.
## Root cause
```python
elif len(foreign_currencies) == 1:
return foreign_currencies # ignores whether the plan left any residual in that currency
```
## Fix
In the `elif len(foreign_currencies) == 1:` branch, iterate over `aml_values_map` (post-plan residuals) and return the foreign currency only if at least one line still has a non-zero residual in it; otherwise fall back to company currency.
## Test
`TestAccountReconcileWizard.test_write_off_receivable_company_currency_vs_foreign_currency`
Reconciles a company-currency debit (111.0) against a foreign-currency credit (−110.0 / −330.0 EUR at rate 3.0). The real remaining difference is 1.0 in company currency. The test asserts that `reco_currency_id` is the company currency and `amount` ≈ 1.0.
Task reported at: https://www.odoo.com/my/tasks/6315581