Daily updates from Odoo
Navigate
Branch
Thursday, September 4, 2025
56 changes
Security fixes and vulnerability patches
The VoIP country code lookup is no longer available to anonymous visitors and now requires a logged-in user. This reduces unnecessary public exposure of an internal VoIP service without changing normal use for authenticated users.
Original PR description
Change the authentication method of the /voip/get_country_code route from public to user.
Adds Australian Single Touch Payroll reporting through the ATO Super Choice API, including employer registration, report submission and retrieval, and super contribution integration. It also introduces audit logging and stronger access controls to meet payroll compliance requirements, with related fixes to payroll data and termination reporting.
Original PR description
This module adds single-touch payroll integrations with the ATO using the Super Choice API. The IAP server is used in the middle to ensure security and prevent unauthorised access to the ATO's API. It includes the following features: - Employer registration for STP - STP submission and retrieval of STP reports - Super Choice API integration for super contributions (Compliance Requirement) Add audit logging for Australian Payroll. A mixin that logs the selected field changes in the l10n_au.audit.log model. This is later synced to the IAP server. Add security constraints for STP compliance. Other misc fixes Tasks: 4201473 4201471 4076629
New functionality added to Odoo
This update adds an information retrieval capability to the AI assistant, letting users ask questions about data they are allowed to access in Odoo. It can search records and summarize grouped information, helping users get insights without manually navigating database screens.
Original PR description
This PR introduces a new search tool with its associated agent. The goal of this tool is to allow the user to ask the agent information about the database. Specifically, information it has access to only.
Odoo’s Australian BAS reports now cover additional sections needed by specific industries, making it easier for businesses to prepare more complete activity statements. The update also adds missing tax definitions required to populate those new report areas accurately.
Original PR description
Update the base report we have in Odoo and add support for the different missing sections that are needed for specific industries. Also adds a few missing taxes required to fill those sections. task-4272557
Enhancements to existing features
The messaging menu now shows a background color behind the WhatsApp icon. This small visual improvement makes the icon easier to recognize and helps users navigate messaging options more clearly.
Smart scheduling no longer highlights only the tasks it planned, so users can immediately see the full set of scheduled tasks. This gives project planners a clearer overview of their workload after using smart scheduling.
Original PR description
Before this commit, when the user uses the smart schedule on tasks to schedule his tasks, a filter is added to highlight the tasks planned by the smart schedule. The problem is the user would prefer directly having an overview of all tasks planned instead of only see the ones planned. This commit removes the highlight tasks planned by the smart tasks to let the user have an overview of his tasks planned.
Kenya payroll now supports reporting Tier 3 pension contributions in the NSSF report using the official code 103. Businesses can also choose whether Tier 2 and Tier 3 contributions are included in the government report or handled through a third-party insurance provider.
Original PR description
In Kenya, you can report your pension contribution to the government (NSSF Report). So we add TIER 3, with code 103, to the report which is for pension. We also add the possibility to choose for TIER 2 and TIER 3 if we want to have it on the NSSF Report or if it's given to a third party insurance company. Task: 5003604
Odoo Studio receives several usability improvements that make configuring forms, fields, and menus more consistent. Related fields now inherit clearer labels, technical names are normalized, and tag color settings display correctly, reducing setup friction for business users.
Original PR description
- Removing properties from chatter - Added related field will take by default the string of the related field - Correction of the property 'Color field' for the many2many_tags widget. The value wasn't showing. - A new attribute is available for the supportedOptions. It's 'isRelationalField'. This attribute is used for the options that are type: "field". When it's set to true, the list of fields for the selection will come from the relation model and not from the viewEditor model. - The techinal name is now normalized - and other minor UX improvements TASK-ID: 4936789
AI-powered server actions and document workflows were made clearer, safer, and easier to use. The update improves prompt naming, strengthens validation and prompt-injection resistance, enhances document AI messages and demo data, and adds tools for sequencing and tagging documents.
Original PR description
Purpose ======= Now that we have 2 prompt field on the server action, we want to be more precise in their names, and so we rename `ai_prompt` to `ai_update_prompt`. Resize and truncate field stored in database. Add test about access check on action. Improve the prompt used for AI action to make it more difficult to abuse prompt injection with small input. Improve the validation of the JSON schema. Task-4989962
Sales commission plans can now set targets by payment date, making it possible to define shorter target periods, such as monthly goals, while calculating commissions over longer periods like quarters. This improves achievement reporting with clearer commission rates, target rates, and target totals by payment date.
Original PR description
Currently it is not possible to define target on smaller period than commission period. Example: give monthly target to sales but computing commission per quarter. Adding the payment date on the commission plan target allows to compute other metrics on achievements reports: - commission rate - target rate - sum of commission target per payment date All these values could not be easily deduced before this commit task-4996531
Users can now see and load Knowledge templates that have not yet been added under the current article. The update helps teams add optional sub-templates when needed while automatically including any missing parent templates for proper structure.
Original PR description
When the user clicks the "Load a Template" button in the article index block, the template gallery now displays all the templates that have not yet been loaded under the current article. When selecting a template, the system partial loads it: 1. Parent templates will be loaded if they have not already been loaded. 2. Child templates will not loaded. This new algorithm ensures that users can load sub-templates that haven't been loaded by default (see: `template_child_default_create`). It will be used in the `accountant_knowledge` module to help people complete their reports with templates we considered optional. Task-4989809
Users can now manage multiple schedule blocks more safely and efficiently: bulk deletions require confirmation, the delete option only appears when records are selected, and Ctrl-based selection supports working across several areas at once. Work entries are also consistently grouped by employee, making the view more predictable for HR planning.
Original PR description
We bring some improvements to the multi creation/deletion feature of the gantt view. Most notably: - Deletion of records has now to be confirmed - The button "Delete" is not displayed if no record is in the selected zone - Control can be used to select multiple block of cells with the usual logic. We also refactor the work_entries_gantt view and make it always be grouped by employee_id. Task ID: 5003199
The Helpdesk eLearning integration has been adjusted to work with the redesigned course pages after the old all-courses page was merged into the main eLearning home page. This keeps helpdesk-related training content accessible and aligned with the updated website experience.
Original PR description
Following the merge of the page /slides/all with the website_slides home page: - we adapt the code of website_helpdesk_slides that was using the template of the page /slides/all that we have removed. - we rename the method slides_channel_all_values as slides_channel_values. see odoo/odoo#221762 Task-3893028
This update improves how Odoo checks access to linked records, reducing false permission errors when users work with products, subscriptions, documents, appraisals, reports, appointments, and related business flows. It also tightens several module-specific permission behaviors so users can complete allowed actions without unnecessary administrator rights.
Original PR description
odoo/odoo#217277
Barcode app users can now search for transfers using a packaging barcode, not only a product, package, or tracking barcode. This saves time when the product barcode is hidden inside packaging, and the update also improves related barcode screen messaging and demo message behavior.
Original PR description
Description of the issue/feature this PR addresses:
As an operator with a lot of transfer/operations to do, being able to filter based on a product barcode you have can save a lot of time but sometimes you only have access to the packaging barcode and you don't want to open the packaging to have access to the product barcode.
Current behavior before PR:
product_uom_id domain is empty if product_id or product_ids not in context
Desired behavior after PR is merged:
product_uom_id domain is TRUE if product_id or product_ids not in context.
This is not used in the community PR but was useful before when I was filtering moves on packaging barcode:
This line was not working before this PR
`('move_ids.product_uom.product_uom_ids', 'in', [product_uom.id]),`
task: 4729518
Community PR: https://github.com/odoo/odoo/pull/213852
I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)Bank reconciliation now supports keyboard shortcuts for moving between transactions, opening or closing details, using key actions, and toggling the chatter. This helps accounting users process bank transactions faster with less mouse interaction while preventing accidental multi-selection.
Original PR description
- Up/Down navigation to change transaction. - Enter: select card -> fold/unfold. - Right/Left Arrow unfold/fold. - ALT+SHIFT+C to open/close chatter. - ALT+SHIFT+Enter = Primary button of the line (can be a duplicate of one under, but if primary is reconcile allow ALT+SHIFT+Enter and ALT+SHIFT+2 for it) - Standard shortcuts on buttons, only applies to the selected card -- ALT+SHIFT+1 = Set Partner -- ALT+SHIFT+2 = Reconcile -- ALT+SHIFT+3 = Set Account -- ALT+SHIFT+4 = Payable -- ALT+SHIFT+5 = Receivable -- ALT+SHIFT+7 = Reco Model 1 of the list of reco model -- ALT+SHIFT+8 = Reco Model 2 of the list of reco model -- ALT+SHIFT+9 = Reco Model 3 of the list of reco model - Prevent multi-selection with mouse and space. task-4965265
AI agents now have a dedicated way to manage the documents, web pages, and knowledge articles they use for retrieval. This improves tracking, processing, and reliability of source content, including safer handling of very long text sections.
Original PR description
This PR introduces the new `ai_agent_source` model to manage and track retrieval sources used by AI agents.
It centralizes the handling of documents, URLs, and knowledge articles that used to create ai agents,
with full lifecycle management (creation, attachments liking, embeddings generation, status tracking).
## Key Features
- **New `ai_agent_source` model**
- Supports four source types:
- Imported local files
- External URLs
- Documents from the Documents app
- Articles from the Knowledge app
- Fields include: type, status, size, related agent
- Replaces attachment-based fields/functionalities in `ai_agent` model
- Added cron jobs to handle URLs scraping and knowledge articles content extraction
- `url_scraping.py` is refactored into `html_extractor.py` for reusability across `ai` and `ai_knowledge`
## Task
- Task ID: 4881286Appointment scheduling now supports slots that span multiple days and presents them more clearly to customers, such as showing date ranges for all-day bookings. All-day bookings also create all-day calendar meetings, and booking confirmations show durations in a more user-friendly format.
Original PR description
Before we only supported appointment slot for one full day. With the possibility to create slot encompassing multiple days, we improve the info displayed for the slot to the user. If a "allday" slot encompassed only one day we still display "All day" for the slot. The other allday slots (multi-days) display the days as: "Mon 4 - Tue 5". The timezone chosen don't impact allday slots. They are only based on the timezone of the appointment type. In the other case of multi-days slot, they are displayed like alldays slots like before. Additionally to this: - Booking an allday slot create an allday meeting in backend. - Display duration in a user friendly manner instead in hours on the validation page. task-2822534
Document users can now access common actions directly from each row in the list view by hovering over it. This makes frequent tasks like downloading, sharing, renaming, opening folders, or viewing details faster and easier without navigating away.
Original PR description
Purpose: add quick access buttons on each row in list view to ease access to commonly used actions by simply hovering over the row. Task-4794981
The planning Gantt view now retrieves employee working periods together with the main schedule data. This reduces extra loading work and should make planning screens render more quickly for users.
Original PR description
We fetch working periods along the main gantt data. This should make the planning gantt view render more quickly.
Odoo now supports the DIAN-required commercial events linked to Colombian electronic invoices, such as document receipt, goods receipt, acceptance, and claims. This helps businesses manage Vendor Bill event reporting, receive updates on Customer Invoices, and complete issuer acceptance when required.
Original PR description
According to DIAN legal requirement: Electronic documents must have several associated events that indicate the validation status of the DIAN and the commercial status with the client. After the issuance of the electronic Invoice, once the client receives it, it is necessary to generate several additional events for the invoice which notify the reception of the document, reception of goods, acceptance, claim, etc. This task will enable Odoo users to report commercial events of Vendor Bills received, receive the updates for their own Customer Invoices and make them able to Accept by Issuer if needed. task: 4242575
Accounting reports grouped by account code now also display the matching account name for the current company. This makes consolidated multi-company reporting easier to read and helps users understand which account each grouped code represents.
Original PR description
In the current consolidation, you can make multi-company accounts and assign a code for each company. But a code must be unique inside each company. So it is not designed to map multiple accounts from a second company into one account of a first company. It is actually possible to achieve that effect by not making the accounts of the second company belong to the first company, and still make the code mapping. So you can make several accounts from the second company, map to the same code for the first company. Thus grouping by account codes become interesting for the accounting reports, in order to get a view of that consolidation. In order to make this reporting more clear, the name of the account corresponding to the account code (in the current company) is now shown when grouping by account code. task-4801891 Forward-Port-Of: odoo/enterprise#93772 Forward-Port-Of: odoo/enterprise#86403
Appointment bookings are now created even when the upfront payment product is priced at zero, as long as it is configured to create related work on order. This helps teams offer free or no-cost appointment options without losing the automatic booking workflow.
Original PR description
- Previously, appointment bookings were only created if the upfront payment product had a price greater than 0. - With this improvement, the system now creates a `calendar.booking` as long as a product is configured to `create on order`: a task, a project, or a project & task, regardless of the product's price. task-4731757
The Appraisal app has been updated to make performance reviews easier to manage for both employees and appraisers. The changes improve forms, emails, feedback requests, meeting scheduling, reporting, and template controls, helping teams run clearer and more consistent appraisal processes.
Original PR description
**Purpose:** Refresh the Appraisal app UX and core flows for both appraisers and employees. Fix outdated or broken functionalities. Improve usability, visibility, and consistency across the app.…
**Purpose:** Refresh the Appraisal app UX and core flows for both appraisers and employees. Fix outdated or broken functionalities. Improve usability, visibility, and consistency across the app. **Key Changes:** - Rework empty screens and demo/sample data. - Improve form view UX for both employee and appraiser sides. - Rename appraisal status transitions. - Auto-update department and job in appraisal from employee profile when in Draft. - Add button to schedule meeting of appraisal. - Improve Appraisal Template: - Add field to restrict template by department. - Add field to restrict 360 Feedback survey usage. - Remove appraisal templates/surveys from the Department form view. - Clean up Appraisal Settings view. - Allow appraisal note to be available for all companies. - Improve email templates and sending emails flow. - Improve "Ask Feedback" wizard UI and email template. - Add primary button “See Results” in Feedback list view of an appraisal. - Remove "See Results" from Configuration view (and its form view). - Show all appraisals via smart button on employee view. - Replace report_appraisal_analysis SQL view with graph and pivot view on hr_appraisal. Community pr: https://github.com/odoo/odoo/pull/208900 Enterprise pr: https://github.com/odoo/enterprise/pull/83440 Upgrade pr: https://github.com/odoo/upgrade/pull/7728 task-4678232
External users who receive a Knowledge article link copied from an internal user's browser are now automatically sent to the appropriate portal or public view. This reduces access confusion and makes shared article links more reliable without requiring employees to use a special share link.
Original PR description
In practice, when an internal user edits an article and wants to share it, they often share the URL from their browser's address bar rather than using the share links in the share panel. The issue is that external users who click this link cannot access the article via the backend. They are hence unable to access the article even though they could access it via the Knowledge portal or public view. To address this, a redirection to the main backend controller has been implemented that automatically sends non-internal users attempting to access the Knowledge backend view to the Knowledge portal or public view. With this redirection, the backend link also becomes functional for them. task-4797702
The mail composer now restores saved draft content using the rich text version, so formatting is preserved when users return to a message. It also keeps the compact and full composer views synchronized, reducing the risk of lost or inconsistent email content.
Original PR description
This commit updates the mail composer to use the composerHtml for restoring content, ensuring that HTML content is preserved and properly rendered. This commit also includes synchronization of the content between the small composer and the full composer. task-5022243
EC Sales List reports now include a standard Reset button across all related versions, making it easier for users to clear or restart report data consistently. The Croatia-specific custom button was removed because the new shared button now covers that need.
Original PR description
We want a Reset button for the EC Sales List. Put it by default for all children of this report. Removed the button from HR that was useless anyway and as the default one will cover.
Text messages are now available directly from the VoIP app, making them easier for internal users to find and review. Users can only view messages they sent, while administrator-specific options remain limited to settings areas.
Original PR description
Purpose: To move text message from technical to VoIP app in readonly mode while keeping admin specific features in Settings/Technical menu. Specification: This commit introduces the following changes: - A new menu "Text Messages" is added under the "VoIP" app. - The "Text Messages" menu is accessible to all internal users but in readonly mode. - Users can only view the text messages they have sent. - VoIP Provider menu is removed from Settings/Technical menu. Task-5053210
Payroll slips and pay runs now use clearer, simpler statuses, reducing confusion between draft and verification steps. Payroll warnings that previously appeared as pop-ups are now shown as issues directly on the payslip, making blocking and non-blocking problems easier to spot and resolve.
Payroll teams can now manage recurring payroll inputs through employee payroll properties, making it easier to apply the right salary rule inputs consistently. This helps reduce manual setup on payslips and improves accuracy when handling employee-specific payroll items.
Appointment events now include customer booking details and question answers directly in the event description, making them easier to view from calendar, Gantt, POS, and external calendar popovers. Events can also be automatically named using the attendee and appointment type when no custom title is provided, helping staff identify bookings faster.
Original PR description
Purpose ======= Improve event description by adding the booker details and questions answers so that these info can easily be accessed from the calendar popover and external calendars description.…
Purpose ======= Improve event description by adding the booker details and questions answers so that these info can easily be accessed from the calendar popover and external calendars description. Displaying the description in the gantt and POS popovers for quick access. Autonaming event with "attendee name - appointment type name" when there's no event name set and there's one attendee in the partners which is not a staff users of the appointment. Technical ========= Currently, at event creation, no description is saved into the event. The get_attendee_description method is used to dynamically generate the description only when it's needed to have up to date information. However now that the description needs to be displayed on every popovers, the event description field have to be populated at creation. So bringing back the previous behavior where the description was generated based on the form values and directly set on the created event (revert of https://github.com/odoo/enterprise/pull/47471). A dynamic solution was investigated but couldn't be implemented: - Populating the description field while still using the dynamic method isn't a solution. Now that the description is displayed everywhere there could be misunderstandings and data inconsistencies between what is shown to the user on the front-end using the dynamic method (validation page + mail templates) and what is show on the back-end using the description field. - Changing the description field to a computed field is a bad idea as the user custom notes entered manually in the description could be lost at re-computation. There's no way to parse what has been manually added to what needs to be re-generated. - Tried to introduce a new computed field for the dynamic description part. However external calendars API only have one dedicated html attribute meaning we would have to merge the manual and dynamic description when syncing from odoo -> external calendars but there would be no way to differentiate between the 2 descriptions when syncing back from external calendars -> odoo. Conclusion is that it's better to have a static description generated at creation. If some infos were to be changed like the answers to questions or partners details, the related info will need to be manually updated on the description via the event form. Task-4759201
Generated websites can now use the updated standard footers again. This simplifies website creation and helps ensure new sites include consistent footer layouts without extra selection setup.
Original PR description
With the update to footers, commit 2c5211de10aeb8df313a2ca0c8d07f41db6e44d8, we can reactivate the footers and no longer need to create the footer we-select.
The import flow now detects the current action automatically, so users no longer need extra URL or setup details to import records. After import, records open in the same relevant view context, making review and follow-up more consistent.
Original PR description
This commit introduces two improvements to the import client action. 1 - The import client action will now automatically deduce the current action. This means that the active model is no longer needs to be included in the URL or in the client action parameters. 2 - The import client action will now display the imported records in the correct view. The views used are those of the current action. part-of task-id https://github.com/odoo/enterprise/commit/501384872299ed38f5521f2fa76ed3da1fbbdc45 related PR: https://github.com/odoo/odoo/pull/222793
Bank reconciliation can now match more payment types to bank statement lines using the end-to-end transaction identifier carried through the banking process. This helps reduce manual matching for payments without accounting entries or linked invoices, improving reconciliation efficiency and accuracy.
Original PR description
The aim of this commit is adding the possibility for the try auto reconcile feature to match payment without entry and single payment (no entry / no bill/invoice) with bank statement line by using the end to end uuid. This end to end uuid is a special key generated when the payment is created and forwarded through the whole banking process to identify a bank transaction. task-5033789
Luxembourg reporting now includes guided submission wizards that provide users with the files and steps needed to complete tax return and EC sales list submissions. This makes the process clearer and reduces manual effort or uncertainty when finalizing required filings.
Original PR description
This commit aims to improve the way reports are submitted by adding a wizard providing users with the necessary files and steps to finalize their tax return and ec sales list submissions. Task ID: 4893967
Unused Sign role records were removed after the Sign app UI changes made them unnecessary. Related HR and document-signing tests and demo data were updated so signing templates continue to work with roles created dynamically when needed.
Original PR description
- Since the big UI refactor in the sign app, the sign item roles are not used anymore and rules are added on the template on the run - This commit aims to clean up the data file of these roles and update the tests not to use them task-id: 4646742
Resolved issues and error corrections
This update fixes rental planning so order dates, planned shifts, and online availability are kept aligned when users reschedule slots or change rental periods. It also improves the planning workflow with clearer confirmations, better filtering of rentable products in the shop, and fewer incorrect or duplicate planning actions.
Original PR description
Forward-Port-Of: odoo/enterprise#91801
The barcode transfer workflow now avoids automatically placing newly added product lines into a new package by mistake. The setting for showing complete packs has also been moved to the Barcode App area, making it clearer that it controls barcode display behavior.
Original PR description
Various fixes following the pack in pack introduced in odoo/odoo#203987 Summary of the changes: - Move the `Show entire packs` in the 'Barcode App' tab in the Picking Type form - Fix an issue where creating a move line through the barcode app would automatically put that line in a new package.app. Task-4314600 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The signature dialog no longer shows the typed and drawn signatures on top of each other. This prevents visual confusion when users sign documents and makes the signing experience clearer and more reliable.
Original PR description
Fixed an issue where both the auto-generated and drawn signatures overlapped in the signature dialog. This was caused by the system automatically setting the user's default signature to the drawn one when opening the dialog. Now, the dialog no longer defaults to the drawn signature, preventing visual overlap and ensuring a cleaner user experience. Forward-Port-Of: odoo/enterprise#93750
Tax return checks are refreshed when users open them, so outdated warnings such as draft entries no longer remain after those entries are changed. This gives users a more accurate view while avoiding unnecessary performance impact in the Tax Returns overview.
Original PR description
Before, when opening a Return that had bypassed checks such as Draft Entries, and we had deleted or confirmed those entries it wouldn't have refreshed the check number and would still display that there are draft entries. Now, we are forcing the check to be refreshed when someone wants to see them as to not crash the performances when someone opens the Tax Returns Kanban view. task-4850581 Forward-Port-Of: odoo/enterprise#93664 Forward-Port-Of: odoo/enterprise#90187
The project budget display now shows the correct warning color when an expense budget is exceeded. This helps users quickly spot overspending risks instead of seeing a misleading green status.
Original PR description
**Step to reproduce:** - install "project_account_budget" - go to accounting > accounting > Analytic Budget - create a budget of type expense,say test budget - select analytic account `Asustek - Wood…
**Step to reproduce:**
- install "project_account_budget"
- go to accounting > accounting > Analytic Budget
- create a budget of type expense,say test budget
- select analytic account `Asustek - Wood Corner`
- set budget amount => 500. open the budget
- create a new project 'test project"> open setting > Analytic Page
- add `Asustek - Wood Corner` analytic account in project field
- create a PO with amount > 500
- in analytic distribution column, add `Asustek - Wood Corner` in project column
- confirm PO and create Bill
- Go to `test project` settings > Dashboard smart button
**Observation:**
- For exceeding expense budget, we have green color in budget section
- It should be red
**Cause:**
The conditional class for budget progress was incorrectly evaluated due to missing parentheses around the `and` condition.
In expressions like:
`(true and (1 == 1 ? 'a' : 'c')) or (1 == 1 ? 'b' : 'd') → 'a'` ✅
`true and 1 == 1 ? 'a' : 'c' or 1 == 1 ? 'b' : 'd' → 'b'` ❌
Without parenthesis, the `or` clause is evaluated unexpectedly, even when the `and` branch is intended to take precedence.
This commit wraps the `and` condition in parentheses to ensure the correct evaluation order and consistent class assignment.
Budget:
<img width="1203" height="291" alt="budget 4968162" src="https://github.com/user-attachments/assets/2d8223d5-0344-4ad0-b33c-2598ea167f2d" />
Before fix:
<img width="623" height="195" alt="before fix 4968162" src="https://github.com/user-attachments/assets/4ac749bf-fa93-4835-963a-5dfbdd05559d" />
After fix:
<img width="643" height="225" alt="after fix 4968162 " src="https://github.com/user-attachments/assets/4fd228f9-e32f-48d9-b6ef-55251b21d601" />
opw-4968162
Forward-Port-Of: odoo/enterprise#93243
Forward-Port-Of: odoo/enterprise#91617A missing web address is now included when sending Aadhaar signing requests. This helps the testing service receive the information it needs, making Aadhaar signing easier to validate before use.
Original PR description
Before this change, the request didn’t include the URL, so during testing the IAP was missing it. Now the URL is added to the request, which makes it easier to test Aadhaar sign.
This update adjusts an automated appointment test to match a recent change in how editable selections behave. It helps keep quality checks accurate and reduces the risk of false test failures during future updates.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/224818 task-4585835
This change updates an internal appointment test so it matches the latest behavior when editing selections. It helps keep automated quality checks reliable without changing the customer-facing appointment experience.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/213300 task-4585835
This fix prevents portal users from becoming owners of Documents spreadsheets because they cannot use spreadsheets in edit mode. It helps keep spreadsheet ownership aligned with users who have the necessary internal access, reducing permission-related confusion.
Original PR description
Following the discussion I had with @flch-odoo regarding https://github.com/odoo/enterprise/pull/92134 , Since Spreadsheets can not be shared in edit mode to non-internal users, we prevent them from becoming owners. opw-4753670 Forward-Port-Of: odoo/enterprise#93800 Forward-Port-Of: odoo/enterprise#92409
The PLM dashboard now counts only engineering change orders that are actually waiting for the current user's approval. This prevents inflated or misleading personal approval counts when another approver still needs to act or when the user already approved earlier.
Original PR description
The dashboard of PLM displays for each ECO type the number of validations pending in general, and the validations waiting for me specifically. The latter has been incorrectly computed for quite some time, as it computes how many ECOs exists where I am an approver and an approval is waiting - but there is no guarantee that the waiting approval is one of mine; it might be that I am a past approver of the ECO and that another approval (waiting for somebody else than me) exists, or that two approval are required on the same stage (one by me, one by somebody else) and I already approved. This commit switches the computation around by looking for pending approvals waiting for me, and then get the number of (non-archived) ECOs bound to them. Forward-Port-Of: odoo/enterprise#93728 Forward-Port-Of: odoo/enterprise#92348
Danish Intrastat and EC sales list reports now round figures to whole units by default, matching government reporting requirements. Users can still view decimal values in the interface when needed, but official export files are always rounded for compliant submission.
Original PR description
This commit will change the options of the reports so that we have a rounding in units since the intrastat and ec sales list report must be rounded. This solution still allows people to have the report with decimals if needed task-4948271 Forward-Port-Of: odoo/enterprise#93783 Forward-Port-Of: odoo/enterprise#91268
Users can no longer trigger an error when trying to link a document to a vehicle if no vehicles have been created yet. The system now blocks that unsupported action gracefully, avoiding a confusing crash in the Documents app.
Original PR description
*= documents_fleet Currently, when user tries to link a document with a vehicle and if there is no vehicle exists an error is raised. **Steps to Reproduce:** 1) Install `documents_fleet`…
*= documents_fleet Currently, when user tries to link a document with a vehicle and if there is no vehicle exists an error is raised. **Steps to Reproduce:** 1) Install `documents_fleet` module(without Demo Data). 2) Open Documents App. 3) Upload a file in `Fleet` folder. 4) Select the uploaded file and click on `'Link to a vehicle'` button. Error: `ValueError: invalid literal for int() with base 10: 'False'` Root Cause: The `link_to_record` method attempts to find the first record of the target model to use as a default value when opening the linking wizard. If no records exist, the search returns an empty recordset, and accessing `.id` at [1], on it results in the value `False`. The code then incorrectly constructs a default reference string like `fleet.vehicle,False`. The wizard crashes when it tries to parse this string and convert the `False` part to an integer. Solution: This commit prevents error by ensuring that the user cannot link a document to a model without existing records. [1]- https://github.com/odoo/enterprise/blob/83640d21b2c31ed9d572c48e02a9aeea9eb1607b/documents/models/documents_workflow_rule.py#L113 sentry-6792079496 Forward-Port-Of: odoo/enterprise#93843 Forward-Port-Of: odoo/enterprise#91888
Bank transaction matching now avoids treating foreign exchange fees or similar bank charges as partial payments. It also requires closer matches between payment references and invoices, reducing incorrect reconciliations and helping accounting teams process bank statements more reliably.
Original PR description
In case of foreign payment using a bank account in another currency, banks can reflect the foreign currency exchange fee on another bank account belonging to the company and in its main currency. Fr…
In case of foreign payment using a bank account in another currency, banks can reflect the foreign currency exchange fee on another bank account belonging to the company and in its main currency.
Fr example: in a EUR company having in the same bank (e.g ING) both an USD and a EUR account, making a payment using the USD bank account gets you effectively 2 bank transactions while you initiated only one:
- the payment in the USD account and
- the currency diff fee in the EUR account.
In this particular use case, the communication on the currency diff fee reflects the one from the payment and, depending on the reconciliation order, that currency diff could be taken as a partial payment
because we were matching on the words in payment_ref regardless of the currency used, while it shouldn't and must be processed as a bank fee.
The outstanging payments are now only matched when the account.payment memo and the statement line payment_ref exactly match, and if the journal is the same. The algorithm for invoices matching doesn't change except we explictly remove the outstanding accounts from the list of reconcilable accounts to search on.
Previously, a match between an invoice ref and a transaction payment_ref could occure even if the matching word wasn't complete.
E.g: invoice ref: INV/2025/01/10
transaction payment_ref: INV/2025/01/100
To be sure this isn't the case anymore, we check that the matching words are properly surrounded by a "finishing character".
task-5023163
Forward-Port-Of: odoo/enterprise#93016
Forward-Port-Of: odoo/enterprise#92950Odoo Studio now correctly handles the special technical access group when setting field visibility. This prevents fields from unexpectedly disappearing and lets users manage these visibility settings consistently in and out of debug mode.
Original PR description
Steps to reproduce ================== - In debug mode - Go to Contacts - Open any record - Open studio - Click on any field - Add the "Extra rights / Technical Features" group to "Allow visibility to…
Steps to reproduce ================== - In debug mode - Go to Contacts - Open any record - Open studio - Click on any field - Add the "Extra rights / Technical Features" group to "Allow visibility to groups" => The group is not displayed as a tag - Restore the view - Now without debug mode (?debug=0), repeat the same steps => The field disappears, we need to toggle "Show Invisible Elements" to see it again Cause of the issue ================== https://github.com/odoo/odoo/pull/179354/commits/15aeaf88c268f047b8b83a5aa66f5da246c2b675 When calling get_views, the "base.group_no_one" is removed from the groups attribute and "invisible" is set to true if we are in debug mode. Solution ======== Adding "base.group_no_one" is still the way to have the expected behavior for now. We override some ir.ui.view functions when in studio to be able to edit it. According to the docstring of _postprocess_debug_to_cache, this feature is temporary. Another solution will be needed in the future. opw-4969262 Forward-Port-Of: odoo/enterprise#93435 Forward-Port-Of: odoo/enterprise#91647
The payslip list now shows the correct action buttons depending on the payroll context, fixing a confusing “New/Off-Cycle” button display. This helps payroll users choose the right action and reduces mistakes when creating or managing payslips.
Original PR description
Fix the "NewOff-Cycle" Add test to be sure that depending on the context, good control panel buttons are shown.
Odoo Sign now validates uploaded PDFs more reliably so unsupported encrypted files are rejected before signing. This prevents users from reaching a server error when completing a signature flow, improving reliability for document signing.
Original PR description
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following…
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following [pdf](https://drive.google.com/file/d/1M0_VzWLzv-lSZ-IlI9Zmx-M7jFGvtJJj/view?usp=sharing)> Sign the document using `Sign now` * Validate and send completed document `AttributeError: 'NoneType' object has no attribute 'seek'` **Cause:** This occurs because [1] returns `None` to the variable `output` at [2] which in turn passes the `None` value to [3] causing the error. Error occurs in python 3.12+, because it does not throw an exception in `_check_pdf_data_validity`. **Solution:** * Add a validation to prevent upload of unsupported files. [1]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_document.py#L242-L243 [2]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_completed_document.py#L33-L34 [3]: https://github.com/odoo/odoo/blob/033c7a63bdf3d10d9d2c5084959fd34f52011bea/odoo/tools/pdf/signature.py#L51 **Sentry-6784800544,6802557168** Forward-Port-Of: odoo/enterprise#91766
This update fixes how the eMsigner signing service retrieves the system URL. It helps prevent connection or redirection issues when users access e-signature features through the controller.
Original PR description
in this commit, get the url from request.env['iap.account'] instead of self as in controller we don't have access to get_base_url.
The ESG employee commuting report now keeps its internal report entries in a stable order. This prevents records from appearing to change between views or refreshes, improving consistency for users reviewing commuting data.
Original PR description
The esg commuting report uses ROW_NUMBER to generate record ids, which is apparently reevaluated in each query, which can lead to unstable ids. This PR adds an ORDER BY clause to ensure a deterministic behavior.
The Dutch tax closing process now uses the updated report label when calculating rounding. This prevents tax closing entries from incorrectly reducing the amount to pay or receive to zero, helping businesses keep accurate tax balances.
Original PR description
In this commit[^1] they reformatted the Dutch tax report, renaming the expression labels of the lines. The functionality that does the rounding of the amount to pay/receive depends on that label to compute the correct rounding amount. Currently the Dutch tax closing entry will always end up with a balance to pay/receive of 0.0 because of that (the whole balance is "rounded"). This commit fixes that by pointing the rounding logic to the new expression label used on the total line. [^1]: https://github.com/odoo/odoo/commit/6078dafa68db120a3bf20e0c3e33b3886798985d
Code cleanup and technical improvements
Rental stock planning has been updated to use the shared forecast horizon setting, keeping availability calculations aligned with the rest of inventory planning. Related planning tests were adjusted to keep manufacturing planning checks reliable after this internal change.
Original PR description
task 4779169