Daily updates from Odoo
Monday, June 22, 2026
40 changes · master
New functionality added to Odoo
This update introduces support for Nepal's unique fiscal year system, specifically the Bikram Samvat calendar. It allows for dynamic calculation and display of dates in the standard "day month_name, year" format, crucial for accurate financial reporting in Nepal. New fields and validation rules have been added to ensure correct date handling and prevent overlapping fiscal year ranges.
Original PR description
Inherit `account.fiscal.year` to add month lines One2many Add `l10n_np.account.fiscal.year.month.line` model with month name, start date and end date fields Add inline list view on fiscal year form for Nepal companies only
This update empowers appraisal administrators with the ability to create new appraisal plans within the Odoo Enterprise system. This enhancement streamlines the appraisal process and allows for greater flexibility in defining performance goals. The change was driven by task 6302703.
Original PR description
The appraisal admins should be able to create new appraisal plans. Task: 6302703
This update introduces a new website form allowing customers to submit Field Service requests directly. Planning Managers can then review these requests and schedule interventions manually, bypassing the previous limitations of fixed booking times and payment requirements. The change also includes address autocomplete and improvements to ticket creation processes.
Original PR description
Field Service interventions can be booked online through the Appointment integration, but that flow has several limitations: - Interventions are booked at a fixed date and time without considering the customer's location. - Appointment types must enable upfront payment to create interventions. This commit: - Provides a public website form that lets customers submit Field Service requests. Submissions create a shift with no start date so Planning Managers can review the request and schedule the intervention manually. - Adds a "Service Requests" menu under Planning > Schedule listing slots with no planned date so managers can follow up with requesters. - Uses Google Places autocomplete on the address field when `website_address_autocomplete` is installed. task-6073523
This update introduces the ability for customers to set up recurring donations directly within the website's shopping cart. Users can now choose the frequency of their donations, streamlining the donation process and increasing donation flexibility. This enhancement improves the user experience and expands donation options for our supporters.
Original PR description
Add recurring donation product and plans. Expose them to the website_sale donation snippet via the donation info API. Enable selection of recurrence in the snippet, allowing subscription based donations to be added directly to the cart and processed in checkout. Community PR: https://github.com/odoo/odoo/pull/265981
This update introduces dynamic mailing lists, allowing marketers to create targeted lists based on specific criteria within Odoo. Users can now save and manage these dynamic lists, improving campaign efficiency and segmentation. This change simplifies the process of reaching specific customer groups.
Original PR description
The purpose of this commit is to add **dynamic** mailing lists alongside the existing manual/static lists. Dynamic lists are list defined by a target mailing model and a domain. This PR is linked to a community PR. task-5358279
This update allows businesses to automatically add travel charges to field service task invoices. A new setting lets you link a product to cover travel expenses, ensuring accurate invoicing. To ensure the setting works correctly during initial module setup, a technical adjustment was made to explicitly define the default product.
Original PR description
## Expected Behavior of this PR Add support for applying an additional travel charge when a field service task is completed. This feature currently supports only fixed travel fees. ## Additional A new product field, `travel_time_invoicing_product_id`, is added to the Field Service's settings to define the product used for adding travel fees to field service. The default value for this field is provided in a `data.xml` file. However, because this file is loaded after default field values are initialized, the default product is not available during the module’s initial installation. To ensure proper initialization, the default value is also explicitly set in the `post_init` hook of the `planning_field_service_sale_timesheet` module. task-[5871604](https://www.odoo.com/odoo/project/4105/tasks/5871604)
This update adds the ability to generate a required CSV export for the Oman Wage Protection System (WPS) from payroll runs. This allows businesses to comply with Omani regulations by providing the necessary data in the correct format for reporting to the MOL. The report includes details for both employers and employees, streamlining the payroll reporting process.
Original PR description
Adds support for generating the Oman Wage Protection System (WPS) CSV export from payroll batch runs, along with the configuration fields and payslip validation it requires.
The payment report wizard gains a new l10n_om_wps format that generates a CSV with an employer section (MOL numbers, bank short name, IBAN, period, totals) and an employee section (ID, bank details, salary breakdown, extra hours, notes). Bank code resolution prefers the account's WPS Short Name and falls back to a hardcoded BIC to code table covering all Omani banks. The filename follows SIF_{MOL}_{BankCode}_{YYYYMMDD}_{NNN} with a daily-resetting 3-digit counter.
task-6040641Enhancements to existing features
This update adapts the SEPA Direct Debit payment process to support the new 'Pay on Invoice' option. This allows customers to choose to pay invoices directly, streamlining the payment process and offering greater flexibility. The changes were driven by community feedback and are designed to enhance the user experience.
Original PR description
See community commit for details. task-5149051
This update improves the live map experience by allowing users to easily focus on colleagues' locations and automatically including their live locations in Google Maps routing. This provides a more efficient and accurate way to coordinate with team members and plan routes.
Original PR description
# [IMP] web_map: allow inheritance of pin list for mobile view Prior to this commit, it was not possible for child modules to inherit from the pin list popover (i.e., the one used for the mobile view). # [IMP] planning_field_service: focus on user marker in live map In this commit, we add a button allowing users to focus on users' live location markers. The button is displayed only if the user is located (i.e., has a live location), and the view will zoom with an animation on the user pin. # [IMP] planning_field_service,web_map: google maps routing includes user location This commit adds users' live location as original addresses when opening the routing in Google Maps in the live map. task-6168733
This update introduces continuous production tracking for work orders, allowing workers to easily record completed quantities. The latest quantity recorded automatically updates the production quantity, speeding up the process. Enabling this feature ensures work orders become ready as soon as some quantities are completed, improving efficiency.
Original PR description
Allow workers to record the quantities completed on each workorder, the latest recorded quantity becomes the mo's producing quantity. Add a flag to enable continuous production (subsequent work orders will become ready as soon as some quantities are ready). See https://github.com/odoo/odoo/pull/267113 task: 6175830
This update adds AI-driven transcription to Odoo calls (VoIP and Discuss), improving meeting summaries and searchability. The new system processes call recordings in smaller chunks, preventing performance issues and ensuring reliable transcription, while also integrating with VoIP demo mode for testing.
Original PR description
This PR builds upon the Community PR (odoo/odoo#233836) by extending the call.artifact model with AI-powered transcription capabilities for both VoIP and Discuss calls. Rather than attempting to…
This PR builds upon the Community PR (odoo/odoo#233836) by extending the call.artifact model with AI-powered transcription capabilities for both VoIP and Discuss calls.
Rather than attempting to transcribe monolithic, multi-hour call recordings, this architecture processes chunked artifacts independently. This solves the 25MB payload limit of the LLM APIs and allows for granular error handling.
**Overview:**
- Gevent Orchestration (vs. Cron): Abandoning cron-based approach. Transcription is now orchestrated via a background gevent thread (action_transcribe_gevent). This provides immediate feedback post-call and prevents long-running I/O operations (LLM API calls) from hogging the Odoo cron workers.
- Safe 3-Phase Processing: To keep db connections short during the slow LLM API calls, the gevent orchestration uses a Claim → Process → Finalize pattern, committing the transaction between each step.
- Cloud Storage Architecture: Persistent call recordings are strictly offloaded to the cloud_storage module to prevent Odoo filestore bloat. However, transient STT audio chunks bypass this requirement, saving locally and deleting themselves immediately after successful transcription.
- VoIP Integration (voip_ai): Fully integrates the transcription flow into the VoIP softphone, including automated one-liner call summaries generated from the concatenated artifact transcripts.
- VoIP bonus -- demo, as a byproduct of this PR the demo for call was enriched with bying able to record and transcribe
(Note: Previous legacy recordings/transcriptions are migrated to call.artifact via odoo/upgrade#9521).
**Artifact Transcription Lifecycle:**
When an audio chunk is uploaded for transcription, it state machine to guarantee it is processed exactly once, with built-in retry logic for transient API failures.
```mermaid
stateDiagram-v2
[*] --> Pending : Chunk Uploaded (is_stt=True)
state "Pending" as Pending
state "Claimed (Leased)" as Claimed
state "Done" as Done
state "Error (Terminal)" as Error
Pending --> Claimed : action_transcribe_gevent (TX#1)
Claimed --> Pending : API Failed (Retries < Max)
Claimed --> Done : API Success (TX#3)
Claimed --> Error : API Failed (Retries >= Max)
Claimed --> Error : File too large / No media
Claimed --> Pending : Worker Crash (Lease Expires)
Done --> [*] : Media unlinked, Parent notified
Error --> [*] : Media unlinked, Parent notified
```
task-5153790This update adjusts the Odoo payroll accounting configuration to align with the latest Egyptian Chart of Accounts. This ensures that all payroll journal entries accurately reflect the correct accounts, complying with Egyptian tax regulations.
Original PR description
The Egyptian Chart of Accounts has been updated, so the payroll accounting configuration must be adjusted accordingly to ensure payroll journal entries use the correct accounts. Related PRs Community - https://github.com/odoo/odoo/pull/266614 Upgrade - https://github.com/odoo/upgrade/pull/10339
This update simplifies the process of tracking stock by vehicle within Field Service. Previously, configuring vehicle warehouses was hidden and difficult, but now a centralized dashboard provides easy access and management, streamlining operations at scale. The new system enforces data integrity to prevent errors and ensures accurate fleet assignments.
Original PR description
Since v14, tracking stock by vehicle required manually setting a 'default warehouse' hidden deep within individual user preferences. Because this field was completely invisible unless multi-warehouses were enabled, the feature was largely undiscoverable and extremely tedious to manage at scale. This commit solves the discoverability and configuration issues by introducing a centralized Vehicle Warehouses dashboard directly in the Field Service settings. Key impacts: - Adds a direct "Stock by Vehicle" setup link in the Field Service settings. - Introduces a dedicated list and mobile Kanban view to easily map specific warehouses (vehicles) to assigned technicians (planning users). - Enforces strict constraints to prevent duplicate fleet assignments and ensures warehouses and users remain strictly linked within the same company. Task: 6190476
This update enhances the map view by displaying resource avatars when routes are grouped by resources. This provides a clearer visual representation of the routes and makes it easier to identify associated resources within the map interface. This change improves usability and provides a more intuitive experience for users.
Original PR description
## [IMP] web_map: define template for routing information popup This commit defines the routing information popup as a template, allowing other modules to extend/modify it. ## [IMP] planning_field_service: show resource avatar on route popover In this commit, we add the resource's avatar to the routing popover in the map view. This only applies when the view is grouped by resources. task-6273760
This update introduces a variable resource calendar, allowing users to precisely define attendance dates instead of relying on fixed schedules like weekly recurring options. This provides greater flexibility in managing employee working schedules and accommodates diverse attendance patterns, replacing the previous two-week calendar.
A new 'Cancelled' filter has been added to the ticket screen, allowing cashiers to easily view and manage all cancelled orders, regardless of their origin. This change improves order management and provides greater control for cashiers, aligning with a streamlined workflow. The cancellation process is now logged for transparency.
Original PR description
..., pos_hr, pos_self_order, pos_platform_order --- In order to give the cashier more control over orders, a new "Cancelled" filter has been added to the ticket screen. This filter already existed in `pos_platform_order`, but it was limited to orders cancelled from platform orders only. It now shows all cancelled orders, regardless of their origin. Previously, cancelling an order would delete it locally — it remained in the backend but was absent from the frontend, making it impossible to display in the cancelled filter. This behaviour has been removed. We also no longer load only draft orders for the current POS config, but all orders for the current session, whatever their state. Additionally, the cancellation is now logged in the chatter under the current cashier's name. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6112014
This update enhances payment processing by adding debtor and creditor information to the data sent to our payment processors (Powens and Saltedge). This ensures accurate payment initiation and improves integration with financial systems.
Original PR description
In order to be able to initiate payments using Powens and Saltedge, we need to include debtor information in the payload sent to Odoofin. This commit adds the necessary fields and updates the tests accordingly. Task ID: 5977148, 6095729 Forward-Port-Of: odoo/enterprise#119843
This update adds travel time calculations and display to the Field Service Gantt view, specifically designed for resource-based scheduling. It introduces travel time buffers, automatically tracking distances and times, and provides a popover for detailed travel information when hovering over a shift. This improves scheduling accuracy and efficiency for field service teams.
Original PR description
## [IMP] web_gantt: allow setting conditions to display buffer times This commit allows children to conditionally display buffer times in the Gantt view. This is particularly important for Field…
## [IMP] web_gantt: allow setting conditions to display buffer times This commit allows children to conditionally display buffer times in the Gantt view. This is particularly important for Field Service, where buffers do not make sense if the view is not grouped by resource. ## [IMP] web_gantt: editable specification for get_gantt_data rpc This commit allows views inheriting from `GanttModel` to modify the specification passed to the `get_gantt_data` rpc call. This will become handy for Field Service, where we want to read extra fields (other than `display_name`) for partners. ## [IMP] planning: check user group before loading data This commit ensures that the `isManager` boolean value is always fetched before loading the Gantt view. ## [IMP] planning_field_service: travel time computation in the Gantt view This commit introduces travel time and distance tracking for field service shifts. Travel times displayed as buffers on the day-scale gantt view when grouped by resource. - Add `travel_time_in/out` and `travel_distance_in/out` fields on planning slots - Travel data is reset automatically when the partner, resource, or datetime changes, and preserved when splitting/undoing splits or undoing drag-and-drop - Compute routes using MapBox on gantt load (when all records are stale) or on demand via a toolbar button (when some are stale)` - The travel data are computed starting and ending at the resource's work location (i.e., work, daily interventions, work) - Hide the buffer-end visually when a subsequent shift exists for the same resource ## [IMP] planning_field_service: add travel time and distance popover in gantt This commit adds a popover containing the travel time information for the intervention, when hovering its buffer time. It contains the departure time, travel time, and distance. If there is no previous intervention, the information is relative to the resource's work location. task-6200248
This update adds necessary fields to the payment process for Saltedge, enabling seamless payment initiation. The changes were made to ensure compatibility with Saltedge's requirements. The update will be applied across all Odoo Enterprise versions.
Original PR description
In order to be able to initiate payments using Saltedge we need to include a couple more fields in our payload. This commit adds them. This PR is in master to ease testing but will be backported to 18.0 to cover all versions of the payment initiation flow. Task ID: 6095729
This update enhances the safety of product template merging by preventing the automatic merging of complex templates with variant configurations. Previously, this could lead to unexpected product behavior. Now, only simple, single-variant templates can be merged directly, ensuring more reliable and predictable product management.
Original PR description
Before product template merge could try to merge templates with variant configuration this could lead to unsupported or confusing product behavior there was no clear check for only simple templates After added a merge guard for product templates only plain single variant templates can be merged directly configurable or multi variant templates now stop with a clear message Impact safer product merge behavior prevents incorrect merges on configured products keeps de-duplication limited to the simplest valid cases task id - 5928499
This update simplifies how prices with taxes (included or excluded) are managed within Odoo. Users can now dynamically adjust tax settings on invoices, orders, and purchase orders, reducing the risk of duplicate taxes and improving overall financial accuracy. However, be aware of potential complexities when overridden tax settings are in place.
Original PR description
### Purpose To improve management of prices with tax included and tax excluded. To simplify handling a mix of both in the same company and avoiding duplicate taxes. ### Implementation Users can…
### Purpose To improve management of prices with tax included and tax excluded. To simplify handling a mix of both in the same company and avoiding duplicate taxes. ### Implementation Users can change default taxes into included or excluded in the prices dynamically on account.move, sale.order and purchase.order. This is done through a selection field document_tax_mode that allows the user to set any default taxes on the lines to tax included or excluded. This will be reflected on the total amounts of the document. Taxes with an override tax mode set (price_include_override on account.tax) will keep their overridden behavior regardless of the document tax mode. Beware of functionally non-applicable cases with overridden taxes that can lead to erratic behavior: -company tax mode set to tax included, with a tax included override tax, document set to tax excluded, -company tax mode set to tax excluded, with a tax excluded override tax, document set to tax included. odoo/odoo/pull/251800 odoo/upgrade/pull/9951 task-5942016
This update enhances the payroll experience for employees classified as 'company executives.' Specifically, it adds support for a 'joint committee' of 999 and hides irrelevant fields (sub-type, dimona category, and flat rate) to simplify data entry and improve usability. This change aligns with user needs and streamlines the payroll process.
Original PR description
This PR expected to - Add the joint committee 999 on the employee type 'company executive' - If the join committee of the employee is 999: - Hide the field sub-type and make sure it's empty - Hide the field dimona category and make sure it's empty task: 6300301
This update enhances the user experience for payroll reports in the Belgian HR module. Now, users can preview reports as PDFs, even for batch reports, and the 'Eligible Employee' button directly navigates to the employee's profile, streamlining workflows.
Original PR description
1. Display the preview button even for batch reports. When clicking on it, a PDF appears: it is the same PDF that would be shown if we previewed the report as web. 2. From the Eligible Employee smart button, allow the user to navigate to the employee profile. __ task-6304028
This update enhances the customer display within our POS apps (enterprise, IoT, and mobile) by incorporating dark mode assets and streamlining URL calculations. By centralizing the URL computation, we've reduced redundancy and improved the overall consistency of the customer display across all POS experiences. This change ensures a better user experience and simplifies future updates.
Original PR description
pos*: pos_enterprise, pos_iot, pos_mobile - Add proper dark mode assets for the customer display (aligned with POS styling) - Centralize customer display URL computation in the PoS store service to avoid code duplication Task-6139178 Related PRs: - https://github.com/odoo/odoo/pull/260331
This update simplifies the process of creating Quality Alerts directly from Manufacturing Orders, making it easier for users to report issues. The form has been redesigned with a clearer layout and streamlined fields, reducing unnecessary complexity. This change improves efficiency and data accuracy when managing quality control.
Original PR description
Users cannot easily create a Quality Alert directly from a Manufacturing Order (MO), and the Quality Alert form exposes fields that are unnecessary or unclear depending on the context. This commit…
Users cannot easily create a Quality Alert directly from a Manufacturing Order (MO), and the Quality Alert form exposes fields that are unnecessary or unclear depending on the context. This commit improves alert creation from MOs and refines the form behavior. This commit's changes: - Add an action on the Manufacturing Order form to create a Quality Alert directly from the Action menu. - Simplify the Quality Alert form header and move the priority widget to the top of the form. - Show "Title..." as the Title field placeholder for new alerts, then use the Quality Alert reference once assigned if no title was entered. - Remove the Product Template field from the quality.alert model. - Rename the Product Variant field label to "Product". - Update the form to show either the Picking or Manufacturing Order, hiding the unused field. - Rename the "Lot" field to "Lot/Serial". - Show the "Lot/Serial" field only when the selected product is tracked by lot or serial number. - Add "allowed_lot_ids" to identify lots/serials linked to the current Manufacturing Order or Picking. - Restrict "Lot/Serial" selection to "allowed_lot_ids" when available; otherwise fall back to all lots of the selected product. - Hide the Work Center field on the form unless it is set. task-6102168
Resolved issues and error corrections
This update fixes an issue in the Belgian payroll calculations related to DMFA (termination) payments. Previously, the system incorrectly stopped calculating payments after a 3-month period, even with ongoing remuneration. This change ensures that payments continue as long as remuneration exists, preventing employees from being completely unenrolled with no payment during extended sickness periods. The update includes new tests to guarantee accurate calculations.
Original PR description
. Iterate as long as there is a remuneration on the dmfa period > 0, not stop to the previous period only. . The fix was made so if the remuneration on the dmfa period (3 months) is null, system will check the previous remuneration on the previous dmfa period, BUT, if we take a long sickness period on an employee, you can have people with 2 or 3 DMFA fully unenmployed with no remuneration at all . Add the corresponding tests task-6299792
This update resolves a crash that occurred when users were manually correcting bank statement lines within the Odoo Enterprise system. The issue stemmed from a missing context setting during record creation, preventing the correct journal from being assigned. This fix ensures accurate journal assignments and prevents data modification errors.
Original PR description
When the manual correction tool was used to fill in the lines, we weren't passing the active context when creating the new records. In the case of bank statements, it could be an issue as the `default_journal_id` key is expected to be present to set the correct journal on the newly created bank statement line. Without this key in the context, it would default to the first journal with a valid type (see function `_search_default_journal`). If the journal found this way didn't match the current journal, a crash would occur when modifying the newly created lines. opw-[6294117](https://www.odoo.com/odoo/unassigned-tasks/6294117) Forward-Port-Of: odoo/enterprise#121032 Forward-Port-Of: odoo/enterprise#120745
This update resolves an issue where manually created timesheets weren't correctly linked to the associated Sales Order Item. The fix ensures the Sales Order Item information is properly inherited during timesheet creation, improving data accuracy and streamlining the timesheet process. This prevents errors when recording time against sales orders.
Original PR description
### Issue: When manually creating a timesheet from a planning shift's smart button, the Sales Order Item is not inherited. ### Cause: The `planning_slot_id` was missing from the timesheet list view. As a result, the `default_planning_slot_id` passed in the context was dropped during the creation of the new record, preventing us from linking the correct SO line. Solution: Added `planning_slot_id` as `column_invisible="True"` in the timesheet list view so the context default is retained. task-6229397
This update fixes an issue where the Gantt chart popover displayed only start and end dates for project tasks. The change ensures the popover correctly uses the card view, providing richer task details. This improves the user experience when viewing project timelines.
Original PR description
Since odoo/odoo#114328, the kanban view of the action isn't used as gantt popover by default if no popover is defined in the gantt view arch. As a consequence, on the project sharing task gantt view, the popover was the default, basic one which displays only the start and end dates. This commit restores the previous behavior by explictly set on the gantt view the id of the card view to used inside the popover. To achieve this, it was necessary to extract that card view out of the kanban. Followup of task~5262907
This update resolves an issue where the search input in a SelectMenu was unintentionally clearing typed characters due to timing conflicts. The fix ensures the input value is controlled directly, resulting in a more reliable and consistent search experience. This improves usability for users searching within the system.
Original PR description
Before this commit, some very specific timing could cause re-renders after debounced was called but before it was finished, causing a re-render of the input and setting its value to a previous state, removing typed characters. This commit fixes that by making the input value controlled manually, not via the reactivity. Community: https://github.com/odoo/odoo/pull/266912
This update ensures the Documents smart button now displays *all* linked documents for records connected through bridge modules (like approvals, fleet, HR, and projects), regardless of their location. Previously, it only showed documents within a configured folder. The change also includes improvements to document counting across various modules, enhancing the overall document management experience.
Original PR description
* = approvals, fleet, hr_recruitment, project Before this commit, clicking on the Documents smart button, it only displayed the documents contained in the configured folder. But it happens that a document is linked to a record from a bridge module but is not in that configured folder. This commit fix that by displaying all the linked documents for a record from a bridge module. So we toook the opportunity to move the document_count field to the 'documents.mixin' model with its compute method and the 'action_open_documents' method. Task-5948278
This update resolves a problem where order signing with Fiskaly failed after a change to the Fiskaly API key. The system now correctly resets the associated SCU and cash registers, ensuring seamless integration with the Fiskaly system. This prevents order processing errors and maintains accurate financial data.
Original PR description
When the Fiskaly API key/secret is changed, the company is bound to a new Fiskaly organization (owner). The SCU and cash registers stored on the company and POS configs were created under the previous owner and no longer exist for the new one, so signing orders fails with E_CASH_REGISTER_NOT_FOUND. Clear l10n_at_pos_company_scuid and each config's l10n_at_cash_regid together with the access token so they are recreated under the new organization on the next authentication. opw-6297695 Forward-Port-Of: odoo/enterprise#120839
This update fixes an issue where created packages weren't displayed within the barcode picking app when putting items into packs. The fix ensures that users can clearly see the source and destination packages during the packing process, improving workflow and reducing errors. This enhancement simplifies the process of managing packaged goods within Odoo.
Original PR description
### Steps to reproduce: - Enable `Lots & Serial Numbers` and `Packages` in the settings - Create a product tracked by SN and add SN001 and SN002 to stock - Create and confirm a delivery for 2 units -…
### Steps to reproduce: - Enable `Lots & Serial Numbers` and `Packages` in the settings - Create a product tracked by SN and add SN001 and SN002 to stock - Create and confirm a delivery for 2 units - Open the Barcode app and open the delivery - Scan the product > Scan SN001 - Click `Put in Pack` ### Current behavior: The created package is not displayed anywhere. Clicking Put in Pack again nests the package into another package without any visible indication to the user. ### Cause of the Issue: The GroupedLineComponent cannot display neither the source or destination package: https://github.com/odoo/enterprise/blob/c5bbcaeed513817fdda1f3f42f4c9b2440264174/stock_barcode/static/src/components/grouped_line.xml#L4-L21 However, our case the grouped line contains only a single line and prevents the users from viewing the sublines since the `Show Reserved Lots` is disabled on the operation type and only one lot (with additional demand) was scanned: https://github.com/odoo/enterprise/blob/c5bbcaeed513817fdda1f3f42f4c9b2440264174/stock_barcode/static/src/components/grouped_line.js#L75-L77 https://github.com/odoo/enterprise/blob/c5bbcaeed513817fdda1f3f42f4c9b2440264174/stock_barcode/static/src/components/grouped_line.js#L44-L55 opw-6237834 Forward-Port-Of: odoo/enterprise#119114
This update fixes an error in the XML export for the Luxembourg eCDF platform. Incorrect financial year data was being generated due to a specific account entry. The fix removes problematic account mappings and adds a test to ensure accurate reporting going forward.
Original PR description
Issue: Users reported that the financial year result in the XML export for the Luxembourg eCDF platform is incorrect, despite being correct in the Odoo Profit and Loss visualization. The exported XML populated incorrect amounts in cell 0161 under certain circumstances (namely, in the case of an explicit entry from account 999999 to account 142000). Solution: * Removed account 142 entirely from both the `ACCOUNTS_2019` and `ACCOUNTS_2020` dictionaries so it no longer auto-populates cells 0161/0162 (up to 2019 included) and 2955/2956 (from 2020 onward). * Removed the 2019 threshold condition in the loop bypass for account 142. * Removed the hard-coded manual pop for cell 2955 since it has been removed from the mapping. * Deleted the redundant reassignment of `net142` in the loss calculation block. Ticket [link](https://www.odoo.com/odoo/project.task/6059571) opw-6059571 Forward-Port-Of: odoo/enterprise#121010
This update resolves an issue where DIAN XML files were being rejected due to incorrect calculations of prepaid payments. The fix combines payment amounts into a single tag, ensuring the total paid matches the due amount and eliminating the need for negative payment lines, improving compliance with DIAN requirements.
Original PR description
**Steps to reproduce:** To test this, you will need an official DIAN setup, because this error comes from the response to our API call to the DIAN. - Setup the DIAN in a colombian company - Open the…
**Steps to reproduce:** To test this, you will need an official DIAN setup, because this error comes from the response to our API call to the DIAN. - Setup the DIAN in a colombian company - Open the PoS - Order a product - Before paying, make the amount we are paying bigger than the amount due - We get an error response from the API, the error is saying that the total due does not match what we paid **Why the fix:** Currently, the xml is rejected because the sum of the **PaidAmount** in the **PrepaidPayment** tag is not equal to what we are trying to pay for. This is happening because to avoid the fact that we can not send a line with negative amount, we used the **abs()** function on the line amount to make it positive. The negative line comes from the fact that when we have a total due that is below the amount paid, we create a new payment line with a negative amount to balance it out. But as we can't send lines with negative amount, we needed to make it positive. This does not work, as the sum of the lines' amount will then be too much compared to what we are paying for, because instead of substracting it we will be adding it. To avoid this, we now group the amount in one single tag and send it this way. This ensures that the sent amount is correct and equals the amount due, and does not send a negative line. opw-6232575 Forward-Port-Of: odoo/enterprise#121075 Forward-Port-Of: odoo/enterprise#119255
This update fixes a previous limitation where users couldn't properly set prices for hybrid subscription products (those allowing one-time sales). Now, the system requires a plan to be selected for subscription products and correctly filters pricelist items to support one-time pricing for hybrid subscriptions, ensuring accurate and flexible pricing options.
Original PR description
Before this commit:
1. Users could save a pricelist rule for a pure subscription product without assigning a plan.
2. Hybrid subscription products (where 'Allow One-Time Sale' is True) were filtered out of the pricelist item form when no plan was selected, preventing users from setting a one-time price.
After this commit:
- The `plan_id` field on the product template form is now mandatory if the product is a subscription and does not allow one-time sales.
- The `product_tmpl_id` domain on the pricelist item form is updated to `['|', ('recurring_invoice', '=', bool(plan_id)), ('allow_one_time_sale', '=', True)]`, allowing users to select hybrid products for one-time pricing.
task: 6164232
Forward-Port-Of: odoo/enterprise#120323
Forward-Port-Of: odoo/enterprise#115271This update allows for more flexible scheduling by introducing 'duration-based' calendars for resources. Previously, resources were limited to strict time slots or fully flexible arrangements. Now, resources can have a mix of fixed and flexible days, ensuring better resource allocation and utilization while maintaining capacity limits.
Original PR description
Currently, resources are either entirely strict (bound by fixed start/end intervals) or entirely flexible. There is no native way to support a hybrid calendar where an employee has specific days that…
Currently, resources are either entirely strict (bound by fixed start/end intervals) or entirely flexible. There is no native way to support a hybrid calendar where an employee has specific days that are flexible (duration-based) and other days that are strict. This commit introduces "duration-based" scheduling, allowing the system to bypass strict time intersections on specifically flagged days while maintaining a strict capacity cap. Changes include: - `resource.resource`: Added `_is_duration_based(start_dt, end_dt)` helper to dynamically identify if a resource has flexible attendance within a specific date range or single day. - `planning.slot`: - `auto_plan_ids`: Expanded the bulk interval fetch for hybrid resources to prevent the core HR module from clipping flexible days, and implemented a day-by-day intersection bypass inside the `find_resource` allocation loop. - `_get_working_hours_over_period`: Intercepted manual shift calculations. If a shift falls on a duration-based day, it bypasses the strict `work_intervals` overlap and assigns the literal shift duration (safely capped at the employee's daily capacity). Timezone-aware date conversions ensure accuracy. - `_gantt_unavailability`: Filtered out grey unavailability blocks on duration-based days so the Gantt chart accurately reflects flexible placement. Task-ID: 6285642
This update fixes an issue where payroll reports (specifically the 281.10 PDF) were cutting text in half, making them difficult to read. The changes ensure that data rows remain intact on a single page, resulting in a more professional and easily understandable report layout. This improves the clarity and accuracy of payroll documentation.
Original PR description
The PDF engine cuts text in half when a row hits a page break, making it unreadable. Forced breaks also leave unnatural gaps. This ensures rows stay intact on a single page and allows the document to paginate naturally. task-6316335
Code cleanup and technical improvements
This update adjusts how SEPA payment versions are managed within Odoo. Previously, all payment method lines on a journal shared a single version, which wasn't flexible enough. Now, the SEPA pain version is moved to the payment method line itself, allowing for more accurate and adaptable payment processing, particularly for different SEPA countries.
Original PR description
Payment methods lines don't always share the same SEPA pain version. Setting that version across all payment method lines on the journal is not flexible enough, so this commit moves that field to the payment method line. Task ID: 6106974
This update enhances the process of printing shipping labels and documents by supporting direct printing via ePOS and Zebra printers, eliminating the need for IoT devices. Additionally, the system has been refactored to reduce code duplication within the stock delivery module, improving efficiency.
Original PR description
We now allow printing Shipping Labels/Documents using ePOS protocol (e.g. EPSON TM-L100) and Zebra ZPL network printers to avoid using IoT. We then moved some the chatter search of documents in `stock_delivery` to avoid duplicating code. see odoo/odoo#248509 task-4599220