Daily updates from Odoo
Navigate
Branch
Friday, September 5, 2025
74 changes
Security fixes and vulnerability patches
Creating a user from an employee now gives the new account only minimal access rights instead of full administrator permissions. This reduces the risk of accidental over-permissioning and helps keep default access aligned with safer business practices.
Original PR description
Previously, when creating a user from an existing employee record (via the "Create User" button), the system would assign the new user full admin rights by default which is a security concern. This improvement introduces a method to assign minimal access rights to the user instead, ensuring appropriate and safe default permissions. Task: 4824894
New functionality added to Odoo
AI livechat agents can now collect customer contact details and create CRM leads when visitors ask for more information or request a follow-up. This helps sales teams capture opportunities directly from automated chat conversations, with better context and easier troubleshooting when AI tool actions fail.
Original PR description
Purpose: -------- This commit introduces 2 new bridge modules, ai_crm and ai_crm_livechat. The first module adds an AI topic that allows AI agents to create leads when the customer asks for more specific information about products, services, or wants to get contacted back. This topic comes with 2 tools: - the first allows to get the available lead parameters that the agent can chose from (currently teams and tags) - the second allows to create the lead, after having asked the customer's name, email and phone number. The second module adds this topic to the AI livechat agent (this agent is now a data record instead of a demo record). Leads can now be created by this agent when a customer chats with it. Task-5022760
Adds Lithuanian monthly tax and trade reporting support, including i.SAF, EC Sales List, VAT and Intrastat returns. This helps businesses in Lithuania prepare required government filings directly in Odoo, reducing manual reporting work.
Original PR description
Each month, users have to return the i.SAF. It's a simplified version of the SAFT, but for the taxes. They also have to return the EC Sales List and Intrastat So add returns for these 3. task-4893966
VoIP users can now record calls directly from the softphone experience. This helps businesses keep better call records for follow-up, quality review, and accountability.
Original PR description
Task-4417073
Belgian companies can now export annual statements in XBRL format for filing with the National Bank of Belgium. The update adds guided data entry for required filing details and can include payroll-related social balance sheet information when the payroll bridge module is installed.
Original PR description
This commit adds the ability to export annual reports in XBRL format to be able to file with NBB. XBRL button added in Annual Statements report for Belgian companies on the Belgian Annual Statements. The button opens a wizard for user input of required data needed by the XBRL export. New bridge module `l10n_be_reports_hr_payroll` added that depends on `l10n_be_reports` and `l10n_be_hr_payroll` and installed automatically when both are installed. The bridge module adds the social balance sheet data needed for the XBRL export. If the module is not installed, then the XBRL is generated without the social balance sheet information. The XBRL is generated from template files. Each XBRL model has a different template file. The XBRL model depends on the BS and PNL reports chosen in the Annual Statement reports (con or cap & abbr or full) and the type of the company (comp or assoc). Common tags are placed in a common template to avoid duplication. task-4866211
Enhancements to existing features
Kenya payroll now supports commuter and housing allowances, including housing calculated as either a fixed amount or a percentage of gross pay. The update also adjusts the December 2024 food allowance limit and simplifies payroll records by removing a duplicate employee PIN field and clarifying salary rule names.
Original PR description
We add a commuter and housing allowance. The housing allowance is either a fixed amount or a percentage of the gross amount. We also change the max food allowance rule parameter for December 2024. This also makes some fixes, such as removing the employee's pin, which is a duplicate of the KRA pin. Lastly, we reorder and rename some salary rules. Task: 4922304
Belgian EC sales list returns are now checked and regenerated more frequently, helping ensure late entries for recent months are included. A debug-only manual refresh option also lets authorized users regenerate returns from the kanban view when needed.
Original PR description
The cron to generate returns only occurs the 3rd of each month, and the EC sales list report in Belgium is only generated if some moves occurs during the period. This means that if you create a move of the previous month after the 3rd of the month, it will never re-generate the return of the previous month. We therefore improve the condition to regenerate if needed the ec sales list returns of Belgium of the last 3 months. The cron is also triggered every day. We also provide a button (visible only in debug mode) that triggers the re-generation of all returns on the kanban view. task-5039301
This update adjusts how time off and resource calendar entries are categorized so employees can take leave even when a day is also marked as a service or remote day. It helps scheduling, payroll, planning, appointments, helpdesk, maintenance, and rental workflows stay consistent with the new time-off behavior.
Original PR description
- change the time_type values to enable taking time_off while having a service day aka remote day
The Payroll menu now appears only for users who have both employee and contract-related access. This keeps payroll navigation hidden from people who only need employee contract access, reducing confusion and limiting visibility to the right audience.
Original PR description
as the contract menuitem is thier in the employees app it is not needed to have access to the payroll until you get access on the work entries. - Make the payroll menu appear only when a person has both contract and employee groups. Task: 4543411
The departure holiday attest wizard now shows only employees with a recorded departure reason, making the selection process clearer and less error-prone. Guidance about remuneration has been moved to the net amount help text, so payroll users can find the explanation directly where it is needed.
Original PR description
- Update wizard UX by limiting employees on those who have departure_reason set. - move the remuneration explination to the help of the net amount Task: 4582758
The Belgian payroll accounting test suite was updated to align with the newer public holiday model. This helps keep payroll validation reliable as holiday handling changes, reducing the risk of regressions in Belgian payroll accounting.
Original PR description
Task: 4791808
Customer accounting screens now make it easier to manage overdue balances by opening the follow-up report from the renamed Due button and adding a direct Send action. Button labels were clarified so users can better distinguish follow-up amounts from journal item details.
Original PR description
*: followup, report Current behavior before PR: By Default, There is not option to send followup report to the customer. The 'Customer Statement' smart button opens the customer statement report. The 'Overdue Invoices' opens list view of journal Entries. Desired behavior after PR is merged: - Added a new 'Send' button on the follow-up report to directly email partners. - Renamed 'Customer Statement' smart button in Customer view to 'Due', and now opens the Follow-up Report by default instead of Customer Statement. - Renamed 'Overdue Invoices' button in Accounting tab of Customer view to 'Journal Items' and now opens the Journal Items list view. Community PR: https://github.com/odoo/odoo/pull/223769 task-5026396 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now move spreadsheets to the trash directly from the control panel, making document cleanup faster and more consistent. The underlying delete and archive handling was also centralized so related document features can reuse the same behavior across modules.
Original PR description
This PR includes the following commits: [[REF] documents: inline delete dialog and archive logic now work as a service](https://github.com/odoo/enterprise/pull/91978/commits/560070371fdd382a9deb14ee79fd1deffa8d6f0b) [[IMP] documents_spreadsheet: move spreadsheet to trash from control panel](https://github.com/odoo/enterprise/pull/91978/commits/19c51dcf23b28c9538feac96dea885b36a49672a) Current behavior before PR: - Delete and archive logic was implemented as hooks, making it hard for other modules (e.g., documents_spreadsheet) to reuse. - Users could not directly move spreadsheets to trash from the control panel. Desired behavior after PR is merged: - Delete confirmation dialog is now handled inline in onDelete() for clarity. - Added moveToTrash in documentService for reuse across modules. - Navigation is handled automatically depending on the current breadcrumb path. Task: [4975757](https://www.odoo.com/odoo/2328/tasks/4975757)
German point-of-sale exports now better match Fiskaly compliance requirements across VAT rates, gift cards, deposits, tips, discounts, customer account payments, and cash movements. This reduces manual setup and helps businesses produce more accurate regulatory export data for common checkout scenarios.
Original PR description
In this commit: ------------------- - A new field `l10n_de_vat_export_identifier` on tax records to store the correct Fiskaly Export ID. - Extended export logic that supports a wide range of common…
In this commit: ------------------- - A new field `l10n_de_vat_export_identifier` on tax records to store the correct Fiskaly Export ID. - Extended export logic that supports a wide range of common business scenarios. - Support for registering and using non-standard or manually configured tax entries as needed. **VAT Mapping Logic** By default, taxes follow the standard VAT definitions outlined in Fiskaly’s documentation: https://developer.fiskaly.com/api/dsfinvk/v1#tag/VAT-Definition - The export ID is automatically assigned for standard tax rates. - For custom or historical tax configurations, users can override the value manually. - Even non-standard or random tax records can be registered and used in compliant export formats. Special case for 0% VAT: - If the assigned tax grid is 21, 45, or not set → Export ID 5 (non-taxable) - Otherwise → Export ID 6 (0% but taxable) **Business Case Handling** The following POS business scenarios are now fully supported with accurate Fiskaly export types: **Gift Cards** - Sale → MehrzweckgutscheinKauf - Redemption → MehrzweckgutscheinEinloesung **Down Payments** - Payment → Anzahlungseinstellung - Liquidation → Anzahlungsaufloesung **Tips** - If 0% VAT with grid 21, 45, or no tax → Tip to employee → TrinkgeldAN - All others → Tip to employer → TrinkgeldAG **Discounts** - Global discount → Rabatt - Line-level discounts handled via `discounts_per_vat_id` **Customer Account (Receivable) Payments** - Deposits into customer account → MehrzweckgutscheinKauf - Payments via customer account: - Adjustment line (0 payment) → MehrzweckgutscheinEinloesung or Forderungsentstehung - Main sale line → Umsatz (Consider as normal sale) - Settlements: - If invoiced → Forderungsaufloesung - If not invoiced → MehrzweckgutscheinKauf **Cash Discrepancies** - Exported appropriately based on over/short **Cash Movements (via cash_flow_reason)** - Private Reason - Cash Transfer - Payout / Deposit - Wage Payment / Cash Supplement These enhancements ensure that a wide range of real-world POS operations are supported out-of-the-box, making it easier for users in Germany to stay compliant with Fiskaly export requirements. Task: 4660560
Odoo now supports physical Stripe expense cards, including notifications when Stripe ships a card. A new pending state helps keep cards inactive until they are received and activated, improving control during delivery.
Original PR description
Send a mail when the card is sent by stripe. The one receiving this mail with be the person that ordered the card if it's delivered to the company address or the person that will receive it. We added a state 'pending' which needs to always be inactive on stripe which allows to know the card wasn't activated yet and need activation. This is to present users to easily activate the card while it's in transit and put the responsability on Odoo. task-4859836
Employee appraisals can now include a target job, helping employees understand which skills they should develop to progress toward that role. Access to job information has also been adjusted so non-HR users can view needed job options while sensitive HR-only fields remain restricted.
Carousel titles have been updated so dashboard content is presented more clearly and consistently. Related spreadsheet document tests were adjusted to keep quality checks aligned with the updated behavior.
A setting related to how invoice extraction groups tax lines has been moved from the invoice extraction area into the core accounting module. This prepares the system for future work while keeping the business behavior unchanged for users.
Original PR description
[IMP] account_invoice_extract: move extract single line to account This commit move the field extract_single_line_per_tax from the module account_invoice_extract to the module account This is done before the freeze to complete the task after task-5047859
The work entries view now shows total hours per employee and per time period, making it easier to compare worked time against expected hours. This helps managers quickly spot workload gaps, overtime, or scheduling inconsistencies.
Original PR description
Problem ---------- Do the same row sum computation as in planning. Objective ---------- per employee X/h / Y/h (%) X: sum of work entry durations Y: sum of theoretical hours per day per column : sum of durations Solution ---------- Do the same behaviour as work entry generation. This raises issues in the work entry generation. attendance_ids are retrieved from the working schedule with `_get_attendance_intervals` method per intervals and not per versions. It makes the computation longer and incorrect in the case of a new version with a flexible working schedule on an employee. It will not be considered as flexible. task-5039278
The Knowledge app interface has been streamlined, especially on mobile, by moving secondary actions into a More Options menu and making permission management easier to use in a full-screen view. Permission labels, avatar displays, sidebar behavior, and demo content were also improved to make the experience clearer, more polished, and more privacy-conscious.
Original PR description
This pull request introduces several user interface enhancements, with a strong emphasis on improving usability on **mobile devices**: - **Top Bar Redesign**: The top bar has been restructured to…
This pull request introduces several user interface enhancements, with a strong emphasis on improving usability on **mobile devices**: - **Top Bar Redesign**: The top bar has been restructured to enhance the mobile experience. On smaller screens, buttons for toggling the property panel, chatter, comments, and adding/removing articles from favorites have been moved into a consolidated "More Options" menu. This change creates more space for displaying the article hierarchy and breadcrumb navigation, improving readability and navigation clarity. - **Permission Panel as Full-Screen Modal**: Previously displayed as a popover, the permission panel will now open as a full-screen modal on mobile devices. This update reduces the risk of accidental closure and offers a more focused, user-friendly interface for managing permissions. - **Clearer Permission Labeling**: To address confusion around the internal "none" permission setting, the label has been updated to "Members only". This change makes it clear that access is restricted to member sets defined on the article. - **Enhanced Avatar Display**: Portal users will now see actual member avatars instead of generic user icons. This update adds a personal touch and improves visual engagement throughout the interface. - **UI Refinements**: Minor but impactful adjustments have been made, including correcting element misalignments and introducing clearer visual cues to guide users more effectively through the interface. Task-4636494
Several business dashboards have been updated to make information easier to explore and compare. Users can benefit from clearer visuals such as map-based charts, carousel views, and better sorting in payroll, marketing automation, and purchase/vendor reporting.
Original PR description
This commit updates some dashboards to use new features of spreadsheet (geo charts, carousel, sorting, etc.) This is the second batch. Task: 4851982
The top area of the Discuss sidebar and the messaging menu have been redesigned as a proof of concept. This aims to make everyday communication areas clearer and easier to use for users who rely on messaging in Odoo.
French VAT and Intrastat returns are now integrated into the account return workflow, allowing users to submit declarations directly from the return screen. The update also keeps French tax return PDFs consistent after reimbursement submissions and improves return period selection when multiple country-specific Intrastat returns exist.
Original PR description
[IMP] l10n_fr_reports, l10n_fr_intrastat: Account returns integrations Add account return integrations for France: - Vat Return - Intrastat This includes the VAT EDI integrations in account return.…
[IMP] l10n_fr_reports, l10n_fr_intrastat: Account returns integrations
Add account return integrations for France:
- Vat Return
- Intrastat
This includes the VAT EDI integrations in account return. Now you can directly submit your vat declarations from an account return.
The submit button on account return now opens directly the EDI VAT wizard, so the user can submit automatically from there. Once the submission is properly done, we mark the return as Submitted.
Same goes for intrastat.
task-4844276
[FIX] l10n_fr_reports: fix tax report pdf inconsistency
When you validate a tax return, it will lock the date and generate the pdf for the tax report.
In France with the edi, if you have to send a reimbursement declaration, the remaining value of this reimbursement will be carryover for the next period, moving the value from line 27 to line 26.
With this change, the pdf of the report will change as well, but we still keep the old pdf in the return attachments, which mean we have 2 pdf with different values for the same tax period.
With this commit, we regenerate the pdf once the reimbursement declaration is sent, with the good values.
Also, if the user reset the account return, the external value originally created when validating is deleted.
task-4844276, task-4932427
[FIX] account_reports: fix return periodicity options
Return periodicity options are supposed to be used to define the report period when opening it from account return.
But in some cases like Intrastat, if you have multiple localizations with intrastat return type, we won't generate the return periodicity options, as we only do if we have 1 return type.
This commit add a new condition on return type we use, checking the country. So if we have one return type for intrastat BE, and one for intrastat FR, we take the good return type based on env company.
IMPORTANT: from now on, each new localization return type should define a country on it.
no-task
[IMP] account_reports: export_file next_action
By default, export_file action in account reports return a 'ir.actions.act_window_close' action.
This commit adds the 'next_action' params to the export_file function, letting the dev choose a different action to execute after the export is done.
no-task
[IMP] account_reports: add new action_reset
Add a new action_reset function to deal with 2 states (submitted, reviewed) reports. This function comes from l10n_be_reports and will be used mainly for intrastat.
no-taskField Service sales and inventory flows were adjusted to stay compatible with recent core Odoo changes around product catalog sections. This helps keep quotations, product selection, and stock tracking working consistently while reducing duplicate internal data handling.
Original PR description
\* = sale, stock See Also: https://github.com/odoo/odoo/pull/224404
Helpdesk can now highlight tickets that have stayed too long without a stage or Kanban status change. This helps teams quickly identify stale customer requests and prioritize follow-up before service delays grow.
Original PR description
Helpdesk tickets and ticket stages are modified to take advantage of the new rotting logic of the mail.tracking.duration mixin, allowing to get a better sense of when a task gets stale. When a ticket spends too long without seeing a stage or kanban state change, it will appear in a different color in kanban views, to highlight it and bring it to attention. task-5064952
Mandatory personal information fields in salary contract forms now show an asterisk next to their labels. This helps applicants and employees quickly see which details must be completed, reducing confusion and incomplete submissions.
Original PR description
Added a '*' next to personal information field labels when they are marked as mandatory (`is_required`). Task ID: 5033319
Turkish payroll can now include manual additions and deductions when calculating salaries with Net-To-Gross. This gives payroll teams more flexibility to reflect one-off adjustments while keeping the final net salary calculation clear and consistent.
Original PR description
This commit allows the addition of manual deductions and additions to the net salary when we the payslip uses a Net-To-Gross calculation. We add a new input type and salary rule category for each of the following: 1. Manual Additions 2. Manual Deductions We also add 3 new salary rules 1. Expected Net Salary -> this is what the NTG calculation runs on now 2. Manual Additions -> amount on the category of the same name 3. Manual Deductions -> amount on the category of the same name and finally (Actual) Net Salary = Expected Net - Additions Categ. + Deductions Categ. We are using the category instead of the rule so in the future, other rules added to the same categories work out of the box. task-5045827
Employee document folders are reorganized so payroll, contracts, fleet, and related HR documents are easier to find from the employee record. Access rules are tightened so only HR users can open employee folders through the smart button, while link-based access is still supported where configured.
Hong Kong payroll now better supports local employment rules, including severance, long service payments, MPF offsetting, paternity leave, and Average Daily Wage calculations. Businesses gain more flexible end-of-year pay settings and clearer payslip information, helping payroll teams calculate statutory payments more accurately.
Original PR description
Various updates and improvements have been made to make the Hong Kong payroll more usable. - Small code cleanup to rename some fields, add some comments and docstrings,... - Update the computation of Severance Pay/Long Service Pay to handle the MPF Offset abolition correctly. - Adds support for MPF Offsetting. - Create a field to hold the Average Daily Wage amount and display it on the payslip. - Improve End-Of-Year pay to make it more flexible, adding a new setting allowing users to choose the month of pay or disable the feature. Also, allows enabling/disabling the pay per payslip. - Improve the computation of work entries affected by the 713 Ordinance. task-5004835
Payroll users can now manage salary attachments and adjustments more easily from a dedicated employee tab. This streamlines payroll administration, improves visibility of deductions or adjustments, and includes related payroll calculation and reporting updates.
Original PR description
Improve the UX/Behavior of salary attachments/adjustments Add a new tab in employee to edit salary adjustments task-4930543
The rental schedule is now an interactive planning view instead of a static report. Business users can reschedule rentals, adjust durations, change key planning details, and create new orders directly from the schedule, improving logistics coordination.
Original PR description
This commit reworks the rental schedule/planning to make it editable. Previously, the schedule was a static report view of the orders, which made it impossible to reschedule, modify, or create new orders. This limitation hindered logistics organization. With this commit, we replace the custom report model with a Gantt view of `sale.order.line`. The following improvements are introduced: - Users can move order lines left or right to reschedule orders or adjust their duration. - Users can move order lines up or down to change the product, customer, or reserved serial number. - Users can create new orders directly from the schedule view. task-4720184 See also: - https://github.com/odoo/odoo/pull/224751 - https://github.com/odoo/odoo/pull/216161 - https://github.com/odoo/upgrade/pull/8347
HR teams can now link contract salary benefits directly to salary rules instead of relying on fixed fields. This makes benefit configuration more flexible and supports values derived from employee or contract properties.
Original PR description
Allow the choice of salary rule in benefits creation instead of fields to open the possiblities to use properties values Task: 5062312
The employee contract action now opens a date picker instead of showing errors, making it clearer and easier for HR teams to create the right contract version. This reduces confusion and helps ensure new contracts are created through the intended workflow.
Original PR description
The new contract button only raises errors. It's not intuitive. Instead it should open a datepicker and create a version with a contract according to some logic. Task: 5047579
Marketing automation email templates and snippets were adjusted to work with Odoo’s newer HTML Builder editor. This improves editing behavior such as drag-and-drop, selection, design controls, and mobile layout handling for marketing emails.
Original PR description
The `mass_mailing_html` widget now uses the html Builder, and this commit makes compatibility adjustments.` In order to use them in the html Builder, existing marketing_automation templates have to be updated. Main change, snippets: - All snippets now use the `section` html tag to match Builder selectors for features like drag&drop, selection highlight, enabling associated Builder option, ... Main change, themes: - The style element should use variables used by the Design tab (see `customize_mailing_variables.js`. If the desired style cannot be modified through these variables, caution is advised as the user won't be able to change it once set. task-4247642 Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Thomas Josse <thjo@odoo.com>
The AI assistant entry point has been moved from individual message areas to the main toolbar, making it easier to find across the app. Its available actions now adapt depending on whether the user is viewing a specific record or elsewhere, helping present more relevant AI options.
Original PR description
This PR moves the chatter ai draft button to the systray. It also change the behaviour of the button to conditionnally change the actions and agents depending on if the user is on a form view or not. task-5008938
Asset and payroll accounting reversals now better follow storno accounting rules by keeping reversed amounts in their original debit or credit position as negative values. This improves accuracy for asset sales and paid payslip reversals in companies using storno accounting.
Original PR description
This commit changes entry reversals when storno accounting is enabled, which required changes in how debit/credit amounts are computed. To handle reversals of paid payslips in hr payroll, a check is added in the computation of debit/credit of the move lines. The conditions checks that the company is storno and the move is a credit note. The check is added in the `hr_payroll_account` module. Meant by storno accounting: any reversal of a previous entry shall be considered a negative amount in the original debit/credit position rather than a positive amount in the opposite column. task-4845062
Appointment-related emails now use a more modern template design. This makes customer communications look cleaner and removes the older small calendar visual from the message.
Original PR description
This commit updates the mail template design for the appointment calendar. task-4985981 PR-commu: https://github.com/odoo/odoo/pull/224435 PR-upgrade: https://github.com/odoo/upgrade/pull/8341
This update makes the Mexican customs invoicing workflow more reliable by letting users choose the delivered lots or serial numbers and quantities to invoice. It helps businesses better track which imported goods and customs numbers are reported to SAT, especially when returns are involved.
Original PR description
Previous this commit, the customs workflow was somewhat of a mess. Currently we depended of the origin movements linked to the valuation layer created when delivering stock to a customer to be able to compute the customs numbers to be invoiced. This caused issues for tracking and knowing what and how many is being invoiced and sent to the SAT with the CFDI. This issue is magnified if customer uses returns which breaks the whole original workflow. From this commit this is now reworked so that user can select what is invoiced using Lot/SN(s) delivered. The user can link a landed cost and its customs number to a lot by selecting the transfer or manually selecting the landed cost on the lot An option is added at product level to be able to select the lots and the quantity on an invoice line target: master task-3731106
The checkout testing flow was updated to match a recent address selector redesign. This helps keep automated quality checks reliable without changing the customer-facing checkout experience.
Original PR description
During the redesign of the address selector, the "Add address" button was moved out of `o_portal_address_row`. This commit updates the test accordingly. task-4904868 Requires: - https://github.com/odoo/odoo/pull/220610
US payroll settings were moved to the new US company accounting structure. This helps ensure payroll uses the correct expense and revenue accounts for US localization.
Original PR description
A new US-specific COA was created. This moves all the payroll configuration to the new l10n_us company and makes sure the right expense and revenue accounts are set. task-5028571
Project document settings have been simplified by removing the optional document toggle and default tag setup. Users can now access a project's document folder more directly, and folder links now open the correct project folder by default.
Original PR description
…m the top bar In this commit: - use_documents option removed. - 'documents & analytics' section removed - 'default tags' field removed - 'folder' field moved between the 'visibility' and the 'sales order' fields and renamed into 'Documents Folder' - top bar > documents action > the project's folder is selected by default instead of 'all' task-5057043
Website settings have been reorganized to make configuration easier to understand and navigate. Delivery provider setup is now presented in one unified view instead of separate provider-specific settings, reducing clutter for users managing online sales.
Original PR description
This commit enhances the website settings for better clarity and usability. Key Improvements: - Reorganized Website settings by updating the order, repositioning sections, and removing options. - Introduced a unified delivery provider view and removed the individual delivery provider settings. task-4819667
IoT device records can no longer be reassigned from one IoT box to another by users. This helps keep printer and device registrations consistent now that each IoT box maintains its own detected device records.
Original PR description
Now that we register printer records on every iot box (even if they are already detected by another iot box), we prevent users from moving devices from an iot box to another.
Updates several Latin American localization features to read document usage directly from invoices and invoice lines rather than journals. This keeps reporting and electronic invoicing behavior accurate now that the setting is calculated dynamically.
Original PR description
The aim of this commit is to use the l10n_latam_use_documents field directly
from account.move{.line} instead of the related journal_id.
It is necessary since it is now a computed field..The accounting dashboard now groups tax return reminders by return type and shows the oldest deadline for each group. This keeps the dashboard easier to read when many returns are due, while preserving the existing reminder behavior.
Original PR description
Late returns and returns which deadline is reached in the following month are shown on the return card on the dashboard to remind users to review and submit them. There was no returns limit. In extreme cases, the return card can be totally overflown - see Spain. We now group returns by types on the dashboard ; for each type, we display the oldest deadline. The rest of the behaviour remains unchanged. task-5066144
Ecommerce product pages now show subscription plans as clearer radio button options instead of dropdown menus, making purchase choices easier for shoppers to understand. One-time purchase options are also now available for service products, giving customers more flexibility and creating a more consistent buying experience.
Original PR description
Before this commit, On the product page, subscription plans were selected using dropdown menus, which could be less intuitive when compared to one-time purchase options. After this commit, the product page's user experience has been improved by replacing the subscription plan dropdowns with clearer radio buttons. In addition, the one-time purchase behavior previously applied only to goods, but is now also available for service products. Co-authored-by: Darshan Patel <dvpa@odoo.com> Co-authored-by: Gabriel Felix <gdpf@odoo.com> task-4930807
Appointment scheduling screens now use a cleaner icon-based quick-edit layout and richer popovers, making key booking details easier to review and update from calendar and Gantt views. Capacity handling is also improved to better prevent overbooking and keep appointment details accurate.
Original PR description
We now use icons instead of labels for fields in the quick edit view and the gantt popover. To enable the use of field widgets inside the gantt popover without having to design them in an overly generic way, the gantt view is switched to using a kanban view for the popover card. Which gantt will instanciate with a full KanbanRecord component, giving us access to most of the features of a regular view inside the popover. Notably this means we do not need custom js to enable "appointment status" updates anymore, at the cost of not being able to pass in "non-field" values anymore (adds a few "contact_X" fields) Some customizations from overrides in pos_appointment are removed as everything is already achievable from the original views with similar ease. task-4909129
Return checks now use clearer statuses such as anomaly, to do, reviewed, and supervised. Checks marked reviewed or supervised are treated as accepted, while manual user choices are preserved from automatic updates, making audit and reporting workflows more predictable.
Original PR description
- `result` selection is changed to ['anomaly', 'todo', 'reviewed', 'supervised']. - `bypassed` is removed and is no longer needed to dermine if a check is ok. - If `result` is set to 'reviewed' or 'supervised', the check is ok. - `refresh_result` is added and is set to True when a check is created. When a user changes `result`, it is set to False and will avoid `result` to be updated automatically. task-4991558
Users can now upload a new PDF directly from the signature request flow, edit it for signing, and send it without first creating a separate template in the Sign app. The wizard is cleaner and more flexible, with relevant fields shown at the right time, support for Documents uploads, AI-assisted messages, better email subjects, and scheduled sending.
Original PR description
_* = hr_sign, documents_sign Before: - Users could only send documents for signing using existing templates. - To send a new document, they had to go to the Sign app, upload the PDF, create a…
_* = hr_sign, documents_sign Before: - Users could only send documents for signing using existing templates. - To send a new document, they had to go to the Sign app, upload the PDF, create a template, and then send it. - All fields in the wizard were shown even if no template was selected. - A separate section (notebook) was used to add contacts in copy. - Subject of the mail send to signer was not containing details related to reference record. - Upload PDF button was visible to user from wizard when user click on search more in templates. which was of no use as it was not liking base record with referrence_doc. - Users couldn’t upload files from the Documents app when sending a document for signature. - Users couldn’t use AI to help write the message when requesting a signature. - Users couldn’t schedule the email for the sign request. After: - Added a new button in the signature request wizard that lets users upload a PDF directly and edit it in sign app. without need to manually go to sign app then upload pdf and later use it. - Too achieve that Reused an existing widget from hr_sign and moved it to the sign module to make it available for broader use. - Fields in the wizard now appear only after a template is selected or available by default. - Removed the extra notebook section and combined all fields in one place for a cleaner layout. - Add detail of reference record in subject of email send to signer. - Now users can upload files from the Documents app when sending for signature. - Users can use AI to draft the message. - Rename field 'message' to 'body' to make it compatible with `mail_composer_chatgpt` wizard. - Users can schedule the sign request email to be sent later. Impact: - Makes the document signing process faster and easier for users. - Reduces the number of steps needed to send a new document for signature. - Provides a smoother and more user-friendly interface. - Helps avoid confusion by only showing relevant fields when needed. - Users can attach the right files directly, get AI help for messages, and plan exactly when the request should be sent. task-4942867
The Sign app has been updated to prepare for sending signature requests through multiple delivery channels in the future. This groundwork should make it easier to expand how customers and employees receive signing invitations without changing the current signing flow.
Original PR description
This PR prepares the sign module for future support of sending sign requests through multiple channels. task-4985322
Resolved issues and error corrections
This update fixes an internal automated test so it consistently creates sample calls in the intended order. It helps prevent false test failures and supports more reliable maintenance of the VoIP AI feature.
Original PR description
[FIX] voip_ai: ensure call creation order in test Before this commit in `test_cron_transcribe_recent_voip_call_two_calls_at_same_time` test, we were attempting to have two calls one created after another. However since the creating of the second (earlier) call was based on the absolute date, when the setUp took longer then anticipated the order was the opposite of the desired. With this commit we ensure that the 2nd call will have create_date before 1st by pushing it back from the 1st call create date (not with creation of the 1st call)
Article previews now correctly display embedded account reports instead of crashing. This helps users safely preview and generate knowledge articles that include financial report content, while also improving template consistency.
Original PR description
When previewing an article that contains an account report, the preview currently crashes. This happens because the preview generator encounters an unknown `accountReport` block. To render properly, this block must be transformed - specifically, the reference in `data-embedded-props` must be resolved and the Python dictionary must be converted into a JSON object. This PR updates the system to correctly handle `accountReport` blocks during both preview and article generation. It will also refactor the code to reduce code redundancy and support the `articleIndex` block across all templates. Task-4989809
The salary configurator now shows personal information fields in the salary calculator based on whether they affect net salary, rather than where they are positioned on screen. This makes relevant payroll-impacting details visible to users and reduces unnecessary information being sent to the interface.
Original PR description
Purpose: Show the fields in the salary calculator depending on impact_net_salary and not position attribute
previous behavior:
- fields only appear in the salary calculator if the are configured to have position as side panel
(which make them invisible for the user as they appear under the monthly salary in the salary configurator)
- all fields were passed to both the salary configurator and calculator and unnecessary fields were set to be hidden in the frontend
new behavior:
- removed position setting from hr_contract_salary_personal_info
- fields now appear in the salary calculator depending on impact_net_salary attribute
- passes only the fields that are needed to the frontend
(filtering fields now happens in the backend not the frontend)
task id: task-5025318This update fixes calendar setup data so working hours are calculated correctly instead of being set manually with wrong values. It improves reliability for Belgian payroll validation, attendance Gantt behavior, and fixed-schedule planning scenarios.
Original PR description
- remove the `hours_per_week` field from creation to allow model to compute as its no not readonly So it is set with wrong values in some calendars
Refreshing the Employees page from the Payroll menu now keeps users within the Payroll area instead of switching them to the general Employees app. This avoids confusion and keeps the payroll-specific navigation available after a page refresh.
Original PR description
When you go in Payroll / Employees / Employees, then refresh, you're back on the employees app (with the menu from employees app not the ones from payroll) This is because the URL after the action is just "/odoo/employees". fixed by redirecting to "/odoo/payroll/employees" Task-5045428
Mexican payroll can now generate payslips for employees who only receive variable income, such as commissions or bonuses, without a fixed base salary. This prevents an error in the employer social security contribution calculation and helps payroll teams process these cases reliably.
Original PR description
BUG An error is raised when trying to generate a payslip for an employee with only variable income (e.g., commissions/bonuses, no fixed base salary) FIX The rule's find_index function needs to return 0 instead of None in case the daily_wage does not fall within any of the measure ranges Task: 4723413
This update fixes an automated test for Belgium payroll accounting so it runs reliably again. It helps keep payroll-related checks stable and reduces false errors in the development pipeline.
Original PR description
runbot.error: 224180
This fix ensures a quality control test works reliably when the module is installed on its own without demo data. It helps prevent false test failures related to serial number label printing, improving confidence in quality control updates without changing user-facing behavior.
Original PR description
## Issue:
The test `test_receipt_validation_triggers_serial_number_label_print` fails when running `quality_control` alone without demo data
## Cause:
The user is missing the group `stock.group_production_lot`, that enable serial number printing
As a result, the condition `self.env.user.has_group('stock.group_production_lot')` in `stock.picking` `_get_autoprint_report_actions()` is not satisfied
The `button_validate()` in `stock.picking` will have an empty report_actions and will not print anything
The Demo data that allow the test to work is in `stock`
https://github.com/odoo/odoo/blob/9b08449f25cd16dc15117d305726380298c313d8/addons/stock/data/stock_demo.xml#L176-L182
## Steps to reproduce:
- Install only `quality_control` (no demo data)
- Run the test `test_receipt_validation_triggers_serial_number_label_print`
related-to: https://github.com/odoo/enterprise/pull/90134
opw-4790427
Forward-Port-Of: odoo/enterprise#93857
Forward-Port-Of: odoo/enterprise#93296This fix updates the financial reporting interface so item deletion continues to work after a related platform behavior changed. It helps prevent errors or inconsistent behavior when users remove linked entries in account reports.
Original PR description
This PR is related to odoo/odoo#225391 which makes onDelete async. opw~5019621
The payroll sample dashboard has been aligned with the main dashboard so users see a more consistent example. The main payroll dashboard display is also now centered correctly, improving presentation in the interface.
Original PR description
Changes: - Adjustments to sample dashboard to reflect the changes made in main one - Fixed display of main dashboard previously not centered in the interface Task ID: 5005256
This fix prevents incorrect or negative ISR tax calculations when a Mexican payroll payslip covers dates across two months. The automatic month-end adjustment was removed, and payroll teams can now enter a manual ISR adjustment when needed for accurate payroll results.
Original PR description
Bug: When a payslip is overlapping two months, the ISR can be negative and is not correctly computed. Cause: There is an adjustment made at the end of each month and each year. This works only if the payslip ends on the last day of the month. Fix: We remove the adjustment and add an input for adjusting the ISR manually. Task: 4790249
Helpdesk and mail-related tests were updated to match recent platform changes in the community edition. This keeps automated checks aligned with the current behavior and helps avoid false failures in future releases.
This fix updates field service sales and stock logic after removing a duplicate internal field. It helps product quantities and related sales lines continue to work correctly without relying on outdated data references.
Original PR description
In this PR (https://github.com/odoo/odoo/pull/223686), we removed the `section_line_id` field as it was a duplicate of `parent_id`. This commit adapt the domains to fit with the field changes: - `parent_id` is not stored, so we can't search for that field in domain anymore. We replace `filtered_domain` by `filtered`. - Adapt the `_updateQuantity` method to use an orm searchRead instead of a domain. Co-authored-by: nipl-odoo <nipl@odoo.com> Linked: https://github.com/odoo/odoo/pull/223686 task-5009037,4966574
This fix prevents errors when printing receipts for cash in or cash out operations in Chilean point of sale setups. Businesses using a connected printer can complete these cash movements without disruption.
Original PR description
Before this commit, when a printer was connected, performing a cash in/out operation would raise an error when trying to print the receipt. opw-5060974 Forward-Port-Of: odoo/enterprise#93834
The salary calculator now displays its footer buttons properly on mobile screens. This makes it easier for users to configure benefits and copy salary offer links without layout issues or hidden buttons.
Original PR description
Previous behavior: - when in mobile view, footer buttons are not aligned and Copy Link button folded and not fully visible New behavior: - make Configure Benefits and Copy link appear side-by-side on mobile and each take 50% width - move container width to an explicit wrapper for the Copy link widget and keep the widget's `btn_class='btn w-100'` so the inner button fills its container (fixes folding) Task ID: 5042824
This update makes an automated Web Studio rename test more reliable by ensuring input changes are handled consistently. It helps reduce random test failures, supporting smoother validation and release processes without changing customer-facing features.
Original PR description
The def test_rename function (tour web_studio_main_and_rename) crashed undeterministically because the tour engine is now faster, inputs soimetime do not have the time to update. This commit fixes one instance of this. runbot-error-163471 Forward-Port-Of: odoo/enterprise#93826
Fixed an issue where using the shortcut from settings to open the Projects Folder could take users to Documents without selecting the Projects folder. This ensures users land in the intended folder, reducing confusion when managing project documents.
Original PR description
Reproduce: 1. Install documents_project 2. In config settings, use the arrow next to the Projects Folder 3. You end up in Documents, but not in the Projects folder. This is because folder-matching keys in the search panel must be `Number`s but we forgot to convert `user_folder_id` properly for this. Follow-up of 6bdcc357. Task-5055163
The Chilean POS receipt now handles missing resolution date information safely, avoiding a crash when validating sales orders. This helps businesses using Chilean localization complete POS transactions even when optional electronic invoicing settings are not configured.
Original PR description
Currently, when having a CL Company an dusing the POS, it is possible to have the POS crash when validating orders. Steps to reproduce: ------------------- * Install l10n_cl_edi_pos * Create a new…
Currently, when having a CL Company an dusing the POS, it is possible to have the POS crash when validating orders. Steps to reproduce: ------------------- * Install l10n_cl_edi_pos * Create a new company * Put Chile as country * Switch to that company * Create a shop and open it * Make a sale, validate order > Observation: POS Crashes Why the fix: ------------ The crash is happening upon trying to render the receipt because `l10n_cl_dte_resolution_date` is undefined. `l10n_cl_dte_resolution_date`is a field that can be found on the company settings only if the field `l10n_cl_dte_service_provider` is set and is required when the later has either `SII` or `SIITEST` as value. For companies in Chile, there is therefore two setups that leads to having `l10n_cl_dte_resolution_date` undefined. Either the service provider is set to demo, which case clients don't need to fill in the resolution date, either the provider is left empty (since not required upon company creation). Since the field can be undefined, we don't render it when it is. opw-5034091 Forward-Port-Of: odoo/enterprise#93185
Features or functions removed from Odoo
The MPS product configuration no longer includes its own Batch Size setting because batch sizes are now managed directly on the bill of materials. This keeps replenishment quantities aligned with the standard manufacturing batch size and makes production planning more consistent for users.
Original PR description
Removed the Batch Size setting from the MPS product configuration. With the introduction of the standard batch size on the BoM, this setting has become redundant. Batch size is now defined and managed directly through the BoM. As a result, the replenishment quantity in the MPS will always be a multiple of the BoM's batch size. This ensures that orders created from the MPS are split according to the defined batch size, making it easier and more consistent for users to manage production quantities. This change promotes the use of a standardised batch size for manufacturing operations and improves overall usability and convenience. Task ID: [4395548](https://www.odoo.com/odoo/project/966/tasks/4395548) Community PR: [208275](https://github.com/odoo/odoo/pull/208275)
Code cleanup and technical improvements
This update removes older direct access paths for URL conversion so all parts of the system use the central router behavior. This lowers the risk of inconsistent navigation behavior after router customizations, with no expected visible change for users.
Original PR description
Since [1], overriding the router’s state <-> URL conversion functions is supported. However, both functions were still exported, which could cause inconsistencies if code continued using the exported versions instead of the overridden ones. This commit removes the exports, ensuring that the functions are always accessed through the router. [1] https://github.com/odoo/odoo/commit/d278ab17698c0c4fbdf887b19ed7ccb9122ffb77
Bills of lading for Mexico now use vehicle and driver details from the Fleet app instead of requiring separate vehicle records. This reduces duplicate data entry, keeps vehicle information consistent, and improves weight handling and PDF output for transport documents.
Original PR description
Description of the issue/feature this PR addresses: Users that have their own vehicles (the target user for carta porte also does) handle registries of their vehicles in fleet, but with the current…
Description of the issue/feature this PR addresses: Users that have their own vehicles (the target user for carta porte also does) handle registries of their vehicles in fleet, but with the current implementation the user needs to create the vehicle in both carta porte and fleet making the purpose of fleet redundant. Current behavior before PR: The values for the vehicle in the bill of lading are taken from the l10n_mx.vehicle model, which causes users who have fleet records to have duplicate information. Desired behavior after PR is merged: The vehicle values on the bill of lading are taken from the fleet.vehicle model. The vehicle driver (driver_id in fleet.vehicle) is taken as the intermediary (driver) on the bill of lading. The computed method of the gross_vehicle_weight field has been reworked so that it is now always in tons. Minor corrections were made to the bill of lading PDF. opw-[4117145](https://www.odoo.com/odoo/my-tasks/4117145) I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The timesheet timer header was reworked to behave more consistently across list, grid, kanban, Helpdesk, Field Service, and sales timesheet views. This reduces crashes, stale timer displays, and data conflicts when users start, stop, or edit timed work entries.
Original PR description
Before this commit, multiple bug fixes have been made in the timer header when this component has been mounted in the list view since the list model conflicts with the one used in timer header component. This commit completely reviews the timer header component. It also introduces a new service called timesheet timer service which is the timer service but with additional data needed for the timer header component. task-4284216
This update streamlines internal guided test tours by replacing a heavier dependency with standard browser functionality. It helps reduce asset size and supports faster loading of the tour testing framework without changing business features.
Original PR description
In this commit, we replace hoot-dom uses in tour files by native javascript. For legitimate uses of hoot in tours, we exported the "queryFirst, queryAll, queryOne, waitFor, and waitUntil" hoot helpers into tour_helpers. These two actions are made in order to lazy load hoot-dom in web_tour to reduce assets size.
The Web Studio report editor no longer loads an older editing component that is no longer needed. This reduces unnecessary dependencies and helps keep the editor simpler to maintain without changing day-to-day functionality for users.
Original PR description
The report editor uses the new html_editor since [1]. This commit removes the loading of the legacy one, and the depenendency to web_editor, as nothing seems to be requesting it anymore. [1] https://github.com/odoo/enterprise/pull/66656