Daily updates from Odoo
Thursday, February 13, 2025
25 changes · master
Enhancements to existing features
CRM Enterprise now relies on the shared community definition for won/lost opportunity status. This keeps activity reporting aligned with the latest opportunity classification rules and reduces differences between editions.
Original PR description
Move 'won_status' field to community. Task-2654916 Co-Authored-By: Raoulette Co-Authored-By: Micheline
Gantt views now show clearer, more informative date headers and tooltips, making schedules easier to read and less ambiguous. Day and year views were adjusted so hours and months are displayed more comfortably, improving usability across planning-related screens.
Original PR description
We review the group/col headers of the gantt view: - dates are formatted in a way that more information is displayed and should be unambiguous - titles are set: they give more information (or the same information if the original information is precise enough) on the dates - In range 'Day', the hours are no longer set in bold - In range 'Year', the columns have a bigger minimal width so that the months are well separated and readable. Task ID: 4535648
Businesses can once again manage Peppol invoices directly from the Documents app. This helps teams keep electronic invoice processing connected to their document workflow, reducing manual handling and improving operational continuity.
Original PR description
Add back the possibility to handle Peppol invoices in Documents. task-4394408
Marketing automation campaigns can now use filters that update over time, such as targeting customers who ordered within the last three months. Website sales also gains a ready-made anniversary campaign template, helping businesses run timely customer engagement flows without manually refreshing campaign criteria.
Original PR description
Allow marketing activities to composer dynamic domains instead of only static ones. This allows campaigns to specify relative time relations, enabling flows like sending a mailing to users who have ordered something within the last 3 months for example. We also add a "birthday" flow for website_sale that was kept on hold because dynamic domains were not supported. task-4240689
Knowledge articles can now begin directly with an embedded list, kanban, or calendar view and keep that view aligned at the top. Template titles are no longer inserted into the article body, and editing safeguards make it easier to remove the first line while ensuring the article still keeps valid content structure.
Original PR description
This commit adds a new css rule to enable articles starting by an embedded view to stick to the top of the article. This display enables the user to create articles with only their embedded view inside it. This commit also removes the insertion of titles inside the article's body for the helper's templates. These templates should better represent an article containing only an embedded List/Kanban/Calendar. It also adds a new plugin to Knowledge that handles the deletion of an article's 1st line. This way when a user wants a clean article with only the embedded view on top it's easier to do so. This plugins also ensures that every article contains at least a paragraph if it happens the user deletes one too many. task-3231001
Rental, subscription, and appointment sales now follow the updated ecommerce cart process. This keeps these sales flows aligned with the main website shop changes and helps maintain reliable cart behavior for customers.
Bank synchronization and payment initiation now use a richer connection status, giving clearer information about provider support and activation state. The option to initiate payments is shown only when the customer has enabled payment initiation for the connected bank, reducing confusion and preventing unavailable actions.
Original PR description
This commit has 2 different purposes: 1. Connect the bank synchronization and the payment module to a new API route to get the connection status instead of only getting the consent expiring date. This new route still provides the consent expiring date but will also provides more information about the payment initiation. Three new information are provider, whether the payment feature is enabled, whether the payment activation is requested to the provider and whether the feature is activated with the provider. 2. This second purpose is directly linked to the first one, it modifies the Initiate payment visibility. Before it was visible once the bank journal was connected to a bank synchronization, now it's visible once the bank journal has a bank synchronization where the payment initiation feature is enabled by the customer. task-4532157
Bank reconciliation can now use patterns found in transaction details to identify the right reconciliation model. This helps accounting teams match bank transactions more accurately and reduce manual review.
Original PR description
This commit will add the logic to search based on a regex from the transaction details field of the bank rec widget. task: 4378289
Custom reporting filters have been reorganized so their special logic runs only for the specific reports that need it. This reduces unintended effects across other reports and helps keep accounting report behavior more reliable.
Original PR description
This commit makes sure that a custom report adding custom logic for the report filters is doing so in a custom component, not in a patch. This means the logic will only be run when requesting the custom report, not for all reports. task-4510055
The Envia delivery settings now include a direct link to related delivery methods. This makes it quicker for users to review or adjust shipping options from the settings area.
French tax report exports can now handle empty declarations, allowing companies to submit a VAT return even when there is no tax to report. The system also creates a follow-up activity when an electronic filing fails, making errors easier to spot without manually checking each company.
Original PR description
There were 2 missing points in the tax report export in France: 1. Not possible to send empty tax report 2. The only way to know if a tax report has an error is to connect to the company This commit solves these issues by the following: 1. Adding `zone KF` to the XML export (and showing a user a warning with `check box "déclaration néant" checked`) which allows for sending empty tax report 2. If the EDI export is in error, an activity is added to the closing entry like the following https://app.excalidraw.com/l/65VNwvy7c4X/7ed0dmqcHNM task-4370133
The checkout payment setup for Shiprocket and UPS now records whether each payment method supports manual capture. This helps ensure payment handling aligns with carrier checkout flows and reduces the risk of using incompatible payment options.
Original PR description
task-3949151 See also: - https://github.com/odoo/odoo/pull/170541 - https://github.com/odoo/upgrade/pull/6810
The mobile emoji picker in Knowledge and chatter now opens in the expected place, replacing the keyboard without letting users scroll outside it. This makes adding emojis smoother and more consistent with the Discuss experience.
Original PR description
**Current behavior before PR:** In mobile view, the emoji picker in the chatter and knowledge modules replaces the native keyboard but does not take its proper position, allowing users to scroll outside the picker. **Desired behavior after PR is merged:** In mobile view, the emoji picker in both the chatter and knowledge modules will function similarly to the discuss module’s picker—replacing the native keyboard and maintaining the correct position. **task-id**:3757047
Resolved issues and error corrections
This fix ensures dark mode styling files are only loaded when dark mode is used, instead of being included in the standard light mode view. It helps prevent visual inconsistencies in restaurant appointment planning screens that use Gantt views.
Original PR description
This commit fixes an asset issue with web_gantt where the dark mode specific assets from web_gantt were included in the main (light mode) assets from pos_restaurant_appointment. Part of task-4571228
Users with Invoicing and Banks access can now open customer statements, partner ledger information, and follow-up tools without needing full Accounting access. This aligns reporting permissions with the newer invoicing role and makes key customer payment workflows available to the intended users.
Original PR description
With the introduction of Invoicing Enterprise (access to bank recon etc) a new user group was created "Invoicing & Banks" (`group_account_basic`)
This group should also be able to access the customer statement / partner ledger (from the partner smart button), as well as the followup wizard.
Implications: The module dependencies change because account_reports are now available with just Invoicing.
Old dependencies
----------------
- `account_asset` ... (and other accounting features)
- `account_reports` (auto installed)
- `accountant` **[Accounting]**
- `account_accountant` (auto installed)
- `account` **[Invoicing]**
New
---
- `account_asset` ... (and other accounting features)
- `accountant` **[Accounting]**
- `account_reports` (auto install)
- `account_accountant` (auto install)
- `account` **[Invoicing]**
Task-4465208The WhatsApp test coverage was updated to match recent shared platform changes around attachment handling, including voice attachments. This helps keep WhatsApp messaging behavior reliable and aligned with the latest expected workflows.
The Sign app now has the missing icon mapping needed to show the correct sidebar icons when new item types are used. This prevents errors and keeps the signing template setup experience working smoothly.
Original PR description
After #75291 we are using `icon_type` map to display the sidebar type icon if it's not defined on the item type. However the `icon_type` map wasn't defined anywhere which causes an error with new types.
Code cleanup and technical improvements
The Sign app’s selection field has been streamlined after recent interface changes. This reduces unnecessary processing and makes the feature easier to maintain, with no expected disruption for users.
Original PR description
Following recent Sign UI changes, the selection field no longer relies on the tags view. This commit refactors the selection field logic to remove the `many2many_tags_field` component. This significantly reduces overhead and improves maintainability. Unused `Many2OneField` have also been removed from SignTemplateSidebar.
Miscellaneous changes
Before this commit, the context of the action was just ignored in the grid view and so the default values stored inside that context are not taken into account during `grid_update_cell` method. Steps to reproduce the issue ---------------------------- 0. Install timesheet_grid module 1. Open Employees app 2. Click on an employee to open the form view 3. Click on the timesheets smart button to view the timesheet grid view for that employee 4. Navigate to a week that already contains hour
Original PR description
Before this commit, the context of the action was just ignored in the grid view and so the default values stored inside that context are not taken into account during `grid_update_cell` method. Steps…
Before this commit, the context of the action was just ignored in the grid view and so the default values stored inside that context are not taken into account during `grid_update_cell` method. Steps to reproduce the issue ---------------------------- 0. Install timesheet_grid module 1. Open Employees app 2. Click on an employee to open the form view 3. Click on the timesheets smart button to view the timesheet grid view for that employee 4. Navigate to a week that already contains hours for the current user 5. Update the grid cell containing a timesheet to reduce the number of hours for instance 6. Update another cell without any timesheets linked and set a hour Current Behavior ---------------- After refreshing the page and going to the same week, the changes made in step 5 and 6 are no longer applied. The reason is because those changes have generated new timesheets for the current user instead of the employee displayed in the form view before doing the step 3. Expected behavior ----------------- The grid view should be unchanged after refreshing the page, the changes made in 5 and 6 should be applied without any issues. opw-4491850 Forward-Port-Of: odoo/enterprise#79076
When installing the module, do not assign new leave type to the default company, as in multi-company context that default company may not be a UAE based company, preventing users to see/select those new leave types. This commit force no company when creating those new leave types. opw-4353549 Forward-Port-Of: odoo/enterprise#78383
Original PR description
When installing the module, do not assign new leave type to the default company, as in multi-company context that default company may not be a UAE based company, preventing users to see/select those new leave types. This commit force no company when creating those new leave types. opw-4353549 Forward-Port-Of: odoo/enterprise#78383
When the user tries to publish a job position on the job board monster, a traceback will appear. Steps to reproduce the error: - Install ``hr_recruitment_integration_monster`` module - Go to Recruitment > Applications > By Job Positions > Click on the dropdown menu of any job position > Configuration (Make sure that the job position is published on the website) - Add Salary Range > Publish on Job Board > Job Board: Monster.com > Post Traceback: ``` AttributeError: 'int' object h
Original PR description
When the user tries to publish a job position on the job board monster, a traceback will appear. Steps to reproduce the error: - Install ``hr_recruitment_integration_monster`` module - Go to Recruitment > Applications > By Job Positions > Click on the dropdown menu of any job position > Configuration (Make sure that the job position is published on the website) - Add Salary Range > Publish on Job Board > Job Board: Monster.com > Post Traceback: ``` AttributeError: 'int' object has no attribute 'monster_id' ``` https://github.com/odoo/enterprise/blob/245a38f320db56fd22d946471f626adf6cfeb397/hr_recruitment_integration_monster/wizard/hr_recruitment_post.py#L130-L146 Here, ``monster_time_unit`` is integer, it does not have ``monster_id`` attribute. sentry-6027416420 Forward-Port-Of: odoo/enterprise#73055
In odoo 18.0 the `journal_id` on `hr.payroll.structure` [became not required](https://github.com/odoo/enterprise/commit/fb59524a95b0f78112002d1e4d5ad3d6c301de7e#diff-761891fe4e3aa9cb1df74ffca5261004adaf8ac8c3df5857035953e5318be967L16-R16). And in the demo data for this module `action_payslip_done` is called, which [requires](https://github.com/odoo/enterprise/blob/4784d4a48d11c72afb05f2bc7c9062c5644bbf75/hr_payroll_account/models/hr_payslip.py#L53-L54) the payroll structure to have a journal.
Original PR description
In odoo 18.0 the `journal_id` on `hr.payroll.structure` [became not required](https://github.com/odoo/enterprise/commit/fb59524a95b0f78112002d1e4d5ad3d6c301de7e#diff-761891fe4e3aa9cb1df74ffca5261004adaf8ac8c3df5857035953e5318be967L16-R16). And in the demo data for this module `action_payslip_done` is called, which [requires](https://github.com/odoo/enterprise/blob/4784d4a48d11c72afb05f2bc7c9062c5644bbf75/hr_payroll_account/models/hr_payslip.py#L53-L54) the payroll structure to have a journal. `hr_payroll_structure_ken_employee_salary` is used as the structure for all the payslips in the demo error in runbot [build](https://runbot.odoo.com/runbot/build/73486292) Forward-Port-Of: odoo/enterprise#77365
…artner` children The `title` field was removed from `res.partner` in [this commit](https://github.com/odoo/odoo/commit/0b8bd891fad1c84607fe147a32d705917341fed7). A [previous fix](https://github.com/odoo/enterprise/commit/81338f4b417399d0636d5dfde47b46dec3a74d97) addressed the issue for the main partner record, but the `title` field was still being referenced for its `child_ids`. This commit ensures that child partners are also handled correctly. no-task Forward-Port-Of: odoo/enterp
Original PR description
…artner` children The `title` field was removed from `res.partner` in [this commit](https://github.com/odoo/odoo/commit/0b8bd891fad1c84607fe147a32d705917341fed7). A [previous fix](https://github.com/odoo/enterprise/commit/81338f4b417399d0636d5dfde47b46dec3a74d97) addressed the issue for the main partner record, but the `title` field was still being referenced for its `child_ids`. This commit ensures that child partners are also handled correctly. no-task Forward-Port-Of: odoo/enterprise#79051
Before this commit the class `TestMockedDeliveryUSPS` used `'standard', '-external'` which is the opposite of what it was supposed to do. As a result the tests were run during normal builds, and led to errors when the tests were run without demo data. This commit also removes the reference to demo data to make the tests more robust. Runbot Errors: + https://runbot.odoo.com/odoo/action-573/114550 + https://runbot.odoo.com/odoo/action-573/114551 + https://runbot.odoo.com/odoo/action-573/1
Original PR description
Before this commit the class `TestMockedDeliveryUSPS` used `'standard', '-external'` which is the opposite of what it was supposed to do. As a result the tests were run during normal builds, and led to errors when the tests were run without demo data. This commit also removes the reference to demo data to make the tests more robust. Runbot Errors: + https://runbot.odoo.com/odoo/action-573/114550 + https://runbot.odoo.com/odoo/action-573/114551 + https://runbot.odoo.com/odoo/action-573/114552 Forward-Port-Of: odoo/enterprise#78706
Currently a ``ParseError`` is arising when the user installs the ``hr_recruitment_integration_monster`` module after deleting all types from Employment Types. Steps to reproduce: --- - Install ``hr_contract`` module - Open ``Employment Types`` and delete all types - Now try to install the ``hr_recruitment_integration_monster`` module. Traceback: --- ``` ParseError: while parsing /home/odoo/src/enterprise/18.0/hr_recruitment_integration_monster/data/hr_contract_type_data.xml:8, somew
Original PR description
Currently a ``ParseError`` is arising when the user installs the ``hr_recruitment_integration_monster`` module after deleting all types from Employment Types.
Steps to reproduce:
---
- Install ``hr_contract`` module
- Open ``Employment Types`` and delete all types
- Now try to install the ``hr_recruitment_integration_monster`` module.
Traceback:
---
```
ParseError: while parsing /home/odoo/src/enterprise/18.0/hr_recruitment_integration_monster/data/hr_contract_type_data.xml:8, somewhere inside <record id="hr.contract_type_temporary" model="hr.contract.type">
<field name="monster_id">2</field>
</record>
```
This commit solves the above issue by using ``noupdate="1"`` and ``forcecreate="False"`` to bypass record creation if it violates checks.
sentry-5731062091
Forward-Port-Of: odoo/enterprise#76782