Tuesday, September 8, 2026
39 changes · master
Enhancements to existing features
Accrual entries now include clearer labels so users can better understand and track what was generated. The process also detects possible duplicate accruals for the same period, reducing the risk of repeated accounting entries and cleanup work.
Original PR description
This commit improves the creation of accrual entries by: 1. adding context dependant strings allowing the user to easily track what kind of accrual entry has been created. 2. adding a mechanism to detect and handle duplicate accrual entries for the same period. task-6484921
The barcode tools now use a reusable view that combines camera scanning and manual barcode entry. This makes the scanning experience easier to expand and lets teams control whether the manual input field automatically receives focus.
Original PR description
Input focus is made conditional for the BarcodeInput component, to allow users to disable it if desired. It is enabled by default task-4170451 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
On-hand quantity links in stock reports now open the detailed stock quantities view directly. Lot quantities also reuse the existing filtered view, making it easier for users to inspect stock details consistently.
Original PR description
This commit's changes: - Redirect the stock report's on-hand quantity to the quant action. - Make the lot quantity call the existing lot-filtered quant action. task-6445662 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
Website editors now have more control over product snippets, including grid or carousel layouts, column settings, and an option to show all products by website order. The settings have also been renamed and reorganized to make product presentation easier to configure.
Original PR description
**Post this commit:** - Added Orientation option for choosing Grid/Carousel layout. - Added an 'All' Filter to fetch products based on website sequence, rather than a specific rule. - Added Columns and Mobile columns to get more precision in terms of layout. - Renamed 'Show Variants' and 'Product Names'. - Reordered some of the settings. - Removed scrolling mode and making it single by default just for the product snippet. **Affected Version**-master Task-5167730 Docs PR: https://github.com/odoo/documentation/pull/16668
The command-line module tools now show which apps would be installed, upgraded, or removed before changes are applied. Users can also list installed apps and see pending updates, making database maintenance safer and easier to plan.
Original PR description
Show the modules that would be installed, upgraded or removed by running the command. Also allow listing installed modules. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Private calendar events are now counted when showing availability for appointments, while still hiding their details from people who should not see them. This helps prevent double-booking by showing users as busy even when the underlying event is private.
Original PR description
https://github.com/odoo/enterprise/pull/122675 When a user creates a private event, it shows up as 'Busy' with no additional details in the calendar module. This behavior was not mirrored in the…
https://github.com/odoo/enterprise/pull/122675 When a user creates a private event, it shows up as 'Busy' with no additional details in the calendar module. This behavior was not mirrored in the gantt view, meaning that we couldn't see the actual availability of the user. Additionally, if the user has their default calendar privacy set to private, any event created through the appointment view will automatically be private and hidden from all other (non-attending) users. Why? When we fetch events in calendar, we do a search and go through `_fetch_query` which censors non-public fields if the user doesn't have access to a private event. In the gantt view, however, we first do a `_read_group`. Since _read_group only returns ids and does not fetch fields directly, it filtered out the private events entirely. This is not entirely necessary, as whenever we want to read the events based on the retrieved ids, we still go through `_fetch_query` which censors them. Hiding the ids themselves is not needed, as they can be read using a search anyway. This commit therefore removed the `_read_group` event override. To make sure that the events are accounted for in the availability computation, we need to fetch them with sudo in `_get_busy_calendar_events` to bypass the censorship, as we need the partner_ids to create the interval mapping. The enterprise counterpart handles displaying the busy events in the gantt view. Task-6237805
Adds a new accounting setup for Indian companies that need to prepare financial statements under Schedule III. The existing Indian template is renamed for non-corporate entities, while corporate entities get the required account classifications and tags for compliant balance sheet and profit and loss reporting.
Original PR description
Schedule III provides the format and classification for the financial statements of companies required to prepare their financial statements accordingly. In this commit, rename the existing chart template to `Non-Corporate Entities` and add a new `Corporate Entities` chart template with the Chart of Accounts and account tags required for Schedule III. The account codes from the existing Chart of Accounts are also removed, as they are not prescribed by the Indian government and are not mandatory for any specific purpose. These will provide the required account classification and will be used by the Schedule III Balance Sheet and Profit and Loss reports. task-2381149
Belgian payroll now includes the monthly employer ONSS reduction directly on payslips, instead of only calculating it in the quarterly DMFA report. This gives companies earlier visibility into expected social security costs while keeping quarterly totals aligned with official reporting.
Original PR description
Currently the ONSS deductions for the employer are only calculated in the DMFA report every quarter, but are not reported on the payslips, so companies do not have a clear idea of the ONSS contribution they will have to pay. This commit adds a salary rule to calculate the monthly reduction amount using the computation in the DMFA report. Since the DMFA contribution and deduction are quaterly calculations, the payslips for the whole quarter are required for accurate calculations. Since the DMFA report requires validated payslips to access line IDs, the remuneration processing was adapted to use the localdict for the current payslip. The ONSS reduction rule is processed towards the end of the computation so the required lines should be available. task-6108623
When an employee leaves, Belgian payroll now automatically prepares the required departure documents at the right point in the payroll process. HR teams also get easier access to these documents from the employee profile, reducing missed paperwork and manual follow-up.
Original PR description
Context: Terminating an employee doesn't generate any document anymore. Termination payslip and holiday attest used to be generated in the end of collaboration wizard, but this was removed. This commit generate the termination documents (termination payslip, holiday attests, 13th month payslip, employment certificate): - As soon as the last monthly payslip for an employee is created within a payrun - Or when the last orphan payslip is validated for that employee A flag on the departure prevents regenerating them a second time when that payslip is later validated. It also add a dropdown to the employee profile when a departure is registered, regrouping all the termination documents that can be generated for that employee. The employment certificate can also now be generated anytime under the cog menu, before it was only possible to do it if the employee was on end of collaboration. task-6482307
Belgian payroll now supports tax and social contribution reductions for first hires in DMFA reporting. This helps businesses apply the correct employment incentives more reliably and avoid reporting issues, including a safeguard against crashes when configuration values are missing.
Original PR description
Implement reductions for first hires in belgium DMFA. Task-5476927
Users now receive a clear warning when trying to delete a worksheet template that is already used by worksheets. This helps prevent accidental deletion of related worksheets and reduces the risk of unintended data loss.
Original PR description
Deleting a worksheet template deletes all worksheets using it, which was not explicitly mentioned prior to this commit. Hence, we display a warning when the user wants to delete a worksheet template, if it is used anywhere preventing them to delete unintentionally all their worksheets. task-6417105
The accounting review menu has been reorganized so users can find asset, loan, purchase, and sales review items in more appropriate places. The change also improves how accrued order review workflows connect with the updated wizard, supporting a smoother finance review process.
Original PR description
This commit cleans up the review menu by moving items to their appropriate space, it also sets up the logic to properly interact with the improved `account.accrued.orders.wizard`. task-6484921
VoIP users can now choose separate audio outputs for incoming call ringtones and active call audio, making headset and speaker setups easier to manage. The in-call menu also keeps key settings available during calls, including device selection, Do Not Disturb, and access to phone numbers.
Original PR description
task-6533808
Frontdesk visitor records now allow only one host, matching the kiosk experience where visitors can select a single person to meet. This keeps front desk, SMS, and WhatsApp workflows consistent and reduces confusion from assigning multiple hosts in the back office.
Original PR description
Given that from the kiosk front end a visitor could select only 1 host at a time, It doesnt make sense to allow relating multiple hosts from the back end. This commit changes the `host_ids` field on `frontdesk.visitor` from a many2many field to a many2one field `host_id`. task-6514675
Odoo’s AI capabilities are now delivered through the Odoo AI in-app purchase service, with model selection managed centrally by Odoo. This makes AI features easier to maintain, allows model upgrades without user-side changes, and supports switching models during an AI session.
Original PR description
The AI features of Odoo are now provided through a new "Odoo AI" IAP service. - Provider/model selection is now handled on the IAP server side. The LLM model used will depend on the feature for which it is used. It can now be updated more easily when new models are released or older models are deprecated. - A generic format for messages has been introduced. Since we don't know in advance which LLM model will be used, it is necessary to store them in a provider agnostic format (see `ai/utils/types.py` for a description). Thanks to this, it is now possible to switch models during a session. task-[6334145](https://www.odoo.com/odoo/project/19060/tasks/6334145)
VoIP call forms and completed call activity messages now present key information more clearly, including summaries, status, date, duration, transcripts, and feedback. This helps users review calls faster while keeping sensitive cost information limited to administrators.
Original PR description
see commit messages Task-6512169
The invoice batch sending wizard now opens much faster, reducing wait times for large batches from minutes to seconds. Users can also review sent invoice details more easily, and the electronic invoicing banner now appears only when relevant.
Original PR description
[IMP] account: Enhance Send Batch Wizard - Previously, the Send Batch Wizard could take too long to appear due to doing too much unnecessary work. Benchmark results for 4,000 moves improved from 2 minutes to 7 seconds. - Added a dropdown menu to view the details of the sent invoices. - Fixed "Partner requested electronic invoices reception" banner was incorrectly displayed for non-default PEPPOL countries. task-6275573
Improves performance when opening point-of-sale registers for newly created companies in databases with very large accounting histories. The system now checks smaller company data first, avoiding slow scans of millions of accounting lines and making the experience much faster for users.
Original PR description
When you create a new company in a database that has a lot of existing account move lines and you attempt to open a PoS register from the list view, `_compute_company_has_template` checks…
When you create a new company in a database that has a lot of existing
account move lines and you attempt to open a PoS register from the list
view, `_compute_company_has_template` checks `_existing_accounting` for
the new company and wil run a sequential scan on the entire account_move_line
table followed by a nested loop as the query planner assumes AMLs company_ids
will be roughly evenly distributed.
This is not the case in a new company that has no/very few AMLs.
This is because the query ran is:
`SELECT COUNT(*) FROM
(SELECT FROM "account_move_line"
WHERE (
"account_move_line"."company_id" IN
(SELECT "res_company"."id" FROM
"res_company" WHERE
("res_company"."parent_path" LIKE '3/%')
))
LIMIT 1)`
and the values of company_id being searched for aren't known until the
subquery runs.
Running a query more like
`SELECT COUNT(*) FROM
account_move_line
WHERE company_id IN (%s)`
is much faster
Since res_company will always be a smaller table, we can do the inexpensive
search first and then pass in the values so Postgres can do a cheaper
search and return faster.
Benchmark time of `_existing_accounting`:
| Company 1 AML count | Company 2 AML count | Pre-fix | Post-fix | Multiplier |
|---|---|---|---|---|
| 10,000,000 | 0 | 700 Milliseconds | 500 Microseconds | 1,400x |
| 20,000,000 | 0 | 1.35 Seconds | 1 Millisecond | 1,350x |
| 20,000,000 | 20,000,000 | 2 Milliseconds |1.3 Milliseconds | 1.5x |
| 50,000,000 | 0 | 3.25 Seconds | 1 Millisecond | 3,250x |
| 100,000,000 | 0 | 5.3 Seconds | 1.3 Milliseconds | 4,075x |
Query Plan Before:
```
"Aggregate (cost=0.08..0.09 rows=1 width=8) (actual time=5573.001..5573.002 rows=1.00 loops=1)"
" Buffers: shared read=571435"
" -> Limit (cost=0.00..0.08 rows=1 width=0) (actual time=5572.995..5572.997 rows=0.00 loops=1)"
" Buffers: shared read=571435"
" -> Nested Loop (cost=0.00..https://github.com/odoo/odoo/commit/1571439c0c70c1f1dc3229421e696b97ce1678f8.33 rows=20000086 width=0) (actual time=5572.988..5572.989 rows=0.00 loops=1)"
" Join Filter: (account_move_line.company_id = res_company.id)"
" Buffers: shared read=571435"
" -> Seq Scan on account_move_line (cost=0.00..971432.72 rows=40000172 width=4) (actual time=0.432..1913.934 rows=40000000.00 loops=1)"
" Buffers: shared read=571431"
" -> Materialize (cost=0.00..4.03 rows=1 width=4) (actual time=0.000..0.000 rows=0.00 loops=40000000)"
" Storage: Memory Maximum Storage: 17kB"
" Buffers: shared read=4"
" -> Seq Scan on res_company (cost=0.00..4.03 rows=1 width=4) (actual time=0.785..0.785 rows=0.00 loops=1)"
" Filter: ((parent_path)::text ~~ '3/%'::text)"
" Rows Removed by Filter: 2"
" Buffers: shared read=4"
"Planning:"
" Buffers: shared hit=574 read=77"
"Planning Time: 15.323 ms"
"Execution Time: 5573.060 ms"
```
Query Plan After:
```
"Aggregate (cost=4.46..4.47 rows=1 width=8) (actual time=1.972..1.973 rows=1.00 loops=1)"
" Buffers: shared read=3"
" -> Limit (cost=0.44..4.46 rows=1 width=0) (actual time=1.967..1.968 rows=0.00 loops=1)"
" Buffers: shared read=3"
" -> Index Only Scan using account_move_line__company_id_index on account_move_line (cost=0.44..4.46 rows=1 width=0) (actual time=1.965..1.966 rows=0.00 loops=1)"
" Index Cond: (company_id = 3)"
" Heap Fetches: 0"
" Index Searches: 1"
" Buffers: shared read=3"
"Planning:"
" Buffers: shared hit=3"
"Planning Time: 0.219 ms"
"Execution Time: 1.998 ms"
```
opw-6513885
Forward-Port-Of: odoo/odoo#285096Appointment teams can now choose a specific email template to request customer feedback after a visit. This helps businesses collect service ratings in a controlled way, while leaving the setting empty by default to avoid unexpected emails for existing appointments.
Original PR description
Businesses often need to collect customer feedback after an appointment takes place to evaluate service quality and drive continuous improvement. Currently, Odoo only supports default templates for bookings and cancellations. This change links a specific mail template for post-visit feedback directly within the appointment type configuration. It is left empty by default to prevent breaking existing flows or sending unwanted emails during data migration. task-6268987
Belgian payroll now flags four additional issues before DMFA reporting, including mismatched location unit dates, incompatible remuneration codes, and payslips created before the company's first scheduled pay. These warnings help payroll teams catch compliance problems earlier and reduce the risk of incorrect social security declarations.
Original PR description
Adding 4 warnings on payroll dashboard and payslip model - Check if DMFA location unit cover the payslip date range - Check employers with code 317 don't have remuneration code 2 - Check that employers with 100% credit time don't have remuneration code 1 - Check that there is no payslips starting before company first scheduled pay Task: 6297320
Dutch SBR and ICP report submissions now go through Odoo's proxy service instead of connecting directly to Digipoort. This simplifies the submission process and lets businesses use either their own certificate or Odoo's shared group certificate.
Original PR description
*: l10n_nl_reports_sbr{,_icp,_status_info}
---
Description of the issue this commit addresses:
Dutch SBR and ICP reports still send directly to Digipoort with duplicated SOAP/signature code and no shared group-certificate flow.
---
Desired behavior after this commit is merged:
This commit routes both reports through IAP proxy signing/sending, and lets users submit with either a personal certificate or Odoo's group one.
---
IAP PR: https://github.com/odoo/iap-apps/pull/1593
Upgrade PR: https://github.com/odoo/upgrade/pull/11237
task-3439634
Forward-Port-Of: odoo/enterprise#117617Asset records now show the related bill lines more accurately when non-deductible taxes are involved. This prevents tax amounts from being hidden or incorrectly combined when several assets are created from the same vendor bill.
Original PR description
Previously, tax lines lacked a direct link to their parent base line, causing non-deductible taxes to be omitted from the asset's "Bills" tab and merged across multiple assets on the same bill. In this commit - `asset_base_line_id` is added to track the parent base line for asset generating accounts - overrides for `_prepare_base_line_tax_repartition_grouping_key` and `_prepare_tax_line_repartition_grouping_key` are added to force the tax engine to generate distinct tax lines per asset base line - `display_move_line_ids` is introduced to safely display both the base and tax lines in the "Bills" UI Task-6283724
Delivery operations can now include the Consignment Note (CMR) in their automatic print options when a delivery is validated. This also applies to point-of-sale deliveries, helping teams produce required transport paperwork with less manual effort.
Original PR description
Add the `Consignment Note (CMR)` report to the `Print on Validation` options for delivery-type operations, allowing users to automatically print the CMR report when validating a delivery. Apply the same behavior to POS deliveries. Enterprise PR: odoo/enterprise#128943 TaskId-6413050
The point-of-sale hamburger menu now opens as a dialog instead of a dropdown, making buttons larger and easier to tap. This improves day-to-day usability on touchscreen devices across standard POS, employee POS, restaurant, and self-order flows.
Original PR description
*pos_hr, pos_restaurant, pos_self_order In this PR we've changed the layout of the hamburger menu buttons so they're more easily clickable on devices. We've switched the dropdown menu with a dialog. task-6253998 Enterprise https://github.com/odoo/enterprise/pull/118961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Bank statements can now be created in draft and explicitly posted when ready, giving accounting teams more control before finalization. The update also protects journals that require secure sequencing by preventing incompatible draft statements or journal type changes once hashed statements exist.
Original PR description
- Add `is_statement_posted` field: Introduced to support a "draft" state when creating a statement directly from the form view. - Add Post/Draft Actions: Added `action_post` and `action_draft` for statements. Resetting to draft (`action_draft`) will also trigger move hashing if required. task-5170039 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Italian electronic invoicing form now narrows the document type list based on the kind of accounting document being created. This makes it easier for users to choose the correct option quickly and reduces confusion during invoice entry.
Original PR description
In IT account move form view, add a filter on the document type field to display only possible document type for the move type. This should help users to find the right type faster and reduce confusion Task [link](https://www.odoo.com/odoo/project.task/6152691) task-6152691
Belgian payroll declarations are now tied directly to the payslips they report, making it easier to identify which payroll records need review when corrections are required. The reporting process also avoids reprocessing already reported payslips and uses a more reliable way to detect when corrections are needed.
Original PR description
- change the dmfa linking to be with its related payslips instead of employees which makes it easier in case of correction to track which payslips need checking - generalize dmfa correction to include web reports as well - only payslips that haven't been reported will be fetched instead of regenerating the report with all the month's payslips - the mechanism to detect the need of a correction is now more robust using a boolean that gets updated when a payslip is moved to done instead of the dates comparison previously used task-6326405
The point-of-sale hamburger menu buttons have been updated to match the newer modal layout. This creates a more consistent cashier experience across enterprise POS, IoT, and country-specific POS flows.
Original PR description
Following a change of layout for the hamburger menu buttons we've adapted these buttons to fit with the rest of the buttons in the modal. task-6253998 Community https://github.com/odoo/odoo/pull/267462
Payroll settings for Belgian localization now follow the company selected by the user. When switching companies from the payroll settings screen, users are redirected to the selected company’s settings list, reducing confusion and the risk of editing the wrong company’s configuration.
Original PR description
Currently, on Payroll config settings list and form view when we switch the company, We're still on the initially selected compan settings version. This behavior could lead to confusion and users have chance editing field that not belong to the company they switched. This PR expected If the user changes company while on the payroll setting version form or list view, they should be redirected to the newly selected company's setting version list view. How to access the view - Settings -> Payroll -> Configure (Belgian Localization section) task-6478413
This update refines the VoIP softphone experience with clearer icons, better button feedback, improved dropdown behavior, and more consistent spacing and alerts. These changes help users better understand call actions, settings, and activity context while reducing small visual issues that could cause confusion.
Original PR description
*: voip_hr_recruitment, voip_sale_subscription ### Update UI icons This PR updates several UI icons to improve consistency across actions and activity, while making them more relevant and easier to…
*: voip_hr_recruitment, voip_sale_subscription ### Update UI icons This PR updates several UI icons to improve consistency across actions and activity, while making them more relevant and easier to understand. ### Add active state to action buttons Prior to this PR, action buttons that opened dropdowns had no active state, which could lead to confusion as users might not know which button had opened the dropdown. This PR fixes the issue by adding a proper active state whenever a dropdown is open. ### Adapt top info message layout in softphone This PR revises the layout of the info message displayed at the top of the softphone to make it more consistent with other info alerts. ### Show correctly softphone navbar border Prior to this PR, the top border of the softphone navbar could disappear when scrolling. This PR ensures that the navbar border remains visible at all times. ### Review user settings dropdown items Prior to this PR, the "Do not disturb" dropdown items used custom utility classes that broke the hover state. This PR ensures that the dropdown correctly uses the standard dropdown item component. ### Add tooltip to many2one_reference_icon_field This PR adds a tooltip displaying the activity's "display_name" when hovering the `many2one_reference_icon_field` icon, helping users understand what the icon represents. ### Update o-voip-InCallView-pad spacing The current spacing in `o-voip-InCallView-pad` was initially designed to accommodate two additional action buttons that have not yet been implemented. For now, this creates an inconsistent spacing that can give the impression of a bug. This PR updates the spacing to better align with the action buttons currently available. task-5864994 --- 💡 _Preview screenshots are available in the task pad._ --- Requires: - https://github.com/odoo/odoo/pull/285621
Belgian payroll now includes certain unpaid but legally assimilated absences when calculating holiday pay tax provisions. When an employee leaves, the accrued yearly provision is cleared on the final payslip, improving payroll accuracy and preventing unreleased balances.
Original PR description
Before this commit, the holiday pay tax provision kept accruing every month but was never released, and it ignored the time off that is assimilated for the double holiday pay when it was not paid on the payslip. After this commit, the monthly provision base also covers assimilated but unpaid days (legal leave, public holidays, sickness, strike) so it keeps growing on those absences. On the employee last payslip the whole provision accrued during the year is emptied in a single negative line. taskid-6416109
Shop Floor users can now edit existing work instructions without starting from a blank editor, making small updates faster and less error-prone. The document viewer also works correctly for attached instructions, and newly captured pictures are added consistently to the instruction text without replacing worksheet documents.
Original PR description
[IMP] mrp_workorder: pre-fill the instruction when updating a step In the Shop Floor, "Update Instructions" opened the editor empty. A user making a small adjustment had to retype the whole…
[IMP] mrp_workorder: pre-fill the instruction when updating a step
In the Shop Floor, "Update Instructions" opened the editor empty.
A user making a small adjustment had to retype the whole instruction
again from scratch, without seeing what they were replacing.
The wizard is now pre-filled with the step's current instruction.
task-6459280
---
[FIX] mrp_workorder: fix the document viewer on Shop Floor
Opening the instructions of a step holding a document raised
"this.props.value.startsWith is not a function" and left the dialog empty.
Since https://github.com/odoo/odoo/commit/23a7d8cc5b1d2f38eaee35a4f6729fe128c1b62b , reading a
binary field over rpc no longer returns a base64 string but a dictionary
holding its content, name and size.
Adapt to read the content out of that dictionary.
---
[IMP] mrp_workorder{,_plm}: append new picture to the instruction
"Set a New Picture" wrote the picture to worksheet_document, the step's
document attachment, and stripped the inline images out of the note.
But that field is presented as a PDF worksheet everywhere else.
mrp_workorder_plm did the opposite on the ECO's BoM step: it added the
picture to the note and cleared the attachment. The same action led to
inconsistent results.
The picture is now appended at the end of the instruction, on the work
order step and on the ECO, and the worksheet_document is left untouched.
task-6459280Payroll-related fields on time types are now updated automatically when payroll data changes. This keeps absence and work-entry configurations consistent across multiple local payroll packages, reducing manual upkeep and payroll setup errors.
Original PR description
…roll data update Task: 6410286
Bank statement handling is improved so users can choose relevant reconciliation models directly during the reconciliation and posting flow. This makes cash and bank journal processing more guided, while ensuring required hashing and reconciliation steps happen at the right time.
Original PR description
[IMP] account_accountant: improve statement flow and reconciliation models This commit improves the bank statement lifecycle, reconciliation model selection, and journal hashing behavior: -Allow…
[IMP] account_accountant: improve statement flow and reconciliation models This commit improves the bank statement lifecycle, reconciliation model selection, and journal hashing behavior: -Allow selecting from the top 5 reconciliation models (prioritizing journal-specific models, then falling back to global ones) directly in the bank reconciliation widget. Selecting a model triggers it on creation. - Hashing: If a statement is created in a hashed journal, force the reconciliation of the remaining unreconciled entries and hash the moves. - Statements accessed from the base view now start in "draft" state (including their lines). Users can select a reconciliation model to apply upon posting. Hashing is also deferred to the posting step. - Adjust the `from_bank_reco` context key to ensure it is passed correctly, resolving an issue introduced by the removal of `onWillRender` task-5170039 [IMP] l10n_be_reports: Adding reco models for cash journals When creating a cash journal, we will first create new reco models. If the reco models already exist then we will just add the new journal to the match_journal_ids. task-5170039
Belgian payroll now requires companies to provide insurance details when they have employees and holiday pay fund details when they have workers. This helps ensure payslips and individual accounts include legally required information and warns businesses when required payroll company data is missing.
Original PR description
Purpose: Comply with Belgian regulation regarding holiday pay fund and insurance information that must be present on payslips and individual accounts. Implementation: - Insurance information is mandatory as soon as there are employees. Hence, enforced on the frontend. - Holiday pay fund is mandatory only when there are workers (see is_worker()). Hence, enforced on the frontend. - Modify existing warning for payroll company data to also track holiday pay fund & insurance fields. task: 6512348
Belgian payroll declarations now calculate research and development time more accurately across additional payslip types, including double holiday pay, 13th month, and termination payments. This helps ensure payroll reporting reflects the correct eligible R&D percentage for each employee period.
Original PR description
now we support more payslip structures in 274.XX ex: (DHP, 13Months, termination) we need to compute rd_percentage correctly this commit adds a method to compute the correct value, based on related employee versions. Task#6394245
Belgian payroll now rounds train travel distances down to the nearest available reimbursement bracket. This helps ensure reimbursements remain favorable to employees when exact travel brackets are not present in the train table.
Original PR description
In order to keep the train reimbursement in favor of the employees, all the train travel brackets have been floored to the nearest threshold available in the train table. Task: 6485650
VoIP administrators can now submit a request when no suitable phone numbers are immediately available. The system tracks these advanced orders over time and automatically creates or assigns the number once the provider fulfills the request, reducing manual follow-up and improving number availability.
Original PR description
```mermaid
sequenceDiagram
actor Admin
participant E as Enterprise VoIP
participant I as IAP Phone Service
participant T as Telnyx
Admin->>E: Search available numbers
E->>I: Search request
I->>T: Search inventory
T-->>Admin: No numbers
Admin->>E: Ask us / Submit Request
E->>I: Create advanced order + request UUID
I->>T: POST /advanced_orders
I-->>E: Accepted, no charge
Note over I,T: May remain pending for days
T-->>I: advanced_order.status_update = ordered
I->>T: Read generated standard Number Orders
I->>T: Fetch current monthly price
I->>I: Adopt standard orders + reserve billing
I->>T: Resolve/configure actual phone resources
I-->>E: Signed normal phone-number status events
E->>E: Create/reuse DID and assign requester
```
[Task-6529404](https://www.odoo.com/odoo/project.task/6529404)
IAP: https://github.com/odoo/iap-apps/pull/1842Self-order table sessions now pass the right order identifier through the preparation display flow. This helps keep QR-code-based table orders linked to the correct session, supporting a smoother restaurant ordering experience.
Original PR description
Add order_uuid parameters into pos_self_order_preparation_display controllers task-4934385 see https://github.com/odoo/odoo/pull/222152