Daily updates from Odoo
Tuesday, July 14, 2026
62 changes · master
New functionality added to Odoo
Odoo can now connect to TikTok Shop to import orders from multiple shops and match them to existing products using TikTok SKU or item references. This helps businesses manage TikTok sales in Odoo, including seller-fulfilled orders, without manual order entry.
Original PR description
- Import orders from multiple shops - Orders are matched with Odoo products based on their internal reference (item_id or SKU ID in TikTok Shop) - Support for Fulfillment by Seller (FBS) Task ID: 3690836 Forward-Port-Of: odoo/enterprise#95738
Enhancements to existing features
Adds warnings to help Belgian payroll teams identify ONSS payment issues when preparing DMFA declarations. This reduces the risk of missed or incorrect social security payments and improves visibility directly in the payroll workflow.
Original PR description
task-id: 6242053
Belgian payroll now includes a warning when an employee worker code needs attention. This helps payroll teams spot missing or incorrect worker-code information earlier, reducing the risk of payroll reporting issues.
Original PR description
task-6365107
Payroll users can now search rule parameters using the parameter value, not just the name or code. This makes it easier to find the right payroll setting when users know the amount or value, including older stored values.
Original PR description
Users often know the exact value of a payroll parameter but not its name or code. This adds a search field on the rule parameter search view targeting the related values, enabling lookups across both current and old values. Task: 6365318
Payroll account setup now uses stable account references instead of account code patterns across many country-specific payroll modules. This makes payroll configuration more reliable for businesses with different chart of accounts structures and reduces setup warnings or failures.
Original PR description
{*} = {ae, au, bd, be, ch, eg, hk, id, in, iq, jo, ke, kw, lt, lu, ma, mx, my, nl, om, ph, pk, ro, sa, sk, tr, us} Following the core architecture change to standard payroll account configuration,…
{*} = {ae, au, bd, be, ch, eg, hk, id, in, iq, jo, ke, kw, lt, lu, ma, mx, my, nl, om, ph, pk, ro, sa, sk, tr, us}
Following the core architecture change to standard payroll account configuration, this refactors the account setup scripts across multiple localizations to migrate entirely away from raw account codes.
Previously, the payroll engine matched accounts dynamically via SQL 'LIKE' prefix matching on hardcoded strings (such as '6110'). This logic was structurally fragile: standard chart of accounts (CoA) codes can vary between businesses, are completely optional in certain jurisdictions (like the US), and frequently shift prefix lengths or masking structures between different localization templates.
By switching the logic to leverage distinct XML IDs via the new 'account_refs' parameter, the system now binds salary rules to explicit, unchanging database templates. This guarantees a safe 1:1 relationship, eliminates edge-case log warnings regarding missing accounts during template loading, and ensures configuration scripts run successfully across disparate localization structures.
All occurrences of the obsolete 'account_codes' parameter have consequently been dropped from these modules.
task-6043990Belgian payroll users can now generate a certificate of employment directly from an employee’s end-of-collaboration area. When electronic signing and document management are installed, the process also prepares a signing request, helping HR handle departures more efficiently.
Original PR description
When an employee is leaving, the employer should hand out a certificate of employment.
The certificate is genereate in the chatter if only l10n_be_hr_payroll is installed.
If sign and documents installed, a sign template and request is also created.
- In l10n_be_hr_payroll
- Add a button in employee "End of collaboration" tab.
- Add new action `action_report_employment_certificate`.
- Add 2 new templates `l10n_be_hr_payroll.employment_certificate` and `l10n_be_hr_payroll.employment_certificate_base` for translation.
- In a new bridge l10n_be_hr_payroll_sign
- Override action_report_employment_certificate to add sign feature.
- Inherit from `l10n_be_hr_payroll.employment_certificate` to add a flag div for the sign item.
Task: 6314717Several apps were updated to use the newer Material Symbols icon style instead of the older FontAwesome setup. This keeps icons displaying correctly across screens such as appointments, documents, knowledge, rooms, sign, studio, website appointments, rentals, and live chat after the platform-wide icon change.
Original PR description
This is the minimal migration required for odoo/odoo#273606 to work. task-5901783
The AI module now avoids using a Google embedding model that is scheduled for deprecation. Existing AI data created with deprecated embedding models will be automatically refreshed, helping keep AI-powered features reliable without manual cleanup.
Original PR description
The model gemini-embedding-001 will be deprecated soon, so this commit is: - Deprecating that model. - Introducing an autovacuum to recompute embeddings that were done using embedding models that have been deprecated. task-6004597 Forward-Port-Of: odoo/enterprise#124095
Full-week payroll calendars for several localizations are now provided as demo examples instead of standard setup data to align with new calendar rules. Hong Kong company defaults are adjusted so new companies still get an equivalent working calendar where needed.
Original PR description
In odoo/odoo#267961, we are disallowing the use of time types linked to a country on a resource calendar without a company. This commit aims at moving some calendars that had such time types from the data to demo. task-6298866
Spreadsheet side panels now use Odoo's standard date picker for calendar fields. This makes choosing dates in conditional formatting and data validation more consistent and easier for users.
Original PR description
DateTimePickerPopover from Odoo is now used in the CalendarButton component of spreadsheet (CF and DV side panels) Task: 5395190
Belgian payroll can now calculate employee seniority using the start date of a future contract version instead of today. This helps payroll teams preview future payroll situations more accurately when preparing upcoming employee changes.
Original PR description
In this commit, it will be possible to compute seniority in future versions. When the version.date_start > today, we calculate the seniority until version.date_start instead of today (future version case). task-6375077
Eco voucher spreadsheet reports can now be generated in English and Dutch in addition to French, based on the user's language settings. The report layout is also improved with centered text, making the exported file easier to read and share.
Original PR description
Previously eco vouchers .xlsx report was only supported in French. This task adds English and Dutch according to the user's configuration. Additionally, text is aligned to the center task-6340788
Belgian payroll now automatically creates approved paid time off allocations for eligible employees when public holidays are added. New eligible employees also receive allocations for existing public holidays, reducing manual HR work and helping ensure consistent compensation handling.
Original PR description
In this commit, we automated the public holiday allocation. When a public holiday is created, each eligible employee (active and worker_code is set) will got a validated allocation automatically. Also, when a new employee is created, he will receive allocations for existing public holidays. The allocation date_from will be the first day of the public holiday date, and the date_to will be the last day of the current year. task-5480426
The Mexican electronic invoicing report template was adjusted to stay compatible with the updated main invoice template. This helps ensure localized invoice documents continue to render correctly after the template change.
Original PR description
Adjusting Enterprise l10n templates to work with updated main template. task-6152210
The Peppol settings section now appears at the top of the relevant settings page. This makes it easier for users to find and configure Peppol-related options without scrolling through other settings first.
Original PR description
Peppol block was moved to the top of the page task-5977363
Gantt views now use a clearer popover structure so details shown in popups are loaded only when needed. This keeps view definitions tidier and can reduce unnecessary data loading across scheduling, planning, project, maintenance, events, rentals, rooms, and related workflows.
Original PR description
This commit is a followup of [1] which revamped the popover API in gantt archs. The introduced API had a flaw though: one couldn't distinguish, in the arch, fields that were there because they were…
This commit is a followup of [1] which revamped the popover API in gantt archs. The introduced API had a flaw though: one couldn't distinguish, in the arch, fields that were there because they were used in the template, or because they were necessary for another reason. This impacts the how and when they are fetched: popover fields are fetched when we open the popover, for that record only. The other fields are fetched when opening the view, for all records matching the domain. The current API is a bit messy. We thus introduce a new `popover` node which allows to wrap fields used in the popover. It also offers the perfect spot to indicate the `card_id` to use as popover-body, instead of the root node. This implies another small change: that card isn't inlined in the arch anymore (which makes the resulting arch less messy), but is fetched the first time we open a popover. This API change follows what is done for the calendar [2] and map [3] views. [1] https://github.com/odoo/enterprise/pull/114328 [2] https://github.com/odoo/odoo/pull/272713 [3] https://github.com/odoo/enterprise/pull/122040 Task~6358615
Financial reports can now be calculated in smaller time-based pieces and combined while still matching the result of a full-period calculation. This improves support for report snapshots and also fixes an issue where report lines could stay expanded even after they no longer had child lines.
Original PR description
In order to support snapshots, the domain engine must be composable. This means data must be computed in separate partitions, then merged to give the exact same result as a full period computation. The `sum_if_pos` and `sum_if_neg` formulas break this composability. Therefore, we are dropping these subformulas, replacing them with the `if_above` and `if_below` aggregations. task-6235251
Dark mode color choices in the color list have been adjusted to make them clearer and more consistent. This helps users better distinguish colors while keeping the interface aligned with recent visual updates.
Original PR description
this commit applies some small changes to the colorlist dark mode colors for clarity purpose and fit with the new color added in https://github.com/odoo/odoo/pull/189689 task-4384898
Calendar popovers in several Odoo apps now use the updated card-based layout, keeping scheduling details consistent after the shared calendar interface was reworked. This improves the visual consistency of planning, field service, knowledge, VoIP, and related scheduling views without changing core business workflows.
Original PR description
This PR adapts the calendar extensions, especially those that customize the CalendarCommonPopover, which has been massively reworked. Task~5262907
The Planning mobile resource view now shows an employee photo for people and a tool icon for material resources. This makes it easier for users to quickly identify the right resource while planning on a mobile device.
Original PR description
planning mobile view improvement - displayed picture of the employee if resource type is human on the resource kanban view. - displayed tool icon if resource type is material on the resource kanban view task-3770245
Updates improve how users work with documents and comments in the Knowledge app. This should make collaboration smoother and more reliable when reviewing or discussing shared content.
Spreadsheet screen display and scrolling behavior were reorganized to use a shared store, making the experience more consistent across comments, lists, pivots, history, and sales field sync features. This is mostly an internal improvement that should help maintain reliability while preserving expected user behavior.
Original PR description
The `SheetViewPlugin` and the viewport handling was moved into a store rather than a plugin. This commit make the necessary changes to odoo. Task: [6314784](https://www.odoo.com/web#id=6314784&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The salary configurator and employee offer screens now present company car options in a simpler, more user-friendly way. This makes it easier for Belgian employees and HR teams to understand and select fleet-related benefits during salary package setup.
Original PR description
-Introducing some UX changes in salary configurator and employee's offer view to simplify car options.
This update makes notifications across several Odoo apps non-sticky, so they no longer remain on screen until manually dismissed. It improves day-to-day usability by reducing interruptions and keeping work screens cleaner for users.
Map popovers can now use the same flexible card-style layout system used elsewhere in Odoo, making their content easier to structure and customize. Existing map popovers continue to work for now, while related map view extensions and tests were updated to support the new approach.
Original PR description
*: web_studio,stock_enterprise
This PR if a followup of [1] and introduces the ability to use the card
API to declare map popover. The map archs now expects a
```xml
<popover>
<templates>
</templates>
</popover>
```
node which can declare `popover-header`, `popover-body` and
`popover-footer` templates. Those templates follow the same API as
cards (kanban). Moreover, a `card_id` attribute can be set on the
`popover` node to declare the card view to use as popover body.
Note: the previous API keeps working (temporarily).
This PR also adapts the various JS extensions of the map view.
[1]: https://github.com/odoo/odoo/pull/260098
task-6310630Payment token records for SEPA Direct Debit now show the linked mandate directly on the form. This makes it easier for staff to verify the authorization behind a saved payment method without navigating elsewhere.
Original PR description
Add sdd_mandate_id on the payment token form. See https://github.com/odoo/odoo/pull/268220 task-6251341
An unused repair-related view and action were removed from the planning field service repair module. This cleans up the application internals and reduces maintenance overhead without changing the visible user experience.
Original PR description
Currently, action_open_reference_no_repair is not called anywhere, so the view remains unused. Therefore, this commit removes the unused view.
Payslip lines now show an information tooltip explaining how each amount was calculated, helping payroll users answer calculation questions directly in the payslip. Payroll teams can configure explanation text on salary rules, with an initial Belgian payroll example included.
Original PR description
Each salary line is the result of a computation. To help the end user understand how the amounts are derived and lower the number of "how is this computed?" questions, an info icon is now displayed on hover on the backend of the payslip line. This commit introduces the framework to support this: - Adds an `explanation_template` text field on the salary rule to configure the logic. - Safely evaluates the template during the payslip computation. - Introduces an `explanation_tooltip` widget to display the translated result on hover in the UI. - Implements a first test rule as an example in the Belgian payroll. Task Id: 6268188
Helpdesk teams can now create invoices for several solved tickets at once from the action menu. This reduces manual work and speeds up billing for completed support services.
Original PR description
Before this PR : - No available method to create invoices for multiple solved tickets in batch. After this PR: - A 'Create Invoices' action is added in the action menu to invoice multiple tickets in batch. Task id: 4243781
Uzbekistan financial reports now include Russian translations alongside Uzbek. This helps companies operating in Uzbekistan serve Russian-speaking users and improves adoption in the local market.
Original PR description
Uzbekistan's business environment requires Russian in addition to the official Uzbek language to ensure adoption. While localizations typically activate only statutory languages, Central Asian market realities justify this exception. task-6229114 -- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#122901 Forward-Port-Of: odoo/enterprise#120250
This update adds support for temporary economic unemployment leave handling for Belgian worker employees. It helps payroll teams apply the correct leave codes for workers versus other employee types, improving payroll compliance and reducing manual correction risks.
Original PR description
[IMP] l10n_be: economic unemployement for workers
adding new work entry type Temporary economic unemployment for employee
. add a constraint to hr.leave that if employee is worker then he should use LEAVE6665 else LEAVE13720
task - 6358912Product availability checks for rentals and subscriptions are now handled through one shared purchase rule instead of several separate checks. This makes product filtering and add-to-cart behavior more consistent and easier to maintain, reducing the risk of mismatched storefront behavior.
Original PR description
Replace the ad-hoc _website_show_quick_add / _is_add_to_cart_allowed / _can_be_added_to_current_cart / _website_can_be_added overrides with a single override of _is_purchasable() in both modules, removing website_sale_subscription/models/product_product.py entirely. Community PR: - https://github.com/odoo/odoo/pull/252296 task-5491803
Payroll users can now access Import and Export options directly from the time off Gantt view in the pay run time step. This removes the need to switch to list or kanban views when moving time off records in or out of Odoo.
Original PR description
The pay run "time" step shows time off (hr.leave) records in a gantt, list and kanban view. The standard "Import" and "Export" cog menu entries only show up on list/kanban views, so they were missing from the gantt, even though they are available on the very same records in the list. Surface both entries on the hr.leave gantt as well: - the base "Import" and "Export" cog items are reused, scoped to the hr.leave gantt via their isDisplayed; - since gantt controllers do not wire the direct xlsx export (only list and kanban do), install useExportRecords on the gantt controller, backed by a minimal list-like root built from the gantt search params so no state has to be added to the model. task-6348558
HR teams can now set Christmas bonus day counts for each employee version instead of using one company-wide value. This better supports Mexican payroll cases where bonus entitlements differ by agreement, seniority, or bargaining terms, and ensures related payroll calculations use the employee-specific value.
Original PR description
Previously, the Christmas bonus days parameter (l10n_mx_christmas_bonus) was configured at the company settings level, imposing a uniform value across all employees. In Mexico, Christmas bonus entitlements often vary based on individual negotiations, seniority, or collective bargaining agreements. Moving this parameter to the employee version level allows HR managers to specify custom bonus day counts per individual **what:** - Added the l10n_mx_christmas_bonus float field to the employee versioning model with a default value of 15.0. - Updated the XML view to expose the field within the version context of the employee form. - Refactored the calculation logic inside the BASIC (Basic Christmas Bonus) and PROVISIONS_CHRISTMAS_BONUS salary rules to retrieve the bonus days dynamically from the active employee version. - Updated the l10n_mx_integration_factor processing logic to respect the version-specific value. task-6371803
Belgian payroll now recognizes three additional leave types for salary processing, declarations, and payslip workflows. This helps ensure payroll treatment and reporting align with Belgian leave rules, including correct handling of reorganization measures for eligible leave types.
Original PR description
- Add LEAVE14704, LEAVE14708, and LEAVE14713 to the relevant salary structures, DMFA calculations, and payslip workflows. - Map salary categories and DMFA configurations for the new leaves following the existing MEDIC01 baseline. - Configure LEAVE14704 (palliative care) and LEAVE14708 (informal carer) to open reorganization measures, while explicitly excluding LEAVE14713 (time credit not equated) from triggering them. Task: 6361609
VoIP softphone contact lists now show more relevant people first when searching, such as internal colleagues during transfers and recently called contacts in other searches. The update also reduces confusing gaps, scrolling issues, and misleading “more results” counts, making it easier to find the right contact quickly.
Original PR description
Review the order contacts are listed in the softphone, trying to show the most meaningful ones first, and fix a few issues along the way. [FIX] voip: mitigate loading/scrolling softphone bugs The…
Review the order contacts are listed in the softphone, trying to show the most meaningful ones first, and fix a few issues along the way.
[FIX] voip: mitigate loading/scrolling softphone bugs
The VoIP softphone basically loads contact data in two cases: when
browsing/searching for contacts and when scrolling a contact list to
browse more. The way it works is currently performant rpc-wise... but
very wrong: each time a contact is loaded, it ends up in the client
Store and when the user later browses/searches for contacts, that Store
is used before allowing to "browse more" by scrolling.
This leads to many bug variants, like this one:
- Have a "long" (e.g. 50) list of contacts
- Search for the contact name "Z", the last one
- You find maybe 10, likely at the end, then remove the search
=> You now see 13+X contacts, 13 first of the DB alphabetically then X
"Z" loaded previously. It's already a visual bug: you see a lot of
missing contacts between the 13 first and "Z".
- Scroll
=> Contacts appears only once you reach the last "Z" but they might
appear at the very top (e.g. a "B" not yet loaded).
Now another bug:
- Have a "long" list of contacts, including 15 with last name "Smith"
- Open the contacts list (e.g. transfer view), type "Smith"
=> You see 13 Smith, good
- Try to scroll to load the last 2
=> You probably can't... because you already loaded more than 15
contacts just by opening the contact list
... there are many variants of this bug. Basically, with or without
search, you see a list of contacts with "gaps" and you can't expect to
be able to find all contacts (matching a search or not) by scrolling.
The only certainty you have is that if you enter the *exact* name of a
contact, you will find it (if there are no more than 13 with the same
exact full name).
This would require a deeper VoIP changes to fix properly keeping good
perfs, which is not the focus at the moment. This commit however tries
to mitigate the issue when scrolling a list with a new search.
Note that the following commits kinda worsen this mitigated issue, but not by much.
[IMP] voip: show internal users first in transfer view while searching
The softphone displays searched contacts ordered alphabetically. This
commit now also first display internal users of the database, only when
a search is performed, only while searching for a contact to which a
call has to be transferred. Indeed, when transferring, it is likely you
want to transfer to one of your colleague, and after a 2-3 letters
search, it should be enough for your colleague to be nearly alone at the
top, while searching for "James" could lead to 100 "James" regrouping
all the contacts your company is dealing with.
[IMP] voip: show 3 most recently called contacts first when searching
The parent commit introduced transfer search sorting that puts internal
users first, as those are the most likely people you want to transfer a
call to.
With a similar idea in mind, this commit puts the 3 user's most recently
called matching contacts first in the other contact search contexts.
[IMP] voip: review keypad suggestion "more" button label
The keypad fetches 30 contacts once a search is performed. It then
shows only one and shows a "more" button indicating the remaining
amount. In case 30 contacts were fetched (matching the search), it
showed "29 others"... although there might be more unloaded in the
database.
We now show 1, 2, 3, ..., 30 "others" if that is the exact amount in
the database. Otherwise we show the amount we already have loaded client
side, minus 1, with a "+". E.g. if 75 were loaded previously, matching
the search, we show 1 suggestion + "73+ others" as button, knowing there
could be more than 75.
To achieve this, we load 32 contacts at the first search, instead of 30:
1 suggestion + a potential exact "30 others" + 1 to show "30+" if needed
[IMP] voip: improve consistency of softphone interactions
The softphone mostly consists of "tab entries" which can be opened or
scrolled through. This commit makes it tab entries are closed and the
scroll reset consistently.
For example: if you search for a contact, open its entry, call it then
come back later to the contact entry, it will be closed instead of still
opened. The scroll might also have jumped to the contact entry that was
previously opened... now each search properly shows the tab entries from
the start.
task-6326451This update improves the payroll user experience by refining payroll batch handling and Belgian payroll work entry type views. These changes help HR teams work more smoothly and reduce friction in day-to-day payroll administration.
Original PR description
task-id: 6360832
The Payroll employee type screens were adjusted to make them easier to use and more consistent, including related Belgian payroll views. This helps HR and payroll teams manage employee classifications with less friction and clearer navigation.
Original PR description
task-6357922
Obox device forms now include a Test button so users can quickly verify printers, scales, and cameras from the device page. Printer testing now lets users choose the print format, making setup and troubleshooting easier.
Original PR description
This commit adds a Test button to the Obox device form, similar to the IoT device form. It is supported for all three device types (printer, scale, camera). For printers, the user must select which type of test print to perform (PDF, receipt, ZPL). task-6332378
Resolved issues and error corrections
Belgian payroll DMFA reports now only include contribution entries that actually appear on the employee's validated payslips for the quarter. This prevents incorrect contribution codes from being reported, improving payroll declaration accuracy and reducing manual correction work.
Original PR description
Steps to reproduce: Setup an employee, then compute and validate 3 months of payslips to close a calendar quarter, then generate the quarterly DMFA report. Got: Contribution entries generated for codes 255, 256, 809, 810, 831, 856, and 859 even though these lines are not on the employee's payslips. Expected: Only real contributions from the quarter's payslips. Task 6352241
Corrects where initialization is applied in the Spanish reports module after a previous change placed it on the wrong field. This helps ensure the related reporting data is prepared correctly without changing user workflows.
Original PR description
https://github.com/odoo/enterprise/pull/118398/ moved the initialization code on the wrong field. Moving it where needed.
Dimona status updates now only apply to companies registered in Belgium. This prevents non-Belgian companies from seeing irrelevant payroll messages when contract start dates are set.
Original PR description
The Dimona status "To Do" appeared in the chatter for non-Belgian companies when setting a contract start date. This commit restricts the Dimona field updates and automated action hooks to companies with the 'BE' country code. task-6344781
The Belgian payroll warning for part-time employees now displays minimum wage amounts with the intended number of decimal places. This makes the warning easier to read and avoids confusion caused by overly long numbers.
Original PR description
For part-time employees, the minimum wage in the warning message shows too many numbers after the virgule. This fixes the message to display exactly two decimals. task-6375081
This update adds the Belgian CODA extension number entry to the translation configuration. It helps ensure this localization component can be handled properly by the translation system, with no expected direct impact on daily users.
Original PR description
This commit will add l10n_be_coda_extension_number in the weblate json file. no task id Forward-Port-Of: odoo/enterprise#124053
This fix prevents Obox camera checks from breaking when the IoT module is installed. It also avoids showing an IoT action when no IoT device is configured, reducing confusion for users during quality checks.
Original PR description
Steps to reproduce: - Install `obox_quality_control` but do not install `iot`. - Configure a quality check to take a picture with an Obox camera. - Validate a receipt an confirm the camera works as expected. - Now install the `iot` module, and try to take a picture again. Expected behaviour: The camera still works as expected. Actual behaviour: There is a 'Camera not found' error. This issue is caused by both the Obox and IoT quality modules adding an `identifier` field to the quality control wizard. The fix is simply to use a different name for the Obox field. In addition, we now hide the IoT button in the wizard if the IoT device is not set. task-6329066
Unanswered outgoing VoIP calls, such as rejected or cancelled calls, now clean up the automatic follow-up activity they created. This keeps record chatter cleaner and prevents users from seeing stale call tasks that no longer need action.
Original PR description
…calls When placing an outgoing call from a phone field on a record, an automated activity is created in the chatter and expected to be mark as done and archived after call ends. If the call is not answered (rejected or aborted), the activity stays in the chatter, which is not what we want. Add a `_cleanup_automated_activity` helper that deletes automated activities linked to calls reaching a non-ongoing terminal state. Also remove the explicit `automated=False` override in `_create_call_activity` so these activities correctly default to `automated=True`.
This fix prevents an internal translation marker from being sent to the browser when views are loaded. It keeps the data delivered to users cleaner and avoids unnecessary or confusing technical details being exposed in the client interface.
Original PR description
Before this commit the directive "t-translation" was transmitted to the client. This made little sense as: - the `get_view` method already yields the translated version of a View - views of type other than qweb are not Qweb, so t-translation is not meaningful when fetching them - views are never used as is. They are parsed or compiled, so chances are OWL (which can deal with t-translation) never sees the colour of that attribute After this commit, t-translation directive are not sent to the client when asked via get_view
Users can no longer save an IoT report printer configuration without choosing an actual printer device. This prevents failed print jobs later by catching incomplete setup during configuration.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/273723 Before this commit, you could configure an IoT report printer but not select any IoT printer device, which would cause printing to fail later on. After this commit, the field is required so the user must select a printer device before saving. task-6333695 Forward-Port-Of: odoo/enterprise#122652
This fixes an internal Swiss payroll test so it still checks that employees without a private country trigger the expected warning. The change keeps automated payroll quality checks reliable after a related default-country behavior change.
Original PR description
The warnings test expects a warning to be generated on the payslip because the employee is missing a private country. However, the referenced change introduced a default value for the private country based on the active company. Because the field is no longer blank upon employee creation, the payroll engine no longer flags it as missing, causing the test to fail. See odoo/odoo#275579 task-6361855
Belgian payroll now uses the official daily Partena amount for private car reimbursements in CP 200 and CP 302 instead of estimating it from a monthly train subscription. This helps produce more accurate payslips for affected employees while preserving the previous calculation for other sectors or older periods.
Original PR description
Previously, the private car reimbursement for CP 200 and CP 302 was calculated by dividing a monthly train subscription price into a daily rate. This commit changes the logic to take the exact daily amount from Partena instead of converting a monthly price, while keeping the old train method for other sectors or past dates. Task-6357956
Users who are not linked to an employee can now create expenses from documents, as long as they have permission to create expenses for another employee. This removes an unnecessary blocker while keeping existing access controls in place.
Original PR description
Removes the constraint saying a user has to be linked to an employee to create an expense from a document. In this case, the user still needs the rights to create an expense for another employee. task-6237021 Forward-Port-Of: odoo/enterprise#123635 Forward-Port-Of: odoo/enterprise#118955
This fix updates tax-related modules so calculated values refresh correctly when draft or in-memory records are created. It helps prevent stale or missing external tax information in workflows that rely on Avatax or external tax integrations.
Original PR description
Now field dependencies of abstract models are resolved on the abstract model itself in order to trigger the recomputation of computed fields on new() records of abstract models. These changes are safe to apply independently of the ORM change, since dependencies that do exist on the concrete models are unaffected. Community PR: https://github.com/odoo/odoo/pull/275788.
This fixes an inconsistency in how the Hong Kong payroll rental field is configured between employee records and version records. The change helps prevent related automated test failures and improves reliability without changing day-to-day payroll workflows.
Original PR description
The readonly value inconsistency between l10n_hk_rental_id field in the employee's model and the one in the version's model was provoking some tests to fail. Related runbot error: https://runbot.odoo.com/odoo/error/241956 task-6306032 Forward-Port-Of: odoo/enterprise#120673
Belgian payroll structural deductions now use the correct contribution rate based on whether the person is classified as a worker or employee. This prevents deductions from being calculated with a zero rate when the default lookup does not find the right payroll contribution type.
Original PR description
For structural deduction computation, getting onns rates via `_get_onss_rates()` sometimes default to zero if no rate was found using the default contribution type. Now passing the appropriate contribution type depending on the version status (worker/employee). Task: 6313510
Fixed an issue where opening a Measure step in Shop Floor could fail because required dialog information was not passed correctly. This ensures operators can record measurements without interruption after the underlying component behavior changed.
Original PR description
Steps to reproduce: - Open Shop Floor - Create a Measure step - Click on the Measure Button - Encounter the error Upon further observation, it was noticed that the properties were not passed correctly to the MrpMeasureDialog component. This happened due to incorrect property definition in OWL 3, while with OWL 2 it was correct. Property definition was changed to comply with OWL 3. task-6345156 Forward-Port-Of: odoo/enterprise#122269
POS users can now access the Kitchen Display directly from the main dashboard without encountering an access error. This removes an unnecessary blocker and makes the dashboard entry point consistent with access from within the POS app.
Original PR description
**Description of the issue/feature this PR addresses:** When a POS user attempts to open the Kitchen Display app from the main dashboard, they are blocked by an Access Error, despite being able to…
**Description of the issue/feature this PR addresses:**
When a POS user attempts to open the Kitchen Display app from the main dashboard, they are blocked by an Access Error, despite being able to access the interface from within the POS app's sub-menu.
This occurs because the dashboard menu triggers a server action (`action_pos_preparation_display_kitchen_display`) to route the user. When a server action has no explicitly defined `group_ids`, Odoo's `_can_execute_action_on_records` method falls back to requiring `write` access on the underlying model (`pos.prep.display`) to execute the code. Since standard POS users do not have 'write' access to this model, the execution engine blocks the routing attempt.
This commit resolves the issue by explicitly appending the POS User group to the server action's `group_ids`.
opw-6305014
**Steps to reproduce:**
- As Mitchell Admin:
- Settings > Users & Companies > Users > Marc Demo > Access Rights > Sales > set POS to User
- As Marc Demo:
- Attempt to access Kitchen Display app > observe Access Error
- POS > Orders > Preparation Display > observe no error
**Current behavior before PR:**
- POS Users receive an Access Error when attempting to access the Kitchen Display app from the main dashboard
**Desired behavior after PR is merged:**
- No Access Error when POS Users access the Kitchen Display app
Forward-Port-Of: odoo/enterprise#122531
Forward-Port-Of: odoo/enterprise#121419Mexican payroll documents now correctly show holiday bonuses and their related tax in payslips and CFDI XML files. This prevents mismatches between payroll calculations and reported totals, improving accuracy for employees and compliance reporting.
Original PR description
Currently, the holiday bonus exemption is calculated correctly internally, but it is not displayed on the payslip PDF or the CFDI (XML) file because it lacks dedicated concepts. This causes amount…
Currently, the holiday bonus exemption is calculated correctly internally, but it is not displayed on the payslip PDF or the CFDI (XML) file because it lacks dedicated concepts. This causes amount discrepancies between the calculation and the totals reported. Error: For an employee with a 50,000 MXN monthly salary (pays 9,107.82 MXN ISR and 1,462.78 MXN IMSS). On their first anniversary, they receive a 5,000 MXN holiday bonus and pay 762.13 MXN ISR for it. The PDF and XML files show a perception total of 50,000 MXN and a deduction total of 10,570.60 MXN, completely ignoring the holiday bonus and its specific tax. In the PDF, the calculation is correct: 50,000.00 + 5,000.00 - 10,570.60 - 762.13 = 43,667.27 MXN. However, the XML net total reports: 50,000.00 - 10,570.60 = 39,429.40 MXN (ignoring the bonus amounts). Solution: Add a new salary rule and perception concept to properly separate and display the taxable and exempted amounts on the PDF and the CFDI. Add a new deduction concept to report the holiday bonus ISR. This ensures complete synchronization across the payslip, PDF, and XML. target: master task-6255412
The Analytic Items grid now keeps the same sectioned layout when users apply grouping options. This makes the view more predictable and easier to read, avoiding a confusing switch between flat and hierarchical rows.
Original PR description
Prior to this commit, the Analytic Items grid view exhibited inconsistent layout behavior. Applying a single custom group-by resulted in flat rows, while applying two or more group-bys (or using the default XML) triggered a sectioned hierarchy. This commit ensures a consistent UX by intercepting the grid metadata in `AnalyticLineGridModel.loadData`. If no section field is defined by the base model, the first grouping is now forcefully promoted to `sectionField`. Task-6321646
Code cleanup and technical improvements
This change makes an accounting test run in a consistent order by sorting test items by name. It helps reduce inconsistent test results and supports smoother maintenance without changing business features or user workflows.
Original PR description
Sort by the name of the test which gives a deterministic sorting order.
This update prepares several accounting-related screens for the next version of Odoo's web interface technology. It is an internal cleanup intended to preserve existing behavior while reducing migration risk for bank reconciliation, online payments, synchronization, and reporting features.
The VoIP calling feature now responds more reliably to microphone permission status changes. This helps avoid confusing call setup issues when browser permissions change, improving day-to-day usability for users who rely on internet calling.
Original PR description
task-6373278
This update adjusts how the Gantt view scrolls to the right date so it remains reliable with the newer interface framework. Users should see the same behavior, with reduced risk of layout or scrolling issues during rendering, resizing, or range changes.
Original PR description
`useLayoutEffect` is deprecated in OWL3. The remaining call (initial-scroll / focus-date scrolling) becomes `onMounted`+`onPatched`: a timing constraint, not a shim, since `focusDate` reads live post-patch DOM (`cellContainerRef.el.clientWidth`) before writing `scrollLeft`. A reactive `useEffect` fires before the DOM patch and would measure stale layout. Test coverage — these failed with the effect commented out and now pass: - @web_gantt/gantt_view_basics/ungrouped gantt rendering - @web_gantt/gantt_view_behavioral/resize a pill - @web_gantt/gantt_view_concurrency/concurrent range switches see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2624590/build/116553816