Daily updates from Odoo
Navigate
Branch
Sunday, September 7, 2025
23 changes
22 changes
New functionality added to Odoo
Managers can now save appraisal goals as templates and reuse them for other employees, reducing repetitive setup work. Templates can include sub-goals, making it easier to standardize more complex performance objectives across teams.
Enhancements to existing features
The user preferences and administrator user forms have been streamlined to show more relevant information and use consistent naming. Users can now update more of their own employee information from preferences, with HR teams notified of relevant changes, and signature font loading is more reliable.
Original PR description
This PR aims to improve the UI of the forms allowing users to read or modify their own data or those of other users. It has been spit in several commit. - Commit 1: remove unused fields. - Commit 2: make sure fonts are loaded before rendering font selection widget in sign. - Commit 3: fields of the preferences form and the user form for administrators are modified to only display relevant fields. The preferences form is now displayed in a modal. - Commit 4: users can edit their own employee data from the preferences form. The hr employee are notified when some changes are done. The notification is sent by the hr module and not by the hr_payroll module anymore. - Commit 5: the preferences form is sometime referred as the profile form. From now on, it is only referred as the preferences form. task-4775990
Helpdesk teams can now start and manage product returns more easily from tickets, with clearer links between returns and the related customer issue. The update improves return creation, address selection, and visibility controls so teams spend less time correcting return details.
Original PR description
- make return button always visible - create new return when confirming a return for this new picking - link return with helpdesk ticket - create `Ticket` stat button in return form - add visibility rules for the `Ticket` stat button - select the customer delivery address if he set it - exclude `receipts` from the `Delivery to Return` domain - fix delivery generation when creating return - make the return line warning disabled in case no picking is selected - added test file to ensure the code flow Task-4781404
The online rental shop module has been adjusted to stay aligned with recent changes in the core website sales platform. This helps keep rental product pages and checkout flows working consistently as the broader system evolves.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/225092
Appointment-related website snippets now get more appropriate sizing when placed inside grid layouts. This helps pages built with these snippets look more consistent and polished without extra manual adjustment.
Original PR description
In PR [1], the inner snippets were allowed to be dropped as grid items. Their grid column span can be specified with the `t-grid-column-span` attribute so they have more appropriate dimensions. This commit therefore adapts the enterprise snippets. [1]: https://github.com/odoo/odoo/pull/223990 task-3369611
Barcode-based inventory adjustments have been revamped to make stock counts easier and more reliable for business users. The update adds clearer confirmation flows, counting requests, configuration options, and supporting access controls so warehouse teams can manage inventory checks more efficiently.
Original PR description
Task-4681370
Resource-based appointment calendars now use resource filters instead of attendee filters. This makes it easier for staff to find relevant bookings without searching through attendee lists, improving calendar usability for resource scheduling.
Original PR description
Purpose ======= Removing the attendee filter on the resource based appointment calendar view as filtering on resource based events using the attendees is tedious. Add a filter on the linked appointment type resources instead. Specification ============= The attendee filter isn't adequate when talking about resource based bookings. The bookings aren't displayed if you don't set one of its attendee in the filters and looking through attendees using the "+ Add attendee" widget in the sidebar is not a viable solution. Technical ========= Removing all the 'filters', 'write_model', 'write_field', 'filter_field' and 'avatar_field' attributes from the 'partner_ids' field as using any of those automatically add the field in the filters (they are OR-ed to add the filter info in the calendar arch parser). Task-5059001
Task templates are now stored separately from day-to-day tasks, reducing confusion and preventing templates from appearing in normal task workflows. This makes task lists cleaner and helps teams avoid accidentally using or editing templates as real work items.
Original PR description
_*= industry_fsm_report,industry_fsm_sale,industry_fsm_stock, timesheet_grid, project_enterprise, project_helpdesk, website_appointment_sale_project ### Challenge: Previously, both regular tasks and…
_*= industry_fsm_report,industry_fsm_sale,industry_fsm_stock, timesheet_grid, project_enterprise, project_helpdesk, website_appointment_sale_project ### Challenge: Previously, both regular tasks and task templates were stored in the same `project.task` model and distinguished using the `is_template` field. This caused unnecessary domain filters and confusion across features where task templates were not expected. Every task-related action required an explicit domain to exclude task templates. If the domain was missing, both records would appear, leading to confusion and potential misuse. ### In this improvement: - We introduced a new model `project.task.template` for storing task templates. - All existing tasks with `is_template=True` have been moved to the new model. - Removed the chatter from project.task.template to keep the interface clean and reduce unnecessary activity logs. - Archived task templates older than 3 months as part of routine system cleanup **Example (Before):** **Model**: `project.task` | Name | Allocated Hour | Worksheet | Subtask | Priority | Template | |------------------|----------------|-------------------|-------------|----------|----------| | Task A | 20 | Default Worksheet | Subtask 1 | High | False | | Template Task B | 20 | Default Worksheet | Subtask 2 | Low | True | ------------- ### **Now:** **Model**: `project.task` | Name | Allocated Hour | Worksheet | Subtask | Priority | |---------|----------------|-------------------|-----------|----------| | Task A | 20 | Default Worksheet | Subtask 1 | High | **Model**: `project.task.template` | Name | Allocated Hour | Worksheet | Subtask | Priority | |------------------|----------------|-------------------|-------------|----------| | Template Task B | 20 | Default Worksheet | Subtask 2 | Low | This separation ensures clearer architecture and avoids accidental inclusion of templates in task operations. task-4919945
Several business dashboards now use newer spreadsheet capabilities such as geo charts, carousel views, and improved sorting. This makes key CRM, payroll, marketing, purchasing, rental, and subscription metrics easier to explore and present.
Payroll users now see worked days and salary inputs in separate tabs instead of a combined worked days and inputs tab. This makes payslip review easier by placing additional salary items in the dedicated salary input area across affected payroll localizations.
Original PR description
We split the worked days & inputs tab into worked days and the salary input tab which already exists.
Location forms now show a barcode preview when a barcode is set, making warehouse setup easier to verify. The obsolete scrap-location flag was replaced by the existing Inventory Loss location type, reducing duplicate configuration and simplifying location organization.
Original PR description
- Removed the `Is scrap location` field and replaced it with the `Inventory Loss` location type because `Is scrap location` is useless when we already have an lcoation type of inventory Loss. - A barcode preview is now displayed on the location form view when a barcode is set for the location. TaskId: 4728397
This update simplifies Danish tax return handling by merging related reporting modules and adding Denmark-specific VAT return support. It also helps users submit Intrastat and EC Sales List documents with clearer guidance, downloadable files, deadlines, and Danish translations.
Original PR description
This commit will merge the two modules, it will be easier for user to use the tax return api. Also, following the implementation of the Tax returns feature in 18.3 which was focused on the general implementation and Belgium, we want to add the specification for other country and in this case Denmark. Instrat and ec sales list is a part of this which is generated when the VAT Return is submitted. task-4826286
The invoice OCR can now recognize when an uploaded document is a receipt. When a receipt is detected, the system updates the document type automatically, reducing manual corrections and helping accounting teams process documents faster.
Original PR description
The OCR can now detect whether a document is a receipt. If it is, it will automatically update the `move_type` accordingly. task-[4776275](https://www.odoo.com/odoo/project/2068/tasks/4776275)
The appointment calendar now focuses resource-based bookings on appointment resources instead of attendees, making it easier for staff to find the right bookings. Related calendar and Gantt booking screens were also streamlined so users can create, edit, and manage appointments with clearer capacity handling.
Original PR description
Purpose ======= Removing the attendee filter on the resource based appointment calendar view as filtering on resource based events using the attendees is tedious. Add a filter on the linked appointment type resources instead. Specification ============= The attendee filter isn't adequate when talking about resource based bookings. The bookings aren't displayed if you don't set one of its attendee in the filters and looking through attendees using the "+ Add attendee" widget in the sidebar is not a viable solution. Technical ========= Removing all the 'filters', 'write_model', 'write_field', 'filter_field' and 'avatar_field' attributes from the 'partner_ids' field as using any of those automatically add the field in the filters (they are OR-ed to add the filter info in the calendar arch parser). Task-5059001
Belgian credit time is now managed through work entry types in working schedules instead of a general part-time setting on employee versions. This makes Belgian payroll setup better aligned with local legal rules and clarifies how HR teams create credit time arrangements through the schedule change wizard.
Original PR description
task-4578909
This update changes how tax report lines handle reverse-charge and similar tax tag scenarios, reducing the risk of amounts being shown with the wrong sign. It improves the reliability of accounting and statutory reports across multiple country-specific reporting modules.
Original PR description
See community commit for more details
Resolved issues and error corrections
The Swiss payroll occupation report can no longer be accidentally edited from the list view. This prevents users from triggering system errors while keeping the report available for viewing and analysis.
Original PR description
The model `l10n.ch.occupation` is backed by an aggregated SQL view (GROUP BY). PostgreSQL does not support inserts or deletes on such views, so exposing Create/Delete in the UI led to errors. This change makes the report safe to use by disabling creation and deletion on the list view (`create="0" delete="0"`), keeping it read-only while fully browsable. task-5042279 Forward-Port-Of: odoo/enterprise#93523
This update improves electronic invoicing behavior for Brazil, Ecuador, and Colombia when handling BIS3 self-billed invoices. It reduces incorrect customer/supplier handling on Colombian vendor bills and makes related validation logic easier to maintain.
Original PR description
#### [IMP] l10n_{br,ec}_edi: Refactor _check_move_constraints
We do this to simplify inheritance.
#### [FIX] l10n_co_dian: Don't swap customer and supplier if vendor bill
The logic to handle this case has been moved to the UBL 2.0 builder.
Community PR: https://github.com/odoo/odoo/pull/222658
iap-apps PR: https://github.com/odoo/iap-apps/pull/1155
task-4774669The Spanish Generic Tax Return Excel export now shows dates in the expected day/month/year format instead of month/day/year. This prevents confusion and helps Spanish accounting reports match local date conventions.
Original PR description
Changed date format from MM/dd/yyyy to dd/MM/yyyy in reports. An issue with the date formatting for the exported Excel file of the Generic Tax Return report for Spain. In the XLSX file, the dates are…
Changed date format from MM/dd/yyyy to dd/MM/yyyy in reports. An issue with the date formatting for the exported Excel file of the Generic Tax Return report for Spain. In the XLSX file, the dates are generated in the mm/dd/yyyy but they should be generated in the dd/mm/yyyy format. Steps to reproduce this error: 1. Create a new database using Odoo version 18. 2. Activate the module: “Spain - Accounting (PGCE 2008)” (l10n_es). 3. Create a new company and set Spain as the country. 4. Create a new quotation and select the company created in step 3. 5. Confirm the invoice generated from the quotation. 6. Go to Accounting → Reporting → Tax Report and select "Generic Tax Report". 7. Click the gear icon and select "VAT Record Books (XLSX)". <img width="960" height="540" alt="Ticket_Image_Editing (14)" src="https://github.com/user-attachments/assets/7ef6b8ec-4c31-4d4a-8724-d197fa177bf2" /> OPW https://www.odoo.com/es_ES/my/tasks/5010210 MT-10457 @moduon Forward-Port-Of: odoo/enterprise#92158
This update removes old, unused settings fields from the Chilean reporting module. It keeps the system cleaner and reduces the risk of confusion or maintenance issues without changing current business workflows.
Original PR description
Before this PR: fields for l10n_cl_reports had been deprecated by other commits, but they weren't removed from models. After this PR: res_company.py and res_config_settings.py with those fields removed. Not used anymore.
Code cleanup and technical improvements
Inventory now uses a simpler, more flexible way to connect related business documents such as sales orders, purchase orders, transfers, and manufacturing orders. This improves traceability across inventory and manufacturing flows, while changing how purchase requests are grouped for suppliers based on scheduled dates.
Original PR description
The model `procurement.group` is replaced by a more flexible one: `stock.reference`. The first one was somehow not well understood and a bit limited by its many2one links to other business model…
The model `procurement.group` is replaced by a more flexible one: `stock.reference`. The first one was somehow not well understood and a bit limited by its many2one links to other business model (Sales Order, Purchase Order, ...). The reference is made of a name and many2many to all the documents integrated with Inventory. It's purpose has been shrank to the minimal "make links between object". For instance opening the manufacturing order created for a MTO sale. The merge of stock move is delegated to existing parameters (`sale_id`, created_purchase_line_ids`, ...) The `mrp.production` needed an extra effort to group them according to inheritance relationships. This commit add a new object to group productions together either in a backorder relation or in a child-parent one. This allow for instance to have a Sale Order linked to the MTO product of the sold product and the production them selves to be linked to the SO *and* the potential child MOs. The procurement group propagation, before set on the Stock Rule, allowing the stock moves to be merged in an existing picking or not has been removed and replaced (for the creation of purchase order only) by a new parameter on `res.partner` allowing the group of Request for Quotation base on the scheduled date of the potential merge candidate (never, same week, same month, always). All other merge scenarios should use batches and waves transfers. task: 4279803
Miscellaneous changes
After the switch to Weblate, we now only use the `.weblate.json` file instead of the previous `.tx/config` file. We update the `.weblate.json` file to reflect the current state of the module translations and remove the `.tx/config` file. Forward-Port-Of: odoo/enterprise#93872 Forward-Port-Of: odoo/enterprise#93730
Original PR description
After the switch to Weblate, we now only use the `.weblate.json` file instead of the previous `.tx/config` file. We update the `.weblate.json` file to reflect the current state of the module translations and remove the `.tx/config` file. Forward-Port-Of: odoo/enterprise#93872 Forward-Port-Of: odoo/enterprise#93730
1 change
Resolved issues and error corrections
Updates the EU distance selling VAT mappings to reflect Romania's VAT reform effective August 1, 2025, where the previous 5% and 9% reduced rates become a single 11% reduced rate. This helps businesses apply the correct VAT when selling between Romania and other EU countries.
Original PR description
As of August 1, 2025, Romania implemented significant changes to its fiscal code: - The 5% and 9% reduced VAT rates were unified into a single reduced rate of 11% This commit updates the EU distance selling VAT mapping to reflect these changes: - From Romania to each EU country - From each EU country to Romania task-5005391 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222644