Daily updates from Odoo
Navigate
Branch
Wednesday, September 10, 2025
96 changes
1 change
Resolved issues and error corrections
Imported FEC accounting entries are now included when users open a sales journal from the accounting dashboard. This ensures sales-related imported entries are visible in the expected journal view, reducing confusion and missing-record concerns after imports.
Original PR description
**PROBLEM** When importing a FEC files, moves are created with the `move_type` `entry`. They don't appear in the action of the journal of type `sale` when clicking on the dashboard. **STEP TO REPRODUCE** 1. on a local database install `l10n_fr_fec_import` (you need to import a FEC file given by our client, dont do it on the runbot please !) 2. select the french demo company 3. import the FEC file (accounting/settings/import a file) (for file, see [ticket](https://www.odoo.com/odoo/project/49/tasks/4848763) ) 4. goes in the dashboard, and click on the `Ventes Marchandises` journal. 5. notice the entries does not appear in the action. **CAUSE** When importing a FEC file, all moves are created with the `entry`. The domain for `sale` journal doesn't include the move of type `entry`. **FIX** Adding `entry` in the `sale` journal domain. opw-4848763 Forward-Port-Of: odoo/odoo#222208
65 changes
New functionality added to Odoo
The KPI summary now includes the number of documents waiting in the Inbox and clearer status information for pending account returns. This helps teams quickly spot outstanding documents and upcoming or overdue filing work without navigating into each area separately.
Original PR description
With this commit, `kpi.provider.get_kpi_summary` will show how many documents are present in the Inbox folder, as well as the status of the `account.return.types` (`late`, `longterm`, `to_do`, `to_submit` and `done`) depending on which account.return are not completed and on their due date. Task-id: 5062431 Forward-Port-Of: odoo/enterprise#93720
Enhancements to existing features
The AI live chat website snippet was renamed and simplified, making it easier to maintain and configure. It now automatically assigns an AI agent, fixes chat focus and access checks, and limits public users to accessible reference links, improving reliability and visitor experience.
Original PR description
- Rename support_ai component to ai_livechat component. - Remove s_ai_livechat_data div: The config data of the `s_ai_livechat` website snippet was being stored twice, one in the dataset of the…
- Rename support_ai component to ai_livechat component. - Remove s_ai_livechat_data div: The config data of the `s_ai_livechat` website snippet was being stored twice, one in the dataset of the `ai_livechat` snippet element and another time as data attributes on the `s_ai_livechat_data` div. To clean this redundency, the `s_ai_livechat_data` div was removed along with all the references to it. - Group the options `fallbackButtonText` and `fallbackButtonURL` under `fallbackButton` category in snippet options. - Simplify the template/logic of the component. - Add agent automatically to livechat snippet: It is easy to forget to configure an AI Agent on the AI Livechat Snippet. So, an AI Agent is now set automatically on the livechat snippet. - Fix a bug: The ai_livechat component has 2 chat styles namely fullscreen and popup. The focus should be set on the textarea of the component only if the chat style is fullscreen. Steps to reproduce: 1. Set the chatstyle to popup on the ai_livechat component. 2. Enter a prompt. 3. A chatwindow pops up, and the AI response is shown in that window. 4. The focus is moved from the chatwindow to the textarea of the ai_livechat component. - Fix a bug: The condition that checks the agent presence and the access rights to it when creating a new ai chat channel for the ai livechat website snippet was incorrect. It should use or instead of and. - Fix a bug: The snippet options plugin (AILivechatOptionPlugin) of the ai_livechat website snippet should be added as part of the `website.website_builder_assets` instead of `html_builder.assets` because it is only valid in website context. See https://github.com/odoo/odoo/pull/225089
The Equity app is enhanced with new ultimate beneficial owner (UBO) capabilities and broader updates to equity records, transactions, valuations, cap tables, and portal communications. This helps businesses manage ownership structures more clearly and keep equity stakeholders better informed.
Original PR description
This commit is an improvement to the equity app. task-5043345
The Philippine reporting module has been updated so SAWT/QAP and SLSP reports better match government-required formats. Users can now generate DAT files directly instead of exporting spreadsheets and converting them separately, reducing manual work and supporting more document types.
Original PR description
Updates the reporting module in general to better align with the government guidelines. - Update the SAWT/QAP and SLSP reports, in order to make them match better the expected outputs that will be sent to the government. - Remove the xlsx export we had until now, and replace it with a direct generation of DAT files. Users had to use a tool to transform these xlsx into the final DAT, so they can now skip this step. This process adds support for a larger variety of supporting documents. task-4689269
The Stage Color option is no longer shown as a reporting measure in CRM and Helpdesk analysis views. This keeps reports cleaner by removing a metric that does not provide meaningful business insight.
Original PR description
This commit hides the measure `Stage Color` from graph, cohort and pivot views of the `crm.lead, helpdesk.ticket` model, as it doesn't really make sense to measure on a stage color. The measures are made from the model's fields and all possible measures are shown unless it is made invisible. Therefore make it explicitly invisible. Task-5065924
Documents and trash views now use the original creation date as the default sorting order instead of the last updated date. This keeps document lists more stable, so small metadata changes like tags or name edits do not unexpectedly move files around.
Original PR description
As the write_date can be reset by very small changes like adding a tag, updating its name and also during some upgrade, we set the default ordering to create_date. We do similarly for the trash. Task-5025453 Forward-Port-Of: odoo/enterprise#93952 Forward-Port-Of: odoo/enterprise#92840
The AI chat opened from the systray now shows three rotating example prompts tailored to the apps installed in the database. AI responses are also guided to use the user’s timezone when discussing dates and times, making calendar and scheduling answers more relevant.
Original PR description
Purpose: -------- When opening the ai chat using the systray button, one wants to show 3 different examples of prompts buttons, based on the current modules that are installed. In order to not create a lot of bridge modules that would each contain a a few lines of data, these data are installed with the ai module and the search method of the ai prompt button model has been overridden to skip records from uninstalled modules. Task-5008938
The promotional video shown when users try to access Studio without it installed has been replaced with a newer version. This keeps the Studio introduction current and improves the first impression for potential users.
Original PR description
**Purpose:** Previously, when the user toggled Studio, it would open a dialog with an old promotional video if the Studio was not installed. Now, the old promotional video has been replaced with the new one. task-5061824
Indian GST returns now use Odoo’s shared tax return framework, making GSTR-1 and GSTR-2B workflows more consistent and easier to maintain. Businesses also get a new purchase report, direct JSON export, guided submission steps, and integrated vendor bill fetching within the GSTR2B process.
Original PR description
This commit refactors the Indian GST return handling to adopt the new generic `account.return`, `account.return.check`,and `account.return.type` models. The old model `l10n_in.gst.return.period` is…
This commit refactors the Indian GST return handling to adopt the new generic `account.return`, `account.return.check`,and `account.return.type` models. The old model `l10n_in.gst.return.period` is fully replaced. Previously, GSTR-1, GSTR-2B, and bill fetching through IRN were implemented on the `l10n_in.gst.return.period` model. Key changes:- New - Introduces Purchase Report Return Types - Introduces GSTR1 and GSTR2B return types. - Bypasses the generic annual corporate return type Model Migration Migrates fields from l10n_in.gst.return.period to `account.return` - Fields with the same name and purpose (e.g., company_id, tax_unit_id, etc.) are directly adopted. - Certain fields required explicit renaming for consistency: 1. start_date → date_from 2. end_date → date_to - Other GSTR-specific fields are aligned or removed depending on their relevance - GSTR3B fields and their computes are completely removed - Adopts new M2M fields with custom relation names. Workflow Enhancements - Introduces custom states for GSTR1 and GSTR2B to support their workflows. - Adds support in generic `account.return` to handle next_state transitions. - Creates the checks for GSTR1 validations. GSTR1 Flow - JSON spreadsheet export can now be directly downloaded (no dependency on Documents app). - OTP validation no longer auto-triggers the next GST action — the user must explicitly push data. - Adds an intermediate wizard to guide the user before submission. GSTR2B Flow - Implements Purchase Report using new l10n_in_gstr_section. - Vendor bill fetching is now integrated with GSTR2B workflow. - Reconciliation/matching logic remains unchanged. UI changes - Hides tax return creation if e-filing is disabled from reports and redirects. user to enable filling from the dashboard. - Aligns tax return views with the generic framework. Notes - Core JSON creation and reconciliation logic from previous implementation is preserved. - This aligns Indian GST returns with the generic tax return framework for better maintainability. Community PR - https://github.com/odoo/odoo/pull/223358 Upgrade PR - https://github.com/odoo/upgrade/pull/8281 task-4750259
Users with Invoicing & Banks access can now start online bank synchronization when a bank journal is configured for online feeds and not yet connected. This makes bank connection setup available to the right business users directly from the dashboard.
Original PR description
Before this commit: - Users with "Invoicing & Banks" access rights could not create a bank synchronization, and the "Connect Bank" button was not visible. After this commit: - Users with "Invoicing & Banks" access rights can now create a bank synchronization if the journal has "Bank Feeds = Online Synchronization" and the bank is not yet connected. - The "Connect Bank" button is now visible to them. task-4840544 Forward-Port-Of: odoo/enterprise#87408
The Sign app now makes signing requests easier to understand and manage with a new View option, clearer cryptographic signature messaging, and a company-specific indicator. It also prevents users from trying to resend expired requests and makes uploaded PDF names cleaner by removing the unnecessary template prefix.
Original PR description
Before this commit - No "View" button in the sign request list. - Cryptographic signature was company-specific but had no clear icon/indicator. - "Resend" button still appeared even when a request was expired. - Uploaded PDFs always showed the "template" prefix. After this commit - Added "View" button in the list view. - Updated cryptographic signature description. - Added icon to indicate company-specific cryptographic signature. - Hide "Resend" button for expired requests. - Removed "template" prefix when uploading PDFs. impact: - Easier to follow the cryptographic signature process. - Clearer that signatures are company-specific. - Users won’t mistakenly try to resend expired requests. - Cleaner, more user-friendly UI. task-5015648
Helpdesk tickets created from incoming email aliases now leave out the sender's email signature from the ticket description. This keeps ticket content focused on the actual request, making it easier for support teams to read and act on new tickets.
Original PR description
This commit excludes email signatures from ticket descriptions when created from an alias. task-4795473
Financial return names and related validation checks are now translated into all available languages when they are created. This makes reporting workflows clearer for multilingual teams and helps users understand return checks consistently in their preferred language.
Original PR description
With this commit, return names are now translated to all languages available during creation. Another improvement is that the checks are also translated to all available languages, this includes the name, the message and the record name if there is. This is also supported using the check templates. task-4818751
Users can now create a new dashboard group directly from the dialog used to add a pivot, graph, or similar item to a dashboard. This reduces setup friction and helps teams organize dashboards without leaving their current workflow.
Original PR description
In the dialog to insert a pivot/graph/etc. into a new dashboard, allow the creation of a new dashboard group task-5075916
The AI Documents setup was cleaned up by removing duplicate options and making the document sorting wizard easier to configure. This reduces confusion for users setting up automated document actions and helps prevent incorrect action settings.
Original PR description
Purpose ======= Since f7ecd6ddf8fc3457e879ac5e60f63a115e0173b2 , we added the `use_in_ai` field, but it was already in the view. So we removed the old one. Disable the "quick create" of the server actions, in the sort wizard, and set the model to `documents` by default. Task-5076623
The group configuration menu now shows an icon for the automation action, making the option easier to recognize. This is a small usability improvement that aligns the enterprise interface with related updates in the main Odoo product.
Original PR description
This commit adds an icon to the group configuration menu's automation action based on changes made in https://github.com/odoo/odoo/pull/221709. task-4988827
Signed documents created from uploaded PDFs with fillable fields are now converted so those fields can no longer be edited after download. This helps ensure signed PDFs behave as final documents and reduces the risk of accidental post-signature changes.
Original PR description
## Before - When users uploaded PDFs with fillable form fields (AcroForms), those fields stayed editable even after the document was signed and downloaded. - This caused confusion, as users expected signed documents to be final and non-editable. ## After Introduced a flatten_pdf method to make form fields read-only by: - Extracting the field values and rendering them as static text at the same positions. - Removing all interactive form definitions (/Annots, /AcroForm) from the PDF. - Re-encoding the updated PDF in base64. ## Impact - Ensures signed PDF's no longer contain editable fields. - Prevents accidental edits after signing, improving document integrity. --- task-4730732
The rental search snippet now uses the current search icon style instead of an older icon. This keeps the website rental experience visually consistent with the rest of Odoo and avoids outdated styling in customer-facing pages.
Original PR description
Previously, the `rental search` inline snippet used the old `fa fa-search` fontAwesome icon. This commit replaces it with the correct search icon (`oi oi-search`). task-5077472
The Italian VAT tax report layout has been updated to more closely match the official format from the Italian revenue authorities. Key context fields are now shown directly in the report, making them visible in PDF and XLSX exports and easier for users to review.
Original PR description
*: account_reports, l10n_it_reports, l10n_it_xml_export Improvement on the tax report layout, to make it more like officially documented by the Italian revenue authorities. See page 12: https://www.agenziaentrate.gov.it/portale/documents/20143/8487117/IVA_Annuale_2025_mod.pdf/f080de03-01f0-c4d6-8c80-8b5573797b89?t=1736949831826 For example, in the official docs some context information fields (those in VP1: Subcontracting, Exceptional Events, Extraordinary Operations) are directly shown on the report. We moved them in Odoo from our export wizard to the report itself to match that layout. This way they are also exported to PDF and XLSX. community pr: https://github.com/odoo/odoo/pull/223592 upgrade pr: https://github.com/odoo/upgrade/pull/8253 Task [link](https://www.odoo.com/odoo/967/tasks/5000725) task-5000725
Users can now access AI writing help directly from the smaller HTML message composer. This reduces context switching and makes composing messages faster and more convenient.
Original PR description
This commit allows the use of the AI plugin in the HTML composer, enhancing its functionality and user experience and hence, the user does not have to switch between different tools to access AI features. task-4772129
The Project app’s enterprise Gantt view has been updated to match recent changes that remove template-related menus. This keeps project planning screens aligned with the simplified navigation and helps avoid confusion from outdated template options.
Original PR description
adapt gantt view to changes introduced in related community PR: https://github.com/odoo/odoo/pull/225971 task-5073029
Helpdesk users can now create a credit note even when no invoice is selected, and the resulting credit note is linked back to the related ticket. This improves traceability between customer support cases and refunds while adding safeguards to prevent empty refunds.
Original PR description
- create a new move when pressing the refund button if no moves are selected - Link the credit note with the helpdesk ticket - Create a ticket stat button in the credit note form --- task-4781360
Managers and cashiers can now clock employees in or out directly from the cashier selection screen in Belgian POS. The popup also shows how long the current cashier has been clocked in, making shift status easier to track during daily operations.
Original PR description
This commit improves the cashier selection popup by allowing direct Clock In/Out actions from the screen. It displays the time since the current cashier’s last clock-in, and also allows the manager to clock in or out all employees. task-4877282
This update adds tax return support for Irish and UK EC Sales List and Intrastat reporting. Businesses operating in these countries can prepare the required tax-related declarations more directly in Odoo, improving compliance workflows and reducing manual effort.
Original PR description
Add the tax return for the irish and british EC Sales List and Intrastat reports. task-id: 4784433
Resolved issues and error corrections
The WhatsApp integration now uses the latest supported Meta Graph API version. This helps prevent service disruptions caused by older API versions being retired and reduces the need for frequent future updates.
Original PR description
As outlines in the version [changelog] v17 of the API which we are currently using will be converted to the next oldest supported version of the API as per [policy] We can migrate directly to the latest version and avoid any issue in the next few years instead of having to worry about potentially breaking changes every few months. [changelog]: https://developers.facebook.com/docs/graph-api/changelog/versions/ [policy]: https://developers.facebook.com/docs/graph-api/guides/versioning task-4971841 Forward-Port-Of: odoo/enterprise#94110 Forward-Port-Of: odoo/enterprise#93170
This fix removes an unused request timeout option from the Australian payroll API integration. It keeps the integration aligned with the shared EDI proxy behavior and reduces the chance of confusion or inconsistent handling without changing day-to-day user workflows.
Original PR description
remove useless timeout parameter from edi proxy user `_make_request`. It has no legitemate use. see https://github.com/odoo/odoo/pull/225784 no-task
The German tax report XML export now keeps periods as decimal separators, matching Elster's current requirements. This prevents submitted VAT return amounts from being ignored because of an unsupported comma format.
Original PR description
**Steps to reproduce:** 1. Install `l10n_de_reports` module. 2. Configure a company with a valid SteuerNummer. 3. Post some vendor bills with `19% I` VAT. 4. Go to *Accounting → Reporting → Tax…
**Steps to reproduce:** 1. Install `l10n_de_reports` module. 2. Configure a company with a valid SteuerNummer. 3. Post some vendor bills with `19% I` VAT. 4. Go to *Accounting → Reporting → Tax Report*. 5. Export the report to XML from gear icon. **Observed behavior:** - The generated XML contains amounts with a comma `,` as the decimal separator. - Elster ignores values with commas, so amounts are missing from the submitted VAT return. **Root cause:** - The QWeb XML export replaced the decimal point `.` with a comma `,`. - Elster launched a new tax return application (*einfachELSTERplus*), which enforces `.` as the decimal separator. **Solution:** - Stop replacing `.` with `,` when exporting values to XML. - Keep amounts as floats with period separators, while still rounding or inverting values as required for specific Kz fields. **ref:** https://www.elster.de/eportal/helpGlobal?themaGlobal=osseust_import opw-4935738 Forward-Port-Of: odoo/enterprise#94130 Forward-Port-Of: odoo/enterprise#93623
This fixes a timing issue that could affect the setup of signable PDF documents. The change makes the signing template editor more reliable by ensuring the item count update is available when needed.
Original PR description
Fixes a race condition in the editable PDF iframe where updateSignItemsCountCallback could be called before it was defined. The callback is now passed as a prop instead of being set from another component. task-5065598
This update assigns the correct payroll user access group to several India payroll employee fields. It prevents a failing automated test and helps ensure payroll-related employee information is handled consistently for authorized payroll users.
Original PR description
Issue: test_employee_fields_groups: This test case fails. Reason: The fields 'l10n_in_pt,l10n_in_esic,l10n_in_labour_welfare' fails because no Groups are assigned to these fields. Fix: Assigned 'hr_payroll.group_hr_payroll_user' to these fields as these fields are in hr_version and also add group to l10n_in_provident_fund, as there also no group is assigned to this field. runbot error - https://runbot.odoo.com/odoo/runbot.build.error/231596
Reinstalling the SEPA Direct Debit module after using it for batch payments no longer triggers an error when no pre-notification periods are available. This helps businesses avoid setup interruptions and keeps payment module maintenance smoother.
Original PR description
**Issue** When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not…
**Issue**
When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not iterable`.
**Steps to Reproduce**
1. Create a batch payment with SEPA Direct Debit.
2. Uninstall the `account_sepa_direct_debit` module.
3. Reinstall the module.
**Root Cause**
During module (re)installation, the compute method `_compute_sdd_required_collection_date` is triggered before any SEPA mandates or their pre-notification periods exist. This makes `mandates.mapped('pre_notification_period')` return an empty list. The code then calls:
max(minimum_offset, *mandates.mapped('pre_notification_period'))
When the list is empty, this reduces to `max(minimum_offset)`, which is invalid since `max()` with a single integer argument expects an iterable and raises a `TypeError`.
**Fix**
Handle the empty case so that there is a valid fallback both during installation and when mandates have no configured pre-notification period.
Opw-5042153
Forward-Port-Of: odoo/enterprise#93598Saudi payroll employee fields now use the correct payroll access role instead of the general HR employee role. This fixes a failing validation test and helps ensure non-payroll users do not see payroll-related information.
Original PR description
Issue: - `test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view` test case fails due to the missing payroll user group on the fields. Reason: - The fields were incorrectly assigned to the `hr.group_hr_user` group, which is for employee users. - These fields are payroll related and should only be visible to users with payroll specific roles. Since the test case checks for the correct visibility based on user roles, it failed when it couldn't find the required payroll rights on these fields Fix: - Updated the SA localization fields by assigning them the `hr_payroll.group_hr_payroll_user` group. - This resolves the test case failure and ensures that the fields are hidden from non-payroll users as intended. build_error-231289
The report annotation walkthrough test now waits for annotations to appear before continuing. This prevents false test failures and helps keep accounting reports more reliable during development.
Original PR description
We are now waiting for the annotations to appear.
This update fixes access setup for an Italian payroll employee field and prevents payroll export tests from running when a required leave-management component is not installed. It helps keep automated checks reliable without changing day-to-day business workflows.
Original PR description
Issue: 1) 'test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view' test fails due to the missing payroll user group in the 'l10n_it_sdworx_code' field. 2) Couldn't find the 'hr.leave.type' model when loading the test case. Reason: 1) The field required payroll user rights as it is used in the payroll section in the employee form view. 2) 'hr.leave.type' and 'hr.leave' are models of the hr_holidays module, which is not defined in the manifest. Solution: 1) Assign the 'hr_payroll.group_hr_payroll_user' group to the field 'l10n_it_sdworx_code'. 2) Check if the hr_holidays module is installed then run the test case otherwise return. build_error-231525 build_error-231526
Payroll advice reports in Indian payroll now take the reporting period from the selected payslips instead of today's date. This prevents past payroll advice from showing the wrong period or missing the period entirely, improving report accuracy for payroll teams.
Original PR description
Generating a payroll advice would use the current date in order to find other payslips that are for the current period and use this to fill in the period on the advice. However, if you do this for a past payslip, it will either not find any or get the incorrect period. Changed the behavior to use the actual payslips and get the period from those payslips to fill in the period on the report. opw-4582990 Forward-Port-Of: odoo/enterprise#92935 Forward-Port-Of: odoo/enterprise#81625
This update fixes small usability issues in the Appointment app so users can click the Configure button reliably and start typing question names immediately. It also makes publication status visible in the appointment type list, helping teams quickly see which appointment options are live.
Original PR description
1. Make 'Configure' button in appointment kanban view have correct click area 2. Autofocus name on appointment.question form instead of placeholder in certain cases 3. Add is_published in the list view of appointment types. Task-5057504
Tyro payment refunds now show the expected “Refund in process” message instead of prompting users to wait for a card. This keeps the refund experience consistent with other payment terminals and reduces cashier confusion during refund processing.
Original PR description
Currently tyro completely removes the default behaviour of displaying "Refund in process" when requesting a refund and instead displays "Waiting for card" instead which is not the expected default behaviour on other payment terminals who process the refund without presenting a card.
This fix prevents subscription invoices from being generated or sent twice when customers pay through the portal and automatic invoicing is enabled. It helps avoid duplicate invoice documents, reducing confusion for customers and extra follow-up work for accounting teams.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Use a localization that uses EDI-signed invoices; 2. enable `sale.automatic_invoice` via `ir.config_parameter`; 3. pay for a subscription via the portal. Issue ----- Invoice is generated twice. Cause ----- Commit 7c5fd63729c1 added automatic EDI invoice signing for subscriptions paid via portal. This assumed that the `sale.automatic_invoice` parameter remained unset. If this parameter is set, the invoice is already generated when post-processing a transaction in `sale`. Solution -------- Don't send invoices whose `is_move_sent` field is set to `True`. Also, don't set `from_cron` to `True` on automatic payments, as this is only intended for moves that have `sending_data` filled by `account.move.send.batch.wizard`. opw-4648189 Forward-Port-Of: odoo/enterprise#93881
Creating a new folder from the All documents view now correctly places it in My Drive. This restores the expected behavior and helps users keep newly created folders in their personal workspace without confusion.
Original PR description
About creating folder in All, restoring logic sending to 'MY', OK as portal users don't have the option to create folders. Task-5075200
Portal users can no longer see controls that would let them try to change article sharing settings or other members' access rights. This prevents confusing errors and redirects users safely if leaving an article removes their own access.
Original PR description
Steps to reproduce =============== As an admin ---------------- 1. Go to knowledge 2. Open any article. 3. Add a portal user as a member with write access. As a portal user -------------------- 1. Open the shared article. 2. On the top right corner, click on members button --> List of members along with their rights will be shown. The portal user can open the dropdown to alter the rights of other members. Though doing so will raise an AccessError (in the logs). After this commit, the portal user will *no* longer see the 1. Toggle to share article to the web. 2. Dropdown to modify members' rights. Task-4863456 Forward-Port-Of: odoo/enterprise#89394
The dashboard publish control now changes state only when users interact with the checkbox or its label. This prevents accidental publish status changes when clicking elsewhere in the dashboard header, making editing dashboards more predictable.
Original PR description
**Steps to reproduce:** - Open a dashboard in edit mode. - Click the “Publish” toggle to change its state. - Click elsewhere on the header (outside the toggle). → The publish state flips back unexpectedly. **Before this PR:** The wrapper container (.o_sp_publish_dashboard) had a click handler, causing clicks on the header to re-toggle the publish state. The CheckBox was rendered with a no-op onChange, so both elements competed for control. **After this PR:** Interaction is handled exclusively by the CheckBox component. toggleDashboardPublished is bound directly to its onChange. Clicking the label text now correctly toggles the checkbox and publish state. Container clicks outside the checkbox no longer affect the state. Task: [5062368](https://www.odoo.com/odoo/project/2328/tasks/5062368) Forward-Port-Of: odoo/enterprise#94061
Fixed an issue where opening an embedded list view from a Knowledge article could unintentionally save internal view settings and later cause an error when editing the article. Users can now return to and edit Knowledge articles with embedded list views without hitting a traceback.
Original PR description
Steps to reproduce =================== 1. Insert any list view in the knowledge article. 2. Click on open view from the article. 3. Come back and click edit. -> Traceback occurs Technical…
Steps to reproduce =================== 1. Insert any list view in the knowledge article. 2. Click on open view from the article. 3. Come back and click edit. -> Traceback occurs Technical ============= When we open a view from an embedded view in the article, we add `orderBy` from the action context to the action props if it exists. As the action prop is initialized and assigned directly from `embeddedState.additionalViewProps` without copying, it mutates the original object, changing the `data-embedded-props` attribute in the DOM and marking the body of the article as unsaved from `StateManager.changeState`. The action continues, and the action service commits those unsaved changes to the article. Once it is saved and the action is executed, when we get back to the article and click on edit, we check for `additionalViewProps` to be undefined/empty for all other views except calendar. As the DOM already has saved data in attributes, we get `orderBy` in `additionalViewProps`, and thus a manual error is thrown in the `editView` function. After this commit =============== Clone `additionalViewProps` when preparing the view action props. Task-4921282 Forward-Port-Of: odoo/enterprise#91113
The Helpdesk ticket list now opens correctly even when there are no tickets to show. This prevents an error that could block teams from accessing their ticket list view, improving day-to-day reliability.
Original PR description
Previously, accessing the Helpdesk ticket list view with zero tickets caused a crash due to improper handling of folded sample data. This commit resolves the root issue by ensuring sample data folding does not trigger errors in empty views, improving stability. Steps to reproduce the original issue: - Navigate to Helpdesk > Teams > Tickets. - Ensure zero tickets exist and switch to list view. Task-4971510
The Documents kanban view no longer shows an unnecessary second scrollbar. This makes browsing document cards smoother and reduces visual clutter for users.
Original PR description
This commit fix the useless double scroll bar in kanban view. Task-4844661 Forward-Port-Of: odoo/enterprise#90548
Duplicated reconciliation models are now treated as user-created models, so they appear in the expected filters right away. Archiving a reconciliation model also clears related manual unreconciled statement line links, reducing confusion and keeping accounting workflows tidy.
Original PR description
When duplicating an automatically created reco model, the field created automatically was still set to True and so the filter doesn't show the reco model at first. By adding the copy=False it solve the problem Also, this commit will remove any manual reco model of unreconciled statement line when archiving that reco model. no task id Forward-Port-Of: odoo/enterprise#94205
A test was added to ensure early payment discounts created during bank reconciliation receive the correct analytic distribution. This helps prevent accounting reports from missing analytic allocation on discount lines, aligning bank reconciliation behavior with manual payment registration.
Original PR description
This commit adds a test for the following issue: - Configure an early discount payment term (e.g., 2/7 Net 30). - Configure the analytic distribution model with the account used when a discount is granted (e.g., 657000 on the BE fiscal position). - Create an invoice using the early discount payment term. - On bank reconciliation, register the transaction taking into account the early payment discount (e.g., 98% of the invoice amount_total). On the third line with account 657000, corresponding to the early discount payment, the analytic distribution model does not apply. In contrast, when manually registering a payment for the invoice, the analytic is correctly applied. community pr: https://github.com/odoo/odoo/pull/217933 opw-4868986 Forward-Port-Of: odoo/enterprise#91651 Forward-Port-Of: odoo/enterprise#90641
This fix prevents Uruguay electronic invoice creation from failing when an invoice line has no product but does have accounting details. If no line description is available, the system now safely uses a placeholder instead of showing an error.
Original PR description
This pull request makes a minor adjustment to the logic for extracting item names and descriptions in the `_l10n_uy_edi_get_line_nom_and_desc` method. The change ensures that the presence of `aml.name` (the line description) is checked directly, rather than relying on the truthiness of the entire `aml` object. Before this PR, if the aml of an invoice only have the `account_id` field filled and no `product_id`, the `_l10n_uy_edi_get_line_nom_and_desc` will raise an error message like `TypeError: 'bool' object is not subscriptable` when trying to create de CFE document. <img width="1254" height="828" alt="image" src="https://github.com/user-attachments/assets/eaadad4c-46c3-4e3b-be52-9fcd146f2c22" /> <img width="1526" height="795" alt="image" src="https://github.com/user-attachments/assets/1b831f41-9774-4ed5-9a9d-9777ee0633e9" /> With this fix, we ensure there is a name to grab or the '-' will be send instead. Forward-Port-Of: odoo/enterprise#93838
Belgian payroll work entry UCM codes now preserve spaces so they remain the required three characters long. This prevents codes such as "PR " from being shortened when users leave and return to the field, helping ensure payroll data matches UCM specifications.
Original PR description
#### Issue: - UCM work entry code should be 3 characters long and allow spaces to get this length #### Step to reproduce: - In a Belgian company - Go to Payroll > Settings > Work Entry Types > New - Add a name - Add a Payroll Code - In the `Country` field fill Belgium - In the field `UCM Code` enter "PR " - Select another field - Select `UCM Code` again #### Current behavior: - The field `UCM Code` was updated to "PR" #### Expected behavior: - The field should stay to "PR " #### Solution: - Don't trim the field and add a spaces if needed opw-5014372 Forward-Port-Of: odoo/enterprise#92838
The Peru electronic invoicing module now installs more reliably on large databases by reducing memory use during setup. It also avoids an installation error when updating tax group information, helping customers complete deployments without failures.
Original PR description
### [PERF] l10n_pe_edi: Avoid OOM during installation ### Description: Installing `l10n_pe_edi` on large databases with many moves and move lines could cause out-of-memory (OOM) errors. This happens…
### [PERF] l10n_pe_edi: Avoid OOM during installation ### Description: Installing `l10n_pe_edi` on large databases with many moves and move lines could cause out-of-memory (OOM) errors. This happens because several stored fields need to be computed at installation. ### Fix: This fix adds the columns via SQL, preventing Odoo from computing and populating the field for all existing records. This reduces memory usage and avoids installation failures. ____ ### [FIX] l10n_pe_edi: Fix error during post-init hook ### Description: During installation, the `l10n_pe_edi` module's post-init hook attempts to update tax groups, setting the new `l10n_pe_edi_code` field. This can cause an error if a tax group doesn't exist and needs to be created, because the name field is missing in the list of values given to the `_load_records` function. ### Fix: This fix filters the tax groups to only update existing ones. This prevents `_load_records` from trying to create new groups, which avoids the installation error. ___ ### Reference: opw-4982181 Forward-Port-Of: odoo/enterprise#91997
This fix prevents an error when Ecuadorian delivery guides are generated while barcode scanning is disabled in Inventory. Businesses can continue creating validated delivery documents without needing to enable barcode features they do not use.
Original PR description
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch…
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch to the `EC company`. - Uncheck `Barcode Scanner` in the Inventory `settings`. - Create a new warehouse and set the `Entity` and `Emission Point`. - Navigate to Inventory > Operations > Deliveries and create a new delivery. - Add details > mark as Todo > Validate > Generate Delivery Guide. **Error:** `AttributeError: 'stock.move.line' object has no attribute 'qty_done'` **Root Cause:** At [1], the `qty_done` field is used, but it is defined in the `stock_barcode` module. When the Barcode Scanner is disabled, the field is not available, leading to the error. **Fix:** This commit ensures that the `qty_done` field is always available when creating Delivery Guides by adding `stock_barcode` as a dependency in the `l10n_ec_edi_stock` module. [1]: https://github.com/odoo/enterprise/blob/ba5b9790f28e2f7eabda22e5992737eab0e82c6e/l10n_ec_edi_stock/models/stock_picking.py#L354 sentry-6851008674
This fix ensures that delivery providers disabled in UrbanPiper remain disabled when a point of sale session is resumed. It prevents providers from being automatically re-enabled and avoids unnecessary background update requests, helping staff keep delivery availability accurate.
Original PR description
Steps to reproduce: - Configure urban piper in pos.config - Open Register - You could see a notification that providers are online on your config - Disable any one provider. - Go to backend. - Click Continue Selling Issue: - Despite disabling the provider, all providers get enabled as soon as we resume the pos.config Cause: - Not updating togglestate properly while going to the backend. - Unnecessary api request when resuming session. Fix: - Not removing the toggleState from local storage as the user go to the backend - When the user resumes the session, restrict api request for location update. - Remove dependency from local storage and handling all through backend only. task- 4962969 Forward-Port-Of: odoo/enterprise#93691 Forward-Port-Of: odoo/enterprise#90987
The analytic account filter in accounting reports is now initialized after the options it depends on. This restores the missing filter so users can correctly narrow report results by analytic account.
Original PR description
The origin of the bug comes from this https://github.com/odoo/enterprise/pull/86716 It added a `_init_options_filters` function which was called with a default sequence of 200. The `_init_options_analytic_groupby` has a sequence of 995. The _init_options_filters basically ran before the analytic account options which it depends on. Th fix was to set a sequence large enough to `_init_options_filters` so that it would always run after everything.
This fix prevents report searches from running before report lines are available, avoiding empty or incorrect results when reports initially load without data. Once the data is loaded, the search is applied again so users get the expected filtered report view.
Original PR description
Recently, we changed reports to load without their data (and lines), since the search bar is loaded with the options it will try to filter on lines that haven't been loaded. Now, we are not searching if the lines are not loaded and search again once they are loaded. task-5068340
The Social app now displays action buttons in the stream post view with proper spacing. This small visual fix makes the interface cleaner and easier to use.
Original PR description
In the stream post view, the action button container uses the `gap-1` class, which applies spacing only to its direct children. Since the action buttons are wrapped in a `<div>`, they are not direct children, and the gap does not apply. As a result, the buttons appear flush against each other with no spacing. To resolve this, unwrap the action buttons from the `<div>`. Once unwrapped, the `gap-1` class will apply correctly, ensuring the buttons are evenly spaced and the interface looks cleaner. | Before | After | |--------|--------| | <img width="275" height="53" alt="Screenshot 2025-09-10 at 09 13 57" src="https://github.com/user-attachments/assets/c270d974-183e-48d5-9b58-2f97770ea13f" /> | <img width="282" height="45" alt="Screenshot 2025-09-10 at 09 14 18" src="https://github.com/user-attachments/assets/9eee758d-6d44-4dac-aebf-a9eb9f82cea5" /> | task-5072894
The bank reconciliation report now excludes currency exchange adjustment entries that do not represent real bank money movements. This prevents those adjustments from appearing under miscellaneous operations, giving finance teams a clearer and more accurate reconciliation view.
Original PR description
**Steps to reproduce** - Have foreign currency with rates for date 1 and date 2 - Have a Bank journal in foreign currency - Register a transaction in date 1 - In date 2 open the unrealized currency report - Create the adjustment entry - From the Accounting dashboard Bank[EUR] > Reconciliation report **Issue** The adjustment entry difference is present under the 'Misc. operations' line. This occurs because we look for journal entries hitting the bank account but that specific entry should not be reported as it does not represent a bank in/out operation A solution is to exclude the exchange entry journal, so any operation reported there is not taken into account in the report opw-4867870 [Ticket link](https://www.odoo.com/odoo/project/49/tasks/4867870) Forward-Port-Of: odoo/enterprise#94172 Forward-Port-Of: odoo/enterprise#93999
The follow-up filters are now only shown to users who have permission to access the related follow-up status information. This prevents users from seeing or using filters that would fail due to restricted access, improving reliability and clarity.
Original PR description
Follow-up filters search using an inaccessible field. The filters should only be visible to users that have access to `followup_status`.
[This commit][1] introduced errors in the Dutch and German translation files. As a result this module can not be installed anymore when any of these languages is used. This commit fixes the errors. [1]: https://github.com/odoo/enterprise/commit/d3d5e667a2d543b55a40148cb536e54d2ac64300
Original PR description
[This commit][1] introduced errors in the Dutch and German translation files. As a result this module can not be installed anymore when any of these languages is used. This commit fixes the errors. [1]: https://github.com/odoo/enterprise/commit/d3d5e667a2d543b55a40148cb536e54d2ac64300
Public users can now open shared signing links and copy sign requests without running into access errors. The change keeps permissions protected while allowing the system to handle the required recipient information in the background.
Original PR description
Issue: * When a sign request was copied via a public share link, the process failed with an `AccessError`. * This happened because the computed field `cc_partner_ids` (partners in CC) was read as the…
Issue:
* When a sign request was copied via a public share link, the process failed
with an `AccessError`.
* This happened because the computed field `cc_partner_ids` (partners in CC) was
read as the *Public user*, who does not have read rights on `res.partner`.
* With recent core changes, many2many writes now enforce read access on linked
records, making the error unavoidable.
Steps to reproduce:
1. Open the master on Runbot.
2. Upload a PDF to Sign.
3. Press the `Share` button.
4. Log out of the account.
5. Open the copied share link.
6. A traceback appears in the log with an access error on `res.partner`.
Fix:
* Compute the `cc_partner_ids` under `sudo()` in the copy.
* This ensures the system can read the CC partners with elevated rights and only
passes their IDs (safe to use) to `message_subscribe`.
Impact:
* Public users can now open and copy sign requests from share links without
triggering access errors.
* Preserves security: only the system uses `sudo()` for computing, while the
actual subscription still writes the partner IDs as normal.
task- 4067945
---
```yml
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/odoo/odoo/community/odoo/http.py", line 2740, in __call__
response = request._serve_db()
File "/home/odoo/odoo/community/odoo/http.py", line 2281, in _serve_db
raise self._update_served_exception(exc)
File "/home/odoo/odoo/community/odoo/http.py", line 2279, in _serve_db
return service_model.retrying(serve_func, env=self.env)
File "/home/odoo/odoo/community/odoo/service/model.py", line 184, in retrying
result = func()
File "/home/odoo/odoo/community/odoo/http.py", line 2326, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/odoo/community/odoo/http.py", line 2541, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/odoo/community/odoo/addons/base/models/ir_http.py", line 357, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/odoo/community/odoo/http.py", line 788, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/odoo/enterprise/sign/controllers/main.py", line 498, in make_public_user
new_sign_request = sign_request.with_user(sign_request.create_uid).with_context(no_sign_mail=True, sign_request=sign_request).copy({
File "/home/odoo/odoo/enterprise/sign/models/sign_request.py", line 243, in copy
new_request.message_subscribe(partner_ids=old_request.with_user(old_request.create_uid).cc_partner_ids.ids)
File "/home/odoo/odoo/community/odoo/orm/fields_relational.py", line 45, in __get__
return super().__get__(records, owner)
File "/home/odoo/odoo/community/odoo/orm/fields.py", line 1738, in __get__
self.compute_value(record)
File "/home/odoo/odoo/community/odoo/orm/fields.py", line 1904, in compute_value
records._compute_field_value(self)
File "/home/odoo/odoo/community/addons/mail/models/mail_thread.py", line 468, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/odoo/community/odoo/orm/models.py", line 4913, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/odoo/community/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/odoo/enterprise/sign/models/sign_request.py", line 157, in _compute_cc_partners
sign_request.cc_partner_ids = sign_request.message_follower_ids.partner_id - sign_request.request_item_ids.partner_id
File "/home/odoo/odoo/community/odoo/orm/fields.py", line 1812, in __set__
self.write(protected_records, value)
File "/home/odoo/odoo/community/odoo/orm/fields_relational.py", line 727, in write
self.write_batch([(records, value)])
File "/home/odoo/odoo/community/odoo/orm/fields_relational.py", line 748, in write_batch
self.write_real(records_commands_list, create)
File "/home/odoo/odoo/community/odoo/orm/fields_relational.py", line 1475, in write_real
raise AccessError(model.env._("Failed to write field %s", self) + "\n" + str(e))
odoo.exceptions.AccessError: Failed to write field sign.request.cc_partner_ids
Uh-oh! Looks like you have stumbled upon some top-secret records.
Sorry, Public user (id=3) doesn't have 'read' access to:
- Contact (res.partner)
If you really, really need access, perhaps you can win over your friendly administrator with a batch of freshly baked cookies.
```After sending a document for signature from a record's chatter, users are now taken back to the original business record instead of staying on the signature document page. This keeps work flowing smoothly and reduces navigation friction after requesting a signature.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Open the chatter of any app record. - Open PDF uploaded in chatter. - Click on sign button for signing. - Send document for signing by keeping signer other than yourself. Before: - After sending for sign, the user stays on the document view instead of returning to the originating record. After: - After sending for sign, the user is redirected back to the originating record linked to the signature request. impact: - Improves user workflow by keeping them on the record they were working on. - Provides a smoother navigation experience. task-5059410 Forward-Port-Of: odoo/enterprise#93717
A test for the message attachment menu was updated to match a recent interface change. This helps keep automated checks reliable so future updates can be delivered with fewer false test failures.
Original PR description
Following https://github.com/odoo/odoo/pull/225216, this PR fixes the class used to target an active button. task-5058883 PR-commu: https://github.com/odoo/odoo/pull/225216
The AI app now checks for the correct PDF extraction library and handles missing or poor-quality PDF text more safely. This helps prevent background errors and avoids creating unusable AI content from invalid attachments.
Original PR description
## Issue Running the AI app locally without the pdfminer.six library results in cron errors while extracting the pdf text and creating the chunks. Since `pdfminer.six` is required for PDF text extraction, it must be installed. Only `pdfminer` installed doesn't work well with the majority of the attachments. ## Solution Check for `pdfminer.six` to be used for the PDFs' content extraction. If not there, then show a warning and fallback to the content extracted by the outdated pdfminer if there. If it is valid content, create the chunks and embed them, otherwise mark the source as failed. task-19060
This fixes an error that could prevent sales orders from being validated in the Point of Sale when the Belgium Blackbox module was installed. Businesses using this setup can now complete POS transactions without encountering the validation crash.
Original PR description
Since this PR (https://github.com/odoo/odoo/pull/216523) there is a traceback when the module `pos_blackbox_be` is installed and the order is validated. Steps to reproduce: - Install the module `pos_blackbox_be` - Go to the POS (no need to configure the blackbox for the POS) - Create a new order and validate it - See the traceback
Code cleanup and technical improvements
This internal refactor moves commonly used barcode and RFID scan helpers into the shared web tour testing tools. It makes integration tests easier to maintain and supports more efficient loading of test dependencies, with no expected impact on day-to-day users.
Original PR description
In this commit, we put scan and scan rfid in web_tour tour_helpers. As scan and scanRFID are used quite a lot and web_tour is only used for integration tests, it's more convenient to have scan helpers in web_tour. This commit is made in order to lazy load hoot-dom in web_tour.
The Manufacturing Planning Schedule suggestion flow is being moved into a guided wizard instead of storing a temporary selection on the main planning record. This reduces the risk of uninstall-related crashes and keeps the planning feature more stable for users.
Original PR description
This commit fixes the selection field `suggestion_period` in the MPS model to not store its value in the database. Storing this selection field can lead to crashes when MPS is uninstalled. Related PR: https://github.com/odoo/enterprise/pull/90553
This change makes it easier to customize which overdue and upcoming payment lines appear on customer follow-up reports. It helps businesses tailor customer communications without changing the standard reporting flow.
Original PR description
The goal with these hooks is to allow customization of overdue and due lines that are going to be printed on the followup report to be communicated to the customer. Forward-Port-Of: odoo/enterprise#93438
The Documents app and related integrations now use the term “folder” instead of “workspace” across settings, screens, tests, and supporting data. This makes the product language clearer and more consistent for users without changing the underlying business workflows.
Original PR description
* includes: account, account_peppol, approvals, fleet, hr, hr_recruitment, product, project, project_sale, sign, spreadsheet. This commit replace all the occurences of workspace into folder. Task-4896922
30 changes
Enhancements to existing features
Accounting now highlights invalid bank statements more clearly across dashboards, reconciliation, and statement forms. This helps finance teams spot issues earlier, avoid misleading balances, and protect transactions tied to valid statements from accidental deletion.
Original PR description
This commit brings more clarity on invalid statements. The reflected changes are : - Hiding Last Statement if its date is <= Lock Date - "Invalid Statement(s)" alert on the journal dashboard - Red balance amount and warning in the BankRecW when it contains invalid statements (clicking on the warning applies the filter) - Possibility to choose a statement when creating a transaction - Invalid statement warning in the statement creation form - Displays all warnings in the statement form view - When a file generate a statement, it is kept in its attachments - Prevent deletion of transactions if they belong to a valid statement - Empty statement are not taken into account for the dashboard Last Statement and the BankRecW balance task-4413473
Odoo can now communicate properly with IoT Boxes whose version is fixed to the latest stable Odoo release, even when that version is newer than the database. This helps keep IoT-connected workflows such as Belgian POS blackbox operations compatible during version transitions.
Original PR description
In odoo/odoo#221948, we make the IoT Box version "fixed" to the last stable odoo version. We then need to make databases send/accept requests from an higher IoT Box version. Forward-Port-Of: odoo/enterprise#91937
IoT boxes now receive a clear unauthorized error when the database cannot identify them during driver downloads. This replaces an empty response, making setup or connection issues easier to diagnose and resolve.
Original PR description
When an iot box tries to download drivers from the database, but the db doesn't have a record corresponding to the IoT Box, the IoT Box receives an empty string, making it hard to debug why it couldn't download handlers. We now raise an unauthorized error to make it clearer. Forward-Port-Of: odoo/enterprise#93813
Accounting screens now make invalid bank statements easier to spot and manage, with dashboard alerts, reconciliation warnings, and clearer statement form messages. The update also protects valid statement transactions from deletion and improves balance accuracy by excluding empty or locked statements where appropriate.
Original PR description
* accountant|bank_statement_import|reports This commit brings more clarity on invalid statements. The reflected changes are : - Hiding Last Statement if its date is <= Lock Date - "Invalid Statement(s)" alert on the journal dashboard - Red balance amount and warning in the BankRecW when it contains invalid statements (clicking on the warning applies the filter) - Possibility to choose a statement when creating a transaction - Invalid statement warning in the statement creation form - Displays all warnings in the statement form view - When a file generate a statement, it is kept in its attachments - Prevent deletion of transactions if they belong to a valid statement - Empty statement are not taken into account for the dashboard Last Statement and the BankRecW balance task-4413473
Resolved issues and error corrections
Users who add an XML encoding declaration to a view will now receive a clear, user-friendly error instead of a technical failure. This helps administrators understand and correct the issue when editing views in developer mode.
Original PR description
Currently, an error occurs when a user includes an XML encoding declaration in the view architecture. **Steps to reproduce:** - Enable **developer mode**. - Under `Settings > Technical > User Interface > Views` Create or edit any view. - Enter the `view name` and select `view type`. - In the Architecture field, declare encoding as: `<?xml version='1.0' encoding='utf-8'?>`. - Attempt to save the view. **Error:** `ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.` **Root Cause:** The [1] call raises a ValueError when the XML declaration includes an encoding attribute. This low-level error is not handled and results in an ungraceful failure. [1]- https://github.com/odoo/odoo/blob/bf4ccb21f6c9c8bcda9c6f94d844c89296523954/odoo/tools/translate.py#L281 This commit ensures raising an UserError, improving the error message clarity. sentry-6505918596 Forward-Port-Of: odoo/odoo#205324
Orders paid entirely with a gift card now run the same stock availability checks as other payment methods. This prevents customers from completing checkout when an item in their cart has become unavailable, reducing overselling and fulfillment issues.
Original PR description
In this bug, when a order is out of stock, it can be validated if gift card is used as the sole method of payment. This happens when a product gets out of stock while it is on customer's cart. The…
In this bug, when a order is out of stock, it can be validated if gift card is used as the sole method of payment. This happens when a product gets out of stock while it is on customer's cart. The other payment methods fail successfully but if gift card is used, the order can be validated. To reproduce: 1- Create a product and add quantity on stock. 2- Uncheck `Conitnue Selling` in `Out-of-Stock` 3- Publish the product on the website 4- Create a gift card 5- Add the product to the cart using portal user 7- Using admin user, set the quantity to less than ordered quantity 8- Using portal user, proceed to payment, and use the gift card. Then checkout. 9- As you see, the order is validated The issue is because `_check_cart_is_ready_to_be_paid()` which is supposed to check the stock, is only called inside `shop_payment_transaction()`. However, when checking out with gift card, this method is not called. To solve the issue, we can call `_check_cart_is_ready_to_be_paid()` also inside payment validate flow. However this only be called when a gift card is used solely. (The case `order.amount_total` is 0) opw-4941658 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222306
Public visitors could see a forbidden error on product pages when certain configured extra product fields were not accessible to them. This update ensures those extra fields are loaded safely so product pages remain available to shoppers.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable debug mode; 2. go to Website / Configuration / Websites; 3. open first website; 4. open Product Page Extra Fields tab; 5. add Icon (Product); 6. go to a product page as Public User. Issue ----- > **403: Forbidden** > [!Note] > For this issue to occur, the extra field cannot be loaded into cache yet, making it difficult to reproduce in versions before 18.3. As of 18.3, access rights are checked regardless of cache status. Cause ----- It's possible to add extra fields that don't allow access to public users by default. Solution -------- In the `ecom_show_extra_fields` template, retrieve the field values in `sudo` mode. opw-5031708 Forward-Port-Of: odoo/odoo#225352
Fixes an issue where unbuilding a manufactured non-storable product could create duplicate product movement records. This keeps manufacturing and inventory records accurate when reversing production, including related by-products.
Original PR description
When creating a unbuild order for non storable product, it will generate two stock.move.line going form Stock>Production. ** Steps to reproduce ** - Create an untracked product (is_storable = False).…
When creating a unbuild order for non storable product, it will generate two stock.move.line going form Stock>Production. ** Steps to reproduce ** - Create an untracked product (is_storable = False). - Create a BOM (the components don't matter). - Create a manufacturing order & produce it for the untracked product. - Unbuild the manufacturing order. - Manufacturing Order> Unbuilds>(Select the Unbuild (UB/...))>Product Moves - Two move lines are created from stock to production for the untracked product when only one should have been created. ** Cause of the issue ** Clicking on unbuild, will launch a call of the action_unbuild method. During this call, the moves of the unbuild for the final product of the MO are created and confirmed here: https://github.com/odoo/odoo/blob/7dd7351d492babdfb7c671960c5e90755fbc2233/addons/mrp/models/mrp_unbuild.py#L181-L182 https://github.com/odoo/odoo/blob/7dd7351d492babdfb7c671960c5e90755fbc2233/addons/mrp/models/mrp_unbuild.py#L187-L188 During this confirmation process and since the product is not storable, (hence move should by pass reservation) therse moves will be assigned and the related move line created: https://github.com/odoo/odoo/blob/e4d9ef3f39bd62a8db6854270b4cf6a35936b8d4/addons/stock/models/stock_move.py#L1759-L1762 https://github.com/odoo/odoo/blob/7dd7351d492babdfb7c671960c5e90755fbc2233/addons/stock/models/stock_move.py#L1581-L1583 However, in the rest of the action_unbuild call, since we don't expect the move to be assigned by the action_confirm we create and associate manually a second move line to our unbuild move: https://github.com/odoo/odoo/blob/de2216ae52cee40d0851b4b8c0b71cb7e1d5ec89/addons/mrp/models/mrp_unbuild.py#L196-L198 ** Observation ** During this commit https://github.com/odoo/odoo/commit/7dda6bb92715ea25b2818a62fec5e646f3678b81#diff-31912cb536cbf184f8f475ccdfb5e42c30796a3f0430eea35751519434a67ba8L156 An "if condition" was removed that allowed untracked product to skip the manual assignation, since they already been assigned during consume_move._action_confirm(). This fix reintroduce the condition, for all move with their quantity updated. Which resolve the issue for non stored product since their quantity is updated during _action_confirmation>_action_assign Additional issue: The same happen with by-products if they are non storable, the first move line is also created during the first confirmation, but the manual creation of the second move line and the commit that erased the "if condition" are different since by-product are not in finished_moves: https://github.com/odoo/odoo/commit/79d9dd7f15371aa7293a4af0b0ebd193aa80e2be#diff-31912cb536cbf184f8f475ccdfb5e42c30796a3f0430eea35751519434a67ba8L202 opw-4830965 X-original-commit: https://github.com/odoo-dev/odoo/commit/b2cadeaa52a6209d2f95e6b9c0043a36477bf31e
This update lets users with invoicing permissions adjust perception and withholding settings on partner records in the Argentine localization. It helps invoice creators apply the correct tax treatment without needing full Accounting administrator access.
Original PR description
Description of the issue/feature this PR addresses: This pull request adds `l10n_ar.partner.tax_billing` on the `l10n_ar_partner_tax` model, granting read, write, and create permissions (but not…
Description of the issue/feature this PR addresses: This pull request adds `l10n_ar.partner.tax_billing` on the `l10n_ar_partner_tax` model, granting read, write, and create permissions (but not unlink) to users in the `account.group_account_invoice` group. Current behavior before PR: Only users with administrator access rights on the Accounting module could modify the "Perceptions / Withholdings" Section on the "Accounting" tab of the partners. <img width="1236" height="673" alt="image" src="https://github.com/user-attachments/assets/92b42973-2b01-4019-8e23-5e3cbf5111a4" /> Desired behavior after PR is merged: Users with invoicing rights can modify the Accounting module could modify the "Perceptions / Withholdings" Section on the "Accounting" tab of the partners. This is needed to properly create the invoices with the perceptions / withholding that apply, for example in cases where by default all partners are set with perceptions, but some depending on their activity are not taxed. In that case, the user that created the partner needs to be able to modify the field by putting a 0% aliquot or deleting the perception line on the contact. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Live chat routing now ignores ended or inactive conversations when deciding which agent is least busy. This helps new chats reach agents who are genuinely available, improving response distribution and customer handling.
Original PR description
Live chat agents are assigned based on their expertise, language, country, and other criteria. When several agents match these criteria, the system chooses the least active one. There was an issue with the SQL query that retrieves agent occupation: an agent was still considered buisy if a message was received within the last 30 minutes, even if the live chat was ended. This commit fixes the issue: the query now excludes ended live chats as well as live chats without any activity for at least 30 minutes. task-5065567 Forward-Port-Of: odoo/odoo#225514
This fixes an issue where editing an employee attendance could reset approved extra hours to zero even when the user had not manually changed them. Extra hours are now recalculated correctly, helping payroll and time tracking stay accurate after check-in or check-out adjustments.
Original PR description
**Steps to reproduce** - Automatically approved attendances. - Create an attendance and save it. - Note the "Extra hours" displayed. - From the form view, change the check in or check out and save…
**Steps to reproduce** - Automatically approved attendances. - Create an attendance and save it. - Note the "Extra hours" displayed. - From the form view, change the check in or check out and save it. - Issue: "Extra hours" are 0. Expected: they should be the same as "Worked extra hours", as the user has not manually modified the field. **Cause** Issue since cc81bb59f87540cf4dd8da65510417d8023ef65b The problem is that a 0 value for `overtime_hours` was computed for the `NewId` record used during edition in the interface. This meant `validated_overtime_hours` was also set to this value https://github.com/odoo/odoo/blob/cc81bb59f87540cf4dd8da65510417d8023ef65b/addons/hr_attendance/models/hr_attendance.py#L171 and sent on save, which meant the value was not further recomputed in `_update_overtime`. https://github.com/odoo/odoo/blob/cc81bb59f87540cf4dd8da65510417d8023ef65b/addons/hr_attendance/models/hr_attendance.py#L408 **Change** We avoid a recomputation of `validated_overtime_hours` in the interface (which wasn't useful anyway, it was set to 0) to avoid it being interpreted as a manual change by the user. opw-5003488
Event registration now hides the sign-in button when no seats are available, preventing users from reaching an error. For free registrations, the button text now correctly says “Confirm Registration,” reducing confusion for public users.
Original PR description
This commit fixes two bugs related to the "Sign in" in button of the registration form. First bug: ------------ If there is more ordered seats than available seats, an error modal is displayed with a…
This commit fixes two bugs related to the "Sign in" in button of the registration form. First bug: ------------ If there is more ordered seats than available seats, an error modal is displayed with a "Sign In" button. This button shouldn't be present. On click, a 500 error is triggered. Now, the button does not appeared on this modal. Reproduce: Check "Mandatory" for "Sign in/up at checkout" in the settings. In the event form, add a limit of 1 available seat and add two tickets with each one 1 seat. With a public user, on the website page of the event, click on "Register" to open the registration modal. In the tickets form, select the maximum number of registrations for each tickets. The error modal with the "Sign In" button should appear. Clicking on this button trigger the 500 error. Second bug: ---------------- The "Sign in" button is displayed even if the tickets have no price. So the label of the button is wrong because public users are not redirected to the checkout. Now, the "Confirm Registration" button is displayed in this case. Reproduce: With the same settings as for the first bug, create an event without tickets. Order a registration with an public user. Click on the "Sign In" button of the attendee details form. The confirmation page appears instead of the sign in page. task-4797022
This fix stops Odoo from adding a log note when a Saudi e-invoicing error occurs before any request is sent to ZATCA. It keeps invoice communication records cleaner by only logging actual ZATCA responses.
Original PR description
In a previous commit e90c35cde2a1f5de5d7bc4db7a525638ca3fab6e, we modified the logic of posting a log note when receiving a response from ZATCA to always log a note of the response. An issue occured because sometimes, Odoo raises user errors before sending a request to ZATCA, In which case, we do not need to log a note. Task-id: 5056724 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226036
Reloading a page in shared customer-related views now keeps users in the correct app menu instead of switching to another module such as Invoicing. This reduces confusion for users working across Sales, Accounting, and Purchase areas that share the same underlying actions.
Original PR description
* STEP TO REPRODUCE: install sale management module, go to sale app -> customer menu -> Then reloading the page using F5 -> the menu is change to invoice which is not correct * Also Multiple modules (Sale, Account, Purchase) share same actions (e.g. partner action) * SOLUTION: Modified webclient.js action-to-menu mapping to handle multiple menus sharing same action Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change rolls back earlier accounting adjustments for unbuilding manufactured products because they introduced new valuation inconsistencies and errors. The team is returning to the previous behavior while a cleaner solution is designed, reducing the risk of new accounting problems in manufacturing and purchasing flows.
Original PR description
This commit reverts [1], [2], [3], and [4]. (It actually results in minimal changes since those commits were already removing parts of each other.) Issue before those commits: 1. Setup a auto-fifo…
This commit reverts [1], [2], [3], and [4]. (It actually results in minimal changes since those commits were already removing parts of each other.) Issue before those commits: 1. Setup a auto-fifo category and two storable products (a component and a finished product) 2. Receive one compo at 10, then one at 25 3. Produce two MO with one finished product 4. Unbuild the second one Error: - For the component, we just use the value of the consumed components: IN 1 @ 25 - For the finished product, we process it as a classic out. Reminder, we are in FIFO: OUT 1 @ 10 As a result, thanks to the unbuild, we have created - A over-valuation of the stock (+15) - An outstanding balance of the "Cost of Production" This is why [1] has been merged. However, it brought some other issues, cf [2], [3] and [4]. Unfortunately, it still has some issues - After the above use case, the difference between the debit and the credit of the stock valuation account is no longer the sum of the remaining values of the layers - Adding some landed costs on MOs will lead to a traceback when undbuilding - The over-valuation of the stock (that was already present before [1], cf above) is still present Following some discussions with R&D and the product owners, we have decided to start over from scratch, which means: - Revert all commits - Try another approach (if so, the new PR will be linked to the PR related with this commit) [2], [3], and [4] are partially reverted: the tests can remain, as they were only failing due to a sequence of changes. [1] https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3 [2] https://github.com/odoo/odoo/commit/49565cdd9007ac66a3b835dc073777e2e6c48f2c [3] https://github.com/odoo/odoo/commit/3a69456a291da593748475c86e7efc6234019e47 [4] https://github.com/odoo/odoo/commit/fb30cde9a320c245cf1321c9dc2ea2e67a53d0a0 OPW-5036574 Forward-Port-Of: odoo/odoo#225728
The Point of Sale interface now shortens very long product names in mobile views. This keeps product cards and related popups readable and prevents the layout from breaking during sales operations.
Original PR description
Steps: === - Give product name very long without image. - Open pos in mobile view. Issue: === - We have weird result  Fix: === - Truncated long product names for better readability.  Task: 4513829
The Uruguay localization app now points users directly to the Uruguay-specific documentation instead of a general fiscal localization page. This makes it easier for users to find the right guidance when configuring or learning about Uruguay localization features.
Original PR description
Description of the issue/feature this PR addresses: The website link in the `l10n_uy` manifest was pointing to a generic documentation page. Current behavior before PR: Link in manifest points to `https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations.html` Desired behavior after PR is merged: Link in manifest points to `https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/uruguay.html` Forward-Port-Of: odoo/odoo#225460
Archived Quality Points are now correctly excluded from the product smart button count and list. This prevents users from seeing outdated quality controls and keeps product quality information accurate.
Original PR description
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all…
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all products*. 3. Open any product form. * Verify that the *Quality Points* smart button shows the created point and the correct count. 4. Archive the Quality Point. 5. Reopen the same product form and check the *Quality Points* smart button again. **Observed behavior:** - The archived Quality Point is still counted and shown in the smart button. **Root cause:** - During the refactor from raw SQL (`get_sql` + `cr.execute`) to the ORM query builder (`query.add_where(SQL(...))`), one outer bracket was dropped. [ref](https://github.com/odoo/enterprise/pull/66290/commits/a6362bc07eac7640f68d145a0f6a14a81f499913#diff-2ffdc2ffc25417076b580b772447514c7e9d8b3e2d2fff2d3100721eb5ccbaf4L542-R561) - This changed the operator precedence, causing the `active = true` condition to no longer properly apply when combined with the OR block. - As a result, archived Quality Points bypass the filter and are still counted. **Solution:** - Fix the missing bracket in the `query.add_where` SQL expression so that the `active` condition is always enforced before evaluating the OR block. opw-5046289
This fix prevents Chilean electronic factoring document submissions from crashing when the tax authority returns invalid or unexpected responses. It also refreshes authentication tokens in these cases and adds test coverage, making the process more reliable for users.
Original PR description
There were some typos in this method. We add test coverage and we reset the token in situations where we receive invalid responses. It's apparently common for the SII to have some random errors that could result in invalid tokens being generated. Based on the work in https://github.com/odoo/enterprise/pull/92035.
This fix prevents errors when users configure cohort views in Odoo Studio by ensuring the Measures dropdown only shows valid measurable fields. It also removes an unnecessary request parameter that caused warning messages when creating new views, improving reliability and reducing noise for administrators.
Original PR description
Currently, an error occurs when user tries to select any measure in cohort view. Steps to replicate: - Install `sale_management` and `web_studio`. - Open the Sales app and turn on studio mode. -…
Currently, an error occurs when user tries to select any measure in cohort view. Steps to replicate: - Install `sale_management` and `web_studio`. - Open the Sales app and turn on studio mode. - Under the Views tab, turn on cohort view. - Under the Measures field, select any value and observe the error appearing in the terminal. Error: `ValueError: Invalid aggregate method 'None' for 'create_date:None'` Cause: - The Measure field dropdown in the Cohort Editor was mistakenly assigned the choices of `dateFields` [1] instead of `measureFields`. - This allowed users to select incompatible field types (e.g., date/datetime), which lead to error in aggregation behavior in the cohort view. Solution: - Corrected the choices of Measure field to `measureFields`. - Also added a condition to allow only those fields that have an aggregator (for some fields like `sequence` that dont have an aggregator). - Also removed context field from arguments [2] in the rpc call as function doesnt need it [3] (This shows warning on runbot as well). [1]: https://github.com/odoo/enterprise/blob/d8539dff5f3dcecfeb99fd7fc22a6915aaa02c4b/web_studio/static/src/client_action/view_editor/editors/cohort/cohort_editor_sidebar.xml#L30 [2]: https://github.com/odoo/enterprise/blob/bf9510e152279418200cb0becb6b637c19b02d4e/web_studio/static/src/client_action/editor/new_view_dialogs/new_view_dialog.js#L87 [3]: https://github.com/odoo/enterprise/blob/bf9510e152279418200cb0becb6b637c19b02d4e/web_studio/controllers/main.py#L805 sentry-6781792463 Forward-Port-Of: odoo/enterprise#91599
The Documents app now consistently shows the Activities button in the chatter for every document, including files linked to other document-related modules such as Sign. This restores access to activity tracking and follow-up actions that were previously hidden for some documents.
Original PR description
Step to Reproduce: - Install `Documents_sign` module - open Documents - click on 'info & tags` button on the top right corner to show chatter - Open 'Odoo CLA.pdf' document Observation: - The Activities button is not shown in Chatter. Issue: - after this https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e, the activities button shows only for those documents which are related to `documents.documents` model or a document has no model, but it should be shown for all documents https://github.com/odoo/enterprise/blob/23fb26ae0f91a5bdb74d0d4fce48b31fa7abef86/documents/static/src/views/kanban/documents_kanban_renderer.xml#L21-L26 Solution: - Remove condition for Kanban and list view to show `activities` button in Chatter opw-5013427
This fixes an error in the Belgian CodaBox integration that could occur when handling company records. The change helps ensure the correct company is used during processing, reducing unexpected failures for affected users.
Original PR description
We incorrectly used the recordset `self` instead of the record `company` This commit fixes this opw-5036698
The Send & Print wizard no longer fails when downloading invoice attachments that include Uruguay electronic invoice files. Users can complete invoice downloads normally, while the separate CFE file remains available from its own document view.
Original PR description
When downloading attachment via the send & print wizard, we get an error from the server. This is because we raise an assertion error if any attachment is not from 'account.move' model. But the CFE file is from 'l10n_uy_edi.document' model. With this commit, we extend the `_action_download` method to filter the CFE file from the attachments. It is not blocking for client as he can still download it from the form view of the CFE document. Steps: - Create an invoice - Set a 0% tax on the invoice line - In 'Other infos' tab, fill the 'Incoterm', 'Sales Modality' and 'Transportation Rules' fields - Confirm - Open S&P wizard, select 'Create CFE' and confirm - Reopen S&P wizard, select 'Download' and confirm (can be done along the previous step too) -> Error opw-5043902
This fix prevents quality checks and engineering change suggestions from being created for extra work orders that are not part of the original bill of materials. This avoids a traceback when manufacturing orders are duplicated and helps keep shop floor improvement suggestions limited to supported work order operations.
Original PR description
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the…
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the method `add_check_in_chain()`, the `point.sequence` cause issue because the check can have multiple points https://github.com/odoo/enterprise/blob/e85d11f9b3bf07a55e5365adac7370955a149566/mrp_workorder_plm/models/mrp_workorder.py#L58-L66 That the case because multiple quality checks sequences are created when the operation_id is False That's unexpected because PLM isn't made to suggest WorkOrder additions and Suggestions to New WO, but only Suggestions to existing operations So we avoid to create `quality.point` when there is no operation_id ## Information: To get the Traceback, you need to install Quality_control because this module will copy the QC to the MO including the one with operation_id set to False ## Steps to reproduce: Quality_control and plm need to be installed - Enable Work Orders in Settings - Create a Product with a BoM - Create a MO for the Product - Add an extra WO - In the Shop Floor, Mark as Done the BoM's WO - On the Extra WO, click Gear Icon > Update Instructions > Improvement Suggestion > Add a Step - Insert a Title and Propose Change - Duplicate the MO and redo the Shop Floor steps to get the Traceback opw-4874108
Fixes Danish minimal financial reports so formulas no longer include an extra sign that could cause incorrect report values. Report labels and Danish translations were also cleaned up for clearer, more consistent presentation.
Original PR description
In the minimal reports of l10n_dk, it appears that some expression ended with a sign and the report engine was given wrong value. This commit will remove the extra sign to correct the report and also remove the letter or number before the name. This commit will remove the extra sign to correct the report and also remove the letter or number before the name. This commit will change the translation accordingly to the other commits task-4949062
Opening an activity from the Activities menu now shows only the Knowledge articles linked to that activity instead of the full article list. This makes it faster for users to find and act on their assigned Knowledge tasks.
Original PR description
Currently, when the user tries to open any activity of the knowledge article, it opens all articles instead of the one which has an activity assigned to them. **Steps to reproduce this issue:** 1) Install the Knowledge module 2) Set up an activity for yourself on a Knowledge article 3) Open the activities from Activities (top left corner) **Issue:** You will end up in the all articles list, with no filters applied. **Cause:** When the user clicks on the activities, a default search filter is added in the context, which is then applied on the view. But in the knowledge article, we don't have any search filters for the activities. Therefore, it renders all knowledge article records. **Solution:** Add search filters for the knowledge articles. opw-4997201
This update corrects how DHL and USPS shipping integrations retrieve package details from sales orders. It helps ensure shipping information is accurate when preparing carrier-related order data, reducing errors in delivery workflows.
Original PR description
This commit fixes the same issue in #89771, but for sale orders instead of pickings. opw-4979982 Forward-Port-Of: odoo/enterprise#94186
The Peru electronic invoicing module now installs more reliably on large databases by avoiding memory-heavy data processing during setup. It also prevents an installation error when certain tax groups are missing, reducing failed installs and support interruptions.
Original PR description
### [PERF] l10n_pe_edi: Avoid OOM during installation ### Description: Installing `l10n_pe_edi` on large databases with many moves and move lines could cause out-of-memory (OOM) errors. This happens…
### [PERF] l10n_pe_edi: Avoid OOM during installation ### Description: Installing `l10n_pe_edi` on large databases with many moves and move lines could cause out-of-memory (OOM) errors. This happens because several stored fields need to be computed at installation. ### Fix: This fix adds the columns via SQL, preventing Odoo from computing and populating the field for all existing records. This reduces memory usage and avoids installation failures. ____ ### [FIX] l10n_pe_edi: Fix error during post-init hook ### Description: During installation, the `l10n_pe_edi` module's post-init hook attempts to update tax groups, setting the new `l10n_pe_edi_code` field. This can cause an error if a tax group doesn't exist and needs to be created, because the name field is missing in the list of values given to the `_load_records` function. ### Fix: This fix filters the tax groups to only update existing ones. This prevents `_load_records` from trying to create new groups, which avoids the installation error. ___ ### Reference: opw-4982181
Fixes an error that could stop automated processing of recurring subscription payments when a saved payment method was used. This helps ensure subscription invoices and related payment follow-up jobs run reliably without manual intervention.
Original PR description
When a payment token is set on a subscription, running the Post-process transactions cron for recurring invoices will trigger a traceback. Steps to reproduce the error: - Install…
When a payment token is set on a subscription, running the Post-process transactions cron for recurring invoices will trigger a traceback. Steps to reproduce the error: - Install ``sale_subscription`` and ``l10n_mx`` modules - Set up Mexican company and switch to it. - Set Demo payment provider for Mexican Company - Create a user A > set the address on the partner of that user A> set payment token in payment methods via portal > - Create a new subscription > Add any Subscription product > Set Recurring Plan In Other Info Tab, Set Payment Token > Confirm - Set the Next invoice date to Today > Set delivered quantity of product - Run the cron ``Sale Subscription: generate recurring invoices and payments`` - Run the cron ``Payment: Post-process transactions`` Traceback: ``AttributeError: 'bool' object has no attribute 'get'`` https://github.com/odoo/enterprise/blob/fff9ad7999d4ff13adf899b2517e750a36c1261a/sale_subscription/models/sale_order.py#L1267-L1269 In the [commit](https://github.com/odoo/enterprise/commit/7c5fd63729c16fb6b9b69ae1e7fa4d9cda2f4733), ``_generate_and_send_invoices`` method is called with ``from_cron=automatic``, where ``automatic`` is set to ``True`` because the transaction is created during the subscription invoicing cron, However, ``from_cron`` should only be used when ``sending_data`` is set on the move, and the ``sending_data`` is only assigned by the ``account.move.send.batch.wizard``. https://github.com/odoo/odoo/blob/0b34d9dc072c73ed208e287140c97f72dc487b15/addons/account/models/account_move_send.py#L57-L58 Here, ``sending_data`` will be False. So, it will lead to the above traceback. sentry-6849994436
Code cleanup and technical improvements
This update modernizes the mass mailing email design experience by moving it to the newer website-style editor, refreshing templates, and improving how layouts behave across screen sizes. It also cleans up messaging internals and adds limited support for sending notification emails to addresses that are not linked to contacts, helping support cases such as out-of-office replies without creating extra records.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr