Daily updates from Odoo
Saturday, June 13, 2026
36 changes · master
Enhancements to existing features
This update streamlines the process of creating dashboards from spreadsheets by removing an unnecessary intermediary step. The direct use of the spreadsheet JSON within the dashboard creation flow reduces complexity and improves efficiency. This change enhances the overall performance and stability of the dashboard feature.
Original PR description
Remove the save_spreadsheet_snapshot indirection when creating a dashboard from a spreadsheet document. The current spreadsheet JSON is now passed through the wizard context and used directly to create the dashboard. This reduces the public surface of the flow and avoids an extra method used only for this action. Task: 6217816
This update ensures Odoo complies with Serbian accounting regulations by automatically fetching the official mid-market exchange rate from the National Bank of Serbia. This improves the accuracy of financial reporting and transactions for Serbian users, aligning with legal requirements.
Original PR description
[IMP] currency_rate_live: Fetch exchange rates National Bank Serbia To ensure compliance with the Serbian Law on accounting, fetch official middle exchange rate from the National Bank of Serbia task-6159555 Forward-Port-Of: odoo/enterprise#116935
Resolved issues and error corrections
This update fixes a warning related to how Odoo generates PDFs using the PyPDF library. The change ensures that PDF pages are handled correctly, preventing potential errors and improving the stability of our PDF generation process. This resolves a technical issue that could have impacted PDF output quality.
Original PR description
In recent versions of PyPDF, modifying a `PageObject` directly from a `PdfFileReader` instance triggers a `PageObject.replace_contents` deprecation warning. As identified in the pypdf library's…
In recent versions of PyPDF, modifying a `PageObject` directly from a `PdfFileReader` instance triggers a `PageObject.replace_contents` deprecation warning. As identified in the pypdf library's architecture updates (specifically PR #3638 [^1] and PR #3669 [^2]), a reader's page is intended to be read-only. Mutating it directly (e.g., using `mergePage` or `compressContentStreams`) before attaching it to a writer can break internal object references and cause `NullObject` errors. This commit resolves the warning by inverting the order of operations to ensure we only mutate writable objects. The fix implements the following flow: 1. Add the unmodified source page directly to the `PdfFileWriter`. 2. Retrieve the newly created, writable output page. 3. Apply `mergePage` and `compressContentStreams` exclusively to the writer's copy of the page. [^1]: https://github.com/py-pdf/pypdf/pull/3638 [^2]: https://github.com/py-pdf/pypdf/pull/3669 Forward-Port-Of: odoo/enterprise#119694 Forward-Port-Of: odoo/enterprise#119239
This update prevents the generation of empty ICS calendar files when attempting to add open shifts to a calendar. Previously, the system would create an empty file when a matching time slot wasn't found. Now, the ‘Add to Calendar’ button is hidden and the ICS file is only generated when a valid time slot is linked to an employee.
Original PR description
**Step:** - install planning - create a resource - create an open shift for a future date - in Gantt view: - publish shift and select the created resource - click “Publish & Send” - check the email and click “Add to Calendar” **Issue:** Currently, clicking “Add to Calendar” generates an empty ics file. **Reason:** During ics file generation, the planning token to find a slot using the planning date and employee. but, no matching slot is found, so the process returns an empty slot, resulting in an empty ics file. **Fix:** Generate the `planning_url_ics` only when a slot is linked with an employee. Otherwise, hide the “Add to Calendar” button and do not generate the ics file. Forward-Port-Of: odoo/enterprise#119945 Forward-Port-Of: odoo/enterprise#118978
This update fixes an issue with how the Stripe cardholder address is formatted, aligning with Stripe's requirements for ISO 3166-2 state codes. Previously, the system incorrectly handled state information, which caused failures when Stripe started validating US addresses. This ensures compatibility with Stripe's systems and avoids potential issues.
Original PR description
Stripe says that address.state is "State, county, province, or region (ISO 3166-2)". There didn't seems to be any issues since it seems that it's not checked for the EU. However, this is still wrong and could raise an issue if Stripe decide to start checking them. Also, with the US coming soon, it's being checked and failed. Forward-Port-Of: odoo/enterprise#120096 Forward-Port-Of: odoo/enterprise#114480
A bug causing a traceback when clicking calendar slots within Knowledge articles has been resolved. The issue stemmed from an incorrect reference to a component variable, which has now been corrected. This ensures that calendar slots function correctly and prevents errors for users.
Original PR description
How to reproduce: 1. Create a new Knowledge article 2. Insert an "item calendar" embedded view by typing /calendar 3. Click anywhere to create an article item 4. Go back to the parent article 5. Click on the calendar slot -----> Traceback ### Technical The [commit] adds the `this.` to migrate templates to access values from the component correctly in the owl3. It mistakenly added `this.` too when accessing the `slot` in the template `knowledge.ArticleItemsCalendarCommonPopover.body`. But the `slot` isn't a variable associated with the component. It's associated with the owl3, which must be accessed directly. Therefore, we revert the change from [commit] inside Knowledge's item_calendar. [commit]: https://github.com/odoo/enterprise/commit/e43f89a0bb8e85521bbf062ab70e7a7b4bda2eb8 Task-6279097 Forward-Port-Of: odoo/enterprise#120058
This update resolves a problem where multi-country tax grids on the journal report were not functioning correctly, specifically when more than two countries were selected. The fix ensures that country names are displayed accurately in the header, and that all countries are visible within the tax grid. This improves the accuracy of financial reporting across multiple regions.
Original PR description
When more than 2 country are used in the taxes, the colspan of the header is wrong. When more than 2 country are used in tax grids, the country isn't displayed anymore. Forward-Port-Of: odoo/enterprise#120140 Forward-Port-Of: odoo/enterprise#119348
This update resolves a technical issue that was preventing the system from correctly handling failed meta requests within the social module. The fix ensures that the system gracefully manages errors by returning a list of 'None' values when requests fail, preventing a critical type error. This improves the stability and reliability of social features.
Original PR description
Error: ``` TypeError: unsupported operand type(s) for *: 'NoneType' and 'int' ``` Cause: - `None * len(queries_batch)` is invalid because `None` cannot be repeated with`*`. Solution: - The result should contain one None for each request in the failed batch. sentry-7541540366 Forward-Port-Of: odoo/enterprise#120044
This update corrects a reporting issue where tax reports for Moroccan businesses incorrectly included zero-balance entries. The fix filters out these unnecessary lines, ensuring that tax reports accurately reflect financial data. This improves the reliability and clarity of tax reporting for our Moroccan clients.
Original PR description
When generating the tax report for a Moroccan company, entries with a zero balance were appearing in the report. Steps to reproduce: ------------------- * Create a Moroccan company * Create a bill with a tax to pay * Change the bill date and accounting date to a past date * Make a first payment of the bill, with a date to today * Unreconcile the payment, and make a second payment with a date in the past (the same one as the bill date for example) * Now generate the tax report for the period of today > Observation: The report contains useless entries with a zero balance. Why the fix: ------------ We add `HAVING SUM(account_move_line.balance) != 0` to filter out the line that have a zero balance. opw-5911669 Forward-Port-Of: odoo/enterprise#113956
This update aligns Odoo's GSTR-3B and GSTR-2B reports with new Indian tax regulations regarding purchase composition supplies. The changes ensure accurate reporting of these transactions, streamlining tax compliance for our users.
Original PR description
As a new GSTR section for purchase composition supplies has been introduced, the related report domains also need to be updated accordingly. With this commit: GSTR-3B domains are updated to properly include purchase_composition_supplies transactions in the relevant report section. GSTR-2B now includes a separate line for composition supplies, aligned with the government utility format. task-6239870 Forward-Port-Of: odoo/enterprise#120117 Forward-Port-Of: odoo/enterprise#118312
This update clarifies the status shown when a user signs a document on behalf of another. Previously, it always displayed the sender's name and date. Now, it correctly shows 'via [user]' only when signing for someone else, maintaining consistency for self-signed documents.
Original PR description
Before this commit, the signer status always displayed "On <date> via <sender>". Now the message only mentions "via <user>" when the document was actually signed by a different user (for example, when an admin is logged in and signs through a signer's link). When the signer uses their own link, only the date is shown. task-6216243 Forward-Port-Of: odoo/enterprise#117460
This update resolves an issue where PDF links within the Odoo viewer were not functioning correctly. The fix adjusts the layering of elements to ensure clicks are properly directed to the PDF links, improving the user experience when working with documents containing internal and external links. This ensures all links within the PDF viewer are accessible.
Original PR description
Version - 18.0 Steps to reproduce: 1. Upload a PDF document containing bookmarks and internal/external links 2. Open the document 3. Click on the links, some work and some do not Issue: `canvas_layer_0` is positioned over the PDF viewer with `z-index: 1`, intercepting clicks intended for PDF link annotations and making internal/external links unresponsive. The `.textLayer` already has `z-index: 2 !important` in iframe.css to prevent the same problem for text selection Fix: Added `z-index: 2 !important` to `.annotationLayer section` in `iframe.css` raising it above `canvas_layer_0`. Taskid = 6237688 Forward-Port-Of: odoo/enterprise#118040
This update fixes an issue where automation rules using dotted field paths for user assignment in activity creation didn't correctly populate the activity description. The change utilizes a mapping approach, mirroring a recent fix in the mail module, to reliably handle relational field chains and ensure accurate user assignment.
Original PR description
Steps to reproduce: ------------------------------------ 1. Install `ai` and `contacts` modules 2. Create an automation rule on Contact model: * Trigger: On Creation * Action To Do: Execute AI Action…
Steps to reproduce:
------------------------------------
1. Install `ai` and `contacts` modules
2. Create an automation rule on Contact model:
* Trigger: On Creation
* Action To Do: Execute AI Action
* Add a server action tool with 'Create Next Activity' action
* Set Activity User Type to Dynamic
* Set User Field to a dotted path (e.g., user_ids or partner_id.user_id)
3. Create a contact with a linked user
Observation:
------------------------------------
The activity description in the toast message fails to retrieve the user when using dotted field paths
Issue:
------------------------------------
The direct field access `record[self.activity_user_field_name]` in `_ai_get_action_description` method doesn't support dotted paths like 'partner_id.user_id'. This causes the same issue as in the mail module where relational field chains cannot be traversed
Solution:
------------------------------------
Use `record.mapped()` to support dotted paths by traversing the relational chain, consistent with the fix applied to the mail module
opw-6191715
Related Community PR: https://github.com/odoo/odoo/pull/263530
Forward-Port-Of: odoo/enterprise#119179
Forward-Port-Of: odoo/enterprise#118921This update fixes an issue where currency rates from the Bank of Mexico were incorrectly displayed. The change shifts the rate date by one day to align with the Bank of Mexico's data retrieval process, ensuring accurate currency conversions within the Odoo Enterprise system. This ensures financial reporting and transactions are based on the most current exchange rates.
Original PR description
banxico fetches the rates applied on the previous day, when we introduced using previous day's currency rate (here: https://github.com/odoo/odoo/pull/231948), we broke their logic. shift the rates date by one day to account for the change. task-6264708 Forward-Port-Of: odoo/enterprise#118999
This update resolves a tour test failure caused by a dependency on a specific module. The fix ensures the tour correctly identifies when a page has loaded, even in installations without the necessary component, and addresses a bug where progress bars weren't displaying for employees without email addresses.
Original PR description
The tour relied on the chatter loading to know when the page was done loading. Unfortunately, the chatter on that model is only added if planning_field_service is installed, so the test fails in single module installs. The "See employee progress bar" then failed because some employees do not have an email adress but we do not close the employee_no_email_list_wizard modal before checking the progress bars. We now click on action_send before the failing step. runbot-938958 Forward-Port-Of: odoo/enterprise#118492
This update fixes an issue where the shop floor displayed component quantities with excessive decimal places, leading to inaccurate readings. The fix addresses a floating-point calculation error that resulted in a slight rounding discrepancy. This ensures more precise and reliable component tracking on the shop floor.
Original PR description
**Issue** In the shop floor, floating-point values may display excessive decimals. **Steps to reproduce** - Create a BoM for a product, with a component tracked by lots - Set the component to be…
**Issue** In the shop floor, floating-point values may display excessive decimals. **Steps to reproduce** - Create a BoM for a product, with a component tracked by lots - Set the component to be consumed in a work order operation - Create several lots for the component, per ex 2: - LOT01 with 16.528 units - LOT02 with 10,000.00 units - Create an MO for 220.800 units of the finished product - Click on the shopfloor icon - Click to register the component consumption for the component. - Choose the first lot - Then choose the remaining units from the second lot -> This will display the quantity consumed as 220.79999999999998, even if the decimal accuracy is set to only 2 digits. **Cause** Since, there are 2 `moveLines`, one for each lot, the getter `quantityDone` add 2 floating point together: https://github.com/odoo/enterprise/blob/d7ab7ee1287342638006e290ede20b955aae8370/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L63-L69 inducing a floating-point precision error. The result is rendered directly in the XML template: https://github.com/odoo/enterprise/blob/d7ab7ee1287342638006e290ede20b955aae8370/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.xml#L8-L14 without rounding. opw-6243804 Forward-Port-Of: odoo/enterprise#118976
This update fixes a misleading warning message displayed in the expense settings for users with certain localization settings. The system now accurately checks if a company's country supports Stripe issuing based on its fiscal country ID, ensuring a more reliable experience. This resolves a potential confusion for users and improves the accuracy of expense processing.
Original PR description
In the Expense settings, under 'Expense Card', the warning 'Stripe issuing is not yet supported for your localization' was displayed when the checkbox 'Expense Card' was unchecked, even if the stripe issuing is supported by the current localization. We now use the fiscal country id of the company to check if the company's country supports stripe issuing. task-6253582 Forward-Port-Of: odoo/enterprise#118654
This update resolves an issue where the systray timer highlight test was failing. The change ensures the system's task queue is properly cleared, allowing the test to accurately verify the timer's functionality. This improves the reliability of the test and ensures the timer feature works as expected.
Original PR description
This PR replaces the `tick` with an `advanceTime` when clicking the timer input in the corresponding test, to make sure the macrotask queue is cleared and that the setTimeout to select the field has had time to run. Forward-Port-Of: odoo/enterprise#119975
This update corrects a minor error in how email notifications are sent within the scheduling module. The previous configuration was incorrect, preventing the email composer from opening. This fix ensures that email notifications function as expected, allowing users to easily send emails directly from the scheduling interface.
Original PR description
the used action name for the Send Email action was false its supposed to be action_send and not action_send_email task: 6244506 Forward-Port-Of: odoo/enterprise#119674 Forward-Port-Of: odoo/enterprise#118334
This update resolves an issue where users without specific accounting permissions were encountering an error when selecting templates within the knowledge article feature. The fix delays access to sensitive audit reporting data, ensuring the feature works correctly for all users, regardless of their access rights. This improves the usability and reliability of the knowledge article system.
Original PR description
Steps to reproduce: 1. Install `accountant_knowledge` with `demo data` 2. Remove demo user from bookkeeper access right and give some lesser right 3. Open knowledge and create a new artical with demo user 4. Click on Load template for example `Meeting Minutes` Issue: It gives a access error: `This operation is allowed for the following groups: - Accounting/Bookkeeper` Cause: - accountant_knowledge was doing accounting-only work during generic template loading. Immediately calling `target_article._get_inherited_audit_report()` that returns `inherited_audit_report_id`, which is a computed relation to audit report. `audit.report` is only readable by `account.group_account_user` Solution: - delay that access until it is actually needed, - only if the template contains data-embedded="accountReport" opw-6067390 Forward-Port-Of: odoo/enterprise#117292 Forward-Port-Of: odoo/enterprise#112946
This update streamlines the test connection process for the timesheet grid. The 'Close' button has been removed from the successful connection modal, and users are now automatically redirected to the timeline view after a successful connection, improving usability.
Original PR description
- Remove 'Close' button from connection successful modal - Change Redirect users to http://localhost:5600/#/timeline after successful connection. task-6272843 Forward-Port-Of: odoo/enterprise#120353 Forward-Port-Of: odoo/enterprise#119800
This update corrects a previous issue where website orders automatically generated CFDI invoices to the public. Now, invoices are only CFDI to public when the customer provides all necessary information, aligning with standard e-commerce practices. This ensures data privacy and compliance.
Original PR description
There is no reason why we would always cfdi to public when creating orders from the e-commerce. When the customer give all their info, the invoice should not be cfdi to public. opw-6180766 Forward-Port-Of: odoo/enterprise#119442 Forward-Port-Of: odoo/enterprise#116061
This update resolves an issue where the website rental planning module would crash when the quantity input field was removed. A recent architectural change moved data evaluation logic into the DaterangePicker component, and this fix prevents a crash caused by attempting to update the quantity selector when it's no longer present. This ensures the rental planning feature remains stable and functional.
Original PR description
Steps to reproduce: 1. Install website_sale_renting_planning 2. In rental module, create a product that is of type service and can be sold 3. Go to the website and remove the quantity selector input…
Steps to reproduce: 1. Install website_sale_renting_planning 2. In rental module, create a product that is of type service and can be sold 3. Go to the website and remove the quantity selector input field from the page and save. Issue: `TypeError: Cannot read properties of null (reading 'dataset')` Why this happens: Following architectural changes in v19.1, the rental data evaluation logic was moved directly into the DaterangePicker component lifecycle. Commit 4e5f71d introduces a new method to where, during initialization (`willStart`), the component triggers `setAddQtyInputMax()` to update the dataset attributes of the quantity selector input box. If the quantity selector has been removed via the website customizer `querySelector` returns `null`, causing the assignment to crash. In v19.0, this logic lived in the `WebsiteSale` interaction, executing only during post-render UI event listener triggers which kept it safe. opw-6268945 Forward-Port-Of: odoo/enterprise#119574
This update prevents unnecessary placeholder images from being sent during menu synchronization. It now only includes actual product image URLs, improving data transfer efficiency and reducing potential performance issues. This change ensures a cleaner and more streamlined menu display for users.
Original PR description
This commit prevents placeholder images from being included in the menu sync payload and only sends `img_url` when an actual image is configured on the product or category. Task-6251430 Forward-Port-Of: odoo/enterprise#120229 Forward-Port-Of: odoo/enterprise#119482
A technical glitch prevented users from successfully adding AI-generated images to product pages. This update corrects a flaw in the system's image handling process, ensuring that users can now seamlessly integrate AI-created visuals into their product listings. The fix ensures a smoother user experience when utilizing the 'Add More' feature for extra media.
Original PR description
A traceback is produced when trying to add AI-generated images to a product using "Extra Media" -> "Add More". **Origin of the problem** The `ProductAddExtraImageAction` in `website_sale` always opens the Media dialog with `props.multiImages = true` and the save handler expects `loadResult.imgEls` to be an array. The `aiSave` method patched onto `ProductAddExtraImageAction` by `ai_website_sale` did not account for this, and called `apply()` with a single image element instead of an array, causing a traceback. **Fix** In `aiSave`, wrap `imgEls` in an array before calling `apply()`. task-6263899 Forward-Port-Of: odoo/enterprise#119273
This update corrects a technical oversight during a recent port of code. Unnecessary code was inadvertently left in the l10n_pe_reports module, which has now been removed. This ensures the Peruvian reporting functionality operates correctly within Odoo Enterprise version 19.0.
Original PR description
During the FW port of https://github.com/odoo/enterprise/pull/117891 We forgot to remove the unnecessary code opw-5978673 Forward-Port-Of: odoo/enterprise#120183
This update resolves a bug preventing the daily sales report from displaying its title correctly when the Colombian EDI module is enabled. The change ensures compatibility with a related POS HR report, and also corrects a previous issue where the report would render without a title when the module was installed without DIAN enabled.
Original PR description
The daily report template was replacing `//h2[@id='daily_report_title']` entirely, removing the node from the XML source. This caused `pos_hr.single_employee_sales_report` (a primary template that applies its own xpaths against the same patched base) to crash at compile time since its xpaths could no longer find that node. Switch from `position="replace"` to `position="attributes"` + `position="after"`: the h2 stays in the XML source at all times so pos_hr's xpaths always resolve, while the original title is hidden at render time via t-if when CO EDI is enabled and the Colombian content is inserted as a sibling after it. As a side effect, this also fixes a pre-existing bug where installing the module with DIAN disabled would render the daily report with no title at all. opw-6265637 Forward-Port-Of: odoo/enterprise#119668 Forward-Port-Of: odoo/enterprise#119003
This update resolves an issue where thumbnails weren't automatically generated when attaching documents to messages within the composer. Previously, users wouldn't see previews of attached files. This change ensures that document thumbnails are now correctly displayed, improving the user experience when sharing documents.
Original PR description
When attaching a documents to a message in the composer, the thumbnail was not generated. This commit fix this issue. Task-5096039 Forward-Port-Of: odoo/enterprise#116188
This update resolves an issue where the LNA button in the POS navbar wasn't properly testing functionality for IoT Boxes. Now, the system correctly sends a status action when LNA is enabled for these IoT devices, ensuring accurate tracking and reporting.
Original PR description
The LNA button in the POS navbar wasn't testing LNA for IoT Boxes. We now send a status action for IoT Boxes with LNA enabled. Forward-Port-Of: odoo/enterprise#119998
This update simplifies spreadsheet management by disabling unnecessary versioning for spreadsheet and frozen spreadsheet documents. This reduces file size and improves performance, aligning with how spreadsheets already track their own history. The Manage Versions action is also hidden for these document types.
Original PR description
Spreadsheet documents already manage their own history through spreadsheet revisions. Running generic Documents versioning on top of that creates unnecessary history attachments and additional documents when spreadsheet data is written or when a spreadsheet is copied. Keep the default Documents versioning behavior for regular documents, but allow spreadsheet and frozen spreadsheet documents to opt out of Documents versioning. Also hide the Manage Versions action for those records. * enterprise commit 0e319d063ae868d6e48e9fd6741caf5156308eae disabling Documents versioning for spreadsheets; * this change hiding the Manage Versions action for spreadsheet records. Task: [6236496](https://www.odoo.com/odoo/project/2328/tasks/6236496) Forward-Port-Of: odoo/enterprise#120230 Forward-Port-Of: odoo/enterprise#118484
This update fixes a previous issue where sales employees transitioning to non-commission roles incorrectly accrued commission losses for public holidays and sick time. Now, employees in non-sales positions will no longer experience these inaccurate commission deductions, ensuring accurate payroll calculations.
Original PR description
If a salesman moves to another job that doesn't pay commission, he shouldn't have loss on commissions for public holidays and sick time off. Forward-Port-Of: odoo/enterprise#120386
This update resolves a technical issue that caused the account reports audit tour to fail intermittently, specifically when accessing balances. The fix ensures the tour correctly waits for the Kanban view to be active, preventing premature actions and improving the overall user experience.
Original PR description
The account_reports_audit tour was failing at the "Balances" button step due to a race condition in the preceding steps. In environments with many modules, the "Open the working file" step was triggered prematurely while still on the return checks view, because its selector was too broad. This commit narrows the selector for "Open the working file" to ensure it only triggers once the Kanban view is actually active. [runbot-938920](https://runbot.odoo.com/odoo/runbot.build.error/938920) Forward-Port-Of: odoo/enterprise#118346
This update fixes a technical issue that was causing errors in Odoo's IoT polling requests. By ensuring all listening requests are handled, the system now reliably avoids displaying tracebacks when polling fails. This improves the stability and reliability of the IoT integration.
Original PR description
We were not awaiting the listening request in every case, making poll requests failures display tracebacks. We now await in any case to avoid this. Forward-Port-Of: odoo/enterprise#120408
This update simplifies error handling within the French reporting module (l10n_fr_reports). Specifically, redundant error codes related to subscription checks have been removed. Now, all errors from this area will result in a generic internal error, reducing the detail provided to support staff.
Original PR description
This commit: https://github.com/odoo/enterprise/commit/23afa6f2520a676dcb4cd94867065f1be03708bc change a bit the error codes but removed the ones from the check subscription. By doing so, all the error from that wrapper will give an internal error, and no other info on the error. no task id Forward-Port-Of: odoo/enterprise#120393 Forward-Port-Of: odoo/enterprise#120286
This update resolves an issue where report customizations made in Odoo's Studio were incorrectly applied to other reports, leading to potential rendering problems. The fix ensures that report edits are now stored within the specific report document view, preventing unintended side effects and improving Studio's stability.
Original PR description
Report edits could be applied on shared layouts such as web.basic_layout instead of the report-specific document view. This caused Studio customization diffs to affect unrelated reports and could…
Report edits could be applied on shared layouts such as web.basic_layout instead of the report-specific document view. This caused Studio customization diffs to affect unrelated reports and could also lead to rendering errors when report-specific fields were evaluated in a different report context. The issue occurred because content was inserted directly into the shared layout article section instead of the nested report document view. Steps to reproduce: 1. Open Studio on any module and create or edit a report. 2. Select any of the External, Minimal, or Blank report types. 3. Add content to the report body and save the report. 4. Open another module and create a report using the same report type. 5. Observe that the previous customization is already present. Before this fix, the generated diff could inherit from web.basic_layout. After this fix, body edits are kept inside the report-specific document view. Related Ticket: opw-6245485 Forward-Port-Of: odoo/enterprise#120357 Forward-Port-Of: odoo/enterprise#118880
Code cleanup and technical improvements
This update improves the generation of France's fiscal reports by introducing a centralized utility file and refining existing report handlers. Crucially, new test cases have been added to ensure accurate data extraction and XML report formatting for these reports, aligning with French tax regulations.
Original PR description
-Created a utils file for france fiscal reports that has the common functions, and refactored some parts of the code in the report handlers. -Created test cases for adding and removing lines from a report, extracting the data, and exporting the report as xml for the france localization fiscal report. task-6138193 Forward-Port-Of: odoo/enterprise#115831