Daily updates from Odoo
Friday, February 9, 2024
34 changes · 17.0
New functionality added to Odoo
This update adds support for Indian national and festival holidays in the HR system, including Makar Sankranti, Republic Day, Independence Day, and Gandhi Jayanti. The holidays are now automatically configured when the Indian localization module is installed, making it easier for Indian companies to manage employee time off and holiday schedules.
Original PR description
In this commit we remove the Public holidays from `data` and add it using post_init_hook. India Festival and National Holidays: - Makar Sankranti - January 14th - Republic Day - January 26th - Independence Day - August 15th - Gandhi Jayanti - October 2nd task-3693329
Enhancements to existing features
Database indexes have been added to the VoIP call records to speed up searches for recent calls and missed call counts. This improvement ensures the system remains responsive even when the call history grows to millions of records in active deployments.
Original PR description
## Description Add missing index on `user_id` and `partner_id` to support the searches done in `get_recent_phone_calls` and `_get_number_of_missed_calls`. In a long living database that is making heavy use of the module, the table can grow to the millions of records.
This improvement ensures that mobile and phone numbers for job applicants are automatically synchronized with their associated partner records. If a partner doesn't exist yet, the system will create one using the applicant's contact information. This streamlines the recruitment process by keeping contact details consistent across the system.
Original PR description
In this PR, the mobile/phone number is in sync with the partner if the partner is not there then it will be generated based on the applicant information Task-3635976
When new employees are created from job applicants, they will no longer receive an email notification about their creation. Instead, a log entry will be recorded internally. This change improves the employee onboarding experience by reducing unnecessary automated emails while maintaining a record of the action.
Original PR description
So far when new employee was created from applicant he got a mail with notification about employee creation. It's not a desired behaviour so this change makes just a log note about it. There was also a needed to make a small change in mailing - message_log_with_view method is no longer private as it needs to be used in this case. task-3621545 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#150981 Forward-Port-Of: odoo/odoo#146130
Resolved issues and error corrections
Dropdowns in the timesheet timer kanban view were appearing behind task cards, making them unusable. This fix adjusts the layering (z-index) of the pinned header to ensure dropdowns display on top of the cards, restoring full functionality.
Original PR description
Im timesheet_grid when starting a timer in the kanban view, the dropdowns are displayed behind the o_kanban_record, making it impossible to use. This is due to a change made on the pinned_header z-index introduced in commit[1]. This commit applies a z-index-1 on the pinned_header element, making the dropdowns contained inside this div being able to be displayed above the kanban cards. [1]: https://github.com/odoo/enterprise/commit/7b1f18398d0d1f66269d742ef2441ef2bb41f7e6 task-3684460 | Before | | :----: | |  | | After | | |
This fix ensures that appointment details are now displayed for all appointment types, including anytime and custom appointments. Previously, details were missing for these appointment types, causing awkward blank spaces in the interface. The change improves the user experience by showing available information promptly while intelligently handling duration display based on appointment type.
Original PR description
The new design introduced in odoo/enterprise#41534 moved the details inside a column used in the several templates of the appointment flow, updating at each step. However, it is not shown for anytime and custom appointments. In order to avoid a large blank space on the right of the screen and a strange design effect, as well as to give the attendee the available details as soon as they are available, always display the details column. However, as the duration may vary in the custom category, do not show duration field at time selection for those appointments. Show duration of selected slot on detail screen. Task-3701087
This update resolves a conflict in the Indian payroll module where public holiday data was causing issues with other leave types from different localizations. The fix moves public holiday setup to occur after the system is initialized, ensuring proper company assignment and preventing overlapping leave definitions.
Original PR description
In this commit we remove the Public holidays from `data` and add it using post_init_hook. because there won't be any company defined on data in it and it will collide with other leaves that could be defined in another localization during the same time. task-3693329
This update corrects a technical error in the Sendcloud delivery integration's filter widget that was using an invalid type comparison. The fix ensures the widget functions properly when filtering delivery options, improving the reliability of the shipping selection process for users.
This fix improves how subscription payments are handled when errors occur. Previously, failed or canceled payment attempts would leave draft invoices open and save faulty payment tokens. Now, draft invoices are automatically canceled when a payment error is detected, and payment tokens are only saved when the subscription renewal is properly authorized. This prevents confusion from orphaned invoices and ensures only valid payment methods are stored.
Original PR description
Before this commit, when a customer paid a subscription from 'Generate payment link' and got an error in the transaction or if it was canceled, Odoo was creating a draft invoice (it remained open) and saving the faulty token. After this commit. the draft invoice is canceled right after the error is detected and the token is saved only if the renewal state of the subscription is authorized. Task-id: 3734247
This fix corrects an issue where invoices for EU customers without verified VAT numbers were incorrectly appearing in Spain's tax report 349. When these customers are assigned the 'Regimen Nacional' fiscal position (treated as domestic for tax purposes), their invoices should not be included in report 349. The fix ensures these invoices are properly excluded from the report.
Original PR description
Create an invoice for a customer who lives in the UE but his/her VAT number has not been verified by the VIES system, so the transaction with this partner should be considered with fiscal position 'Regimen Nacional' because the IVA should appear as a domestic customer. When creating the invoice with fiscal position 'Regimen Nacional', ensure field for tax report 349 is empty in the tab 'AEAT data' as well as tax in the invoice exists. Open Tax Report 349 Issue: There will be values for these 2 lines which should not be there, as this specific invoice should not appear in tax report 349 opw-3673456 Forward-Port-Of: odoo/enterprise#56103 Forward-Port-Of: odoo/enterprise#55504
This update corrects the label for tax unit fields in the Indian GST reporting module from "VAT Units" to "GST Units" to accurately reflect India's Goods and Services Tax system. This ensures the system uses correct terminology that aligns with Indian tax regulations and improves clarity for users working with GST returns.
Original PR description
Before this PR: The string for the `tax_unit_id` field was 'VAT Units'. After this PR: The `tax_unit_id` field's string has been renamed 'GST Units'. Task-3726861 Forward-Port-Of: odoo/enterprise#56120
This fix corrects a bug in the tax reporting engine where shared tax formulas across multiple report expressions were returning duplicate empty results, causing reports to display incorrect values. The issue occurred when two expressions from different reports shared the same tax tag formula, and the engine was incorrectly processing the results. This fix ensures the engine properly consolidates shared formulas and returns accurate calculated values.
Original PR description
It is possible that two expressions (possibly of different report, linked together by a cross_report expression) needing to be evaluated at the same time share the same tax tags formula. When this…
It is possible that two expressions (possibly of different report, linked together by a cross_report expression) needing to be evaluated at the same time share the same tax tags formula. When this case happens, the result of the engine function should be in the form {(formula, recordset_of_expr_1_and_2): result} (assuming there is no other expression to evaluate, for the sake of simplicity).
Before this fix, in this situation, the engine instead returned: {
(formula, expr_1): result,
(formula, expr_2): result,
(formula, recordset_of_expr_1_and_2): empty_value,
}
Because of that, the report ended up evalutating these expressions with an empty result. This was spotted when forward-porting https://github.com/odoo/enterprise/commit/c8beb3559b9199fc2f72773dd5dedf871cf2406b , since the new error it introduces raised in such case, since the value initially computed for expr_1/expr_2 got overwritten.
This was wrong, and was due to the fact the result dict was first initialized using the full key of the formulas_dict (hence grouping expr_1 and expr_2 into a common recordset), and then wrongly iterated on all the expressions contained in the keys. We fix that by using the full key everywhere.
Forward-Port-Of: odoo/enterprise#56162This fix resolves a problem where button boxes in subviews were being compiled in the wrong context, causing the system to crash. Now button boxes are only compiled when users actually navigate to edit that specific subview, preventing template conflicts with the main form view.
Original PR description
…s template Have a form view, with a subview form. That subview has a button_box. Before this commit, the button box was compiled in the context of the main view, eventually leading to crashes. After this commit, it is compiled only when navigation to that subview for edition. This issue and the fix are similar to odoo/odoo#149896 opw-3681966 Forward-Port-Of: odoo/enterprise#56130
This update resolves an issue where partner address information was disappearing after saving field service task records. The fix ensures that address data is properly retained when records are saved, improving data consistency and user experience in the Field Service Management module.
Original PR description
Versions: --------- - saas-16.2 Issue: ------ The partner address disappears after saving the record. Cause: ------ Starting from version 16.2, dynamic context keys are ignored for read RPCs. Solution: --------- turn the context key static and override of read for that model that checks for that key. task-3604404 Forward-Port-Of: odoo/enterprise#56076 Forward-Port-Of: odoo/enterprise#54534
Fixed an issue preventing employees without payroll permissions from creating or updating their own attendance records. Employees who manage their own attendance can now log their hours without requiring full payroll system access, improving workflow efficiency for non-HR staff.
Original PR description
Currently if you do not have any payroll rights and you are your own attendance manager, you will not be able to create or write attendances since those affect hr.work.entries that you do not have any rights on, this issue is fixed by using sudo in the work entry creation and modification task-3734639
This update brings the spreadsheet component to version 17.0.10 with several important fixes. Users will benefit from improved chart panel stability, better handling of spreadsheet exports (including proper formula formatting), corrected currency display, and enhanced keyboard shortcuts for Mac users. These changes ensure spreadsheets work more reliably and consistently across different scenarios.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/be06aa9e2 [REL] 17.0.10 https://github.com/odoo/o-spreadsheet/commit/7e6810474 [FIX] chart: fix incoherent side_pannel state Task: 3380568 https://github.com/odoo/o-spreadsheet/commit/67a98ca2a [REF] model: preserve default currency format https://github.com/odoo/o-spreadsheet/commit/6acfb3b07 [FIX] export: transform unbound references Task: 3618912 https://github.com/odoo/o-spreadsheet/commit/1ad87cd5a [FIX] export: transform unbound references Task: 3618912 https://github.com/odoo/o-spreadsheet/commit/da02417c7 [FIX] export: remove line returns in formula Task: 3618912 https://github.com/odoo/o-spreadsheet/commit/d8eef54dc [FIX] Grid: Support Mac shortcuts in `Grid` Task: 3707416
This fix resolves a crash that occurred when a warning message was logged for automation rules associated with deleted models. The system now properly handles this scenario by correcting the order of arguments in the warning function, allowing the message to be logged without causing the application to crash.
Original PR description
Steps: - Create an automation rule with a model X - Delete model X (need a way that keep the rule) Actual result: - Crash due to warning message Expected result: - Warning message is logged without issue opw-3722953 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects the visual layout of new projects by reducing the excessive gap between the email alias and project title. When creating a new project with email functionality enabled, the spacing was unnecessarily large, making the interface look awkward. The fix adjusts the spacing to provide a cleaner, more professional appearance.
Original PR description
Steps: -------- - Install project. - Go to settings and select Custom Email Servers. - Add alias domain. - Then go to the project. - Create a new project. - The gap between the email alias and project title is too much. Issue: -------- -When we create a new project the gap between the email alias and project name is too much when only the project is installed and there are no options to display. Cause: ---------- -The margin-top taking too much space. Fix: ----- -After this commit the space between email-alias and project name is decreased. task-3550638 Forward-Port-Of: odoo/odoo#153091 Forward-Port-Of: odoo/odoo#139908
This fix prevents users from deleting a company that has subsidiary branches, which was causing system errors. Previously, deleting a parent company with child branches would result in persistent "Bad Request" errors that affected all subsequent operations. Now the system will prevent this deletion and maintain data integrity.
Original PR description
### Steps to reproduce
* create the following hierarchy of companies:
```
Company
└── Branch A
└── Branch B
```
* delete `Branch A`
From then on, whatever you do will result in a Bad Request response.
opw-3662711
Forward-Port-Of: odoo/odoo#149013When merging opportunities in CRM, the salesperson field dropdown was incorrectly showing all users including portal users. This fix restricts the dropdown to show only internal users, matching the behavior of the standard opportunity form. This prevents confusion and ensures only appropriate users can be selected as the salesperson for merged opportunities.
Original PR description
### Steps to reproduce issue:
1. Open CRM and select a list/tree view (opportunities or leads)
2. Select multiple records and try merging them (gear menu)
3. Click on salesperson field
4. Field dropdown contains portal users, should not be the case
### Explanation:
`user_id` (salesperson field) in `crm.merge.opportunity` is a many2one related to res.users. Since it is not restricted, every existing user is listed in the selection.
### Suggested fix:
In `crm.lead`, its homologous field possesses the domain formula `('share', '=', False)`. https://github.com/odoo/odoo/blob/f987dd26e928bd0394cd0b835cc1d0fdd72e9234/addons/crm/models/crm_lead.py#L105-L108 Copying it into `crm.merge.opportunity` correctly restricts the users selection.
opw-3696148
Forward-Port-Of: odoo/odoo#153059
Forward-Port-Of: odoo/odoo#152429This fix resolves an issue where non-administrator users were unable to create email aliases for recruitment sources. The system now properly handles alias creation by using elevated permissions for controlled operations, ensuring that regular users can set up recruitment source email addresses without requiring admin access.
Original PR description
A user that is not admin cannot create an mail.alias. We can create the alias in sudo since we control the default_values and model that are created with the new alias. Check the _check_alias_domain_id_mc constraint in sudo because non amdin user cannot read model ir.model.
This fix addresses a security oversight in project task sharing for portal users. It restricts portal users' access to child task IDs and tag IDs fields, preventing them from viewing or modifying task hierarchies and tags they shouldn't have access to. The fix ensures consistent access control across all related fields.
Original PR description
Oversight in 06919a232251cbd68a28500757aef5cd2e3363a0 Need to handle `default_child_ids` and `default_tag_ids` as well. Forward-Port-Of: odoo/odoo#153305 Forward-Port-Of: odoo/odoo#153152
This fix resolves intermittent test failures in the live chat chatbot flow, specifically when testing user reactions to messages. The issue was caused by the test helper not properly detecting changes in the chat window's shadow DOM and the chat window element being removed during testing. This ensures the live chat feature works reliably.
Original PR description
Before this PR, the `test_complete_chatbot_flow_ui` would sometimes fail when checking if the user can add a reaction to a message. There are two issues: - This step uses the `contains` helper and specify the live chat `ShadowRoot` as the target. However, the `contains` helper uses a mutation observer that observes the light DOM thus, changes in the shadow root are not correctly observed. - The target passed to the `contains` helper is the `ChatWindow` DOM element but this element can be unmounted in-between. This PR fixes this issue.
Payment terms labels were displaying incorrectly on invoices, even though the amounts and due dates were accurate. This fix corrects the label calculation in the accounting system to ensure payment terms appear with the right descriptions when applied to invoices.
Original PR description
This commit addresses an issue where, upon application to an invoice, the Receivables, while accurate in terms of Amounts and Due Dates, have incorrect labels. The root cause of this problem was identified in the compute_name method of the account.move.line model. The modifications in this commit rectify the compute_name method to ensure that payment terms labels are computed correctly. task-3636484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#153223 Forward-Port-Of: odoo/odoo#147670
This fix corrects an issue where unit prices were being incorrectly recalculated for products that have been expensed and re-invoiced. Previously, when a quantity was updated on an expensed line, the system would recompute the price using the sales price instead of the actual cost. Now the system properly recognizes expensed lines and maintains the correct cost-based pricing.
Original PR description
**Steps** to reproduce - Install **Sales**, **Accounting** and **Purchase** apps - Go to **Settings** and activate **Analytic Accounting** option. - Create a product that can be expensed and that is re-invoiced at cost + add cost - Create an SO with another product and add an analytic account (activate analytic accounting if not activated by default) + confirm - Create a PO with the expendable product and add the analytic account in the PO lines - Receive product + create bill - The product is added in the SO with 0 quantity and if I change the quantity to one, the price is recomputed according to the sales price (instead of taking into account the cost). **Investigation** - The `_compute_price_unit()` method doesn't take into account if the so line has been expensed or not opw-3671812 Forward-Port-Of: odoo/odoo#152406
This fix resolves an error that occurred when retrieving paid invoices through the External API if the partner had no associated company. Previously, the system would return an error instead of properly displaying the invoice payment information. After this fix, the invoice payment widget will display correctly for all invoices regardless of partner company status.
Original PR description
…nless allow_none is enabled Description of the issue/feature this PR addresses: When uses External API to fetch an invoice, if this invoice it's paid and the 'partner' hasn't 'company' return None instead False Current behavior before PR: TypeError: cannot marshal None unless allow_none is enabled Desired behavior after PR is merged: Should return an object with invoice_payments_widget as attribute. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix removes a restriction that prevented non-administrative users from generating invoices in the Indian localization module. Previously, only admin users could perform this essential business function. Now all authorized users can generate invoices, improving workflow efficiency and reducing dependency on admin accounts.
Original PR description
Before this commit, users without admin access rights were unable to generate invoices. opw-3701291 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#153092
This fix resolves an issue where spreadsheet filters with special characters (like quotation marks) in their names couldn't be found when referenced in formulas. Users can now successfully use filters with names containing quotes by properly escaping them in formulas like =ODOO.FILTER.VALUE("my \"special\" filter").
Original PR description
Steps to reproduce:
- insert a global filter with double quotes in its name (e.g. my "special" filter)
- reference that filter with ODOO.FILTER.VALUE (remember you have to escape the " in the formula with a backslash \ =ODOO.FILTER.VALUE("my \"special\" filter") => the filter is not found
Task: 3697855
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#150604This fix ensures that payment mandates from Stripe are now correctly stored in the database and available for future use. Previously, mandate information was being retrieved but not saved, making them unavailable for recurring or future transactions. The system now properly captures mandate data from Stripe's charge objects.
Original PR description
Addresses the issue where mandates returned by Stripe were not being saved in the database, rendering them unused. The fix involves retrieving mandate information from the charge object in Stripe, as the mandate data is included in the payment method details of the charge object, rather than in the payment methods object. task-3594745 Forward-Port-Of: odoo/odoo#149153
This update fixes a visual alignment issue with table column menus when using right-to-left (RTL) language modes. The table menu now displays correctly positioned in RTL mode, improving the user experience for customers using RTL languages.
Original PR description
**Description of the issue this PR addresses:** Previously, In RTL mode, the table columns menu were misaligned, causing a visual discrepancy in the UI.Now, Implemented a fix to correctly position the table menu columns in RTL mode, ensuring proper alignment and resolving the visual misalignment issue. task-[3695715](https://www.odoo.com/web#id=3695715&cids=2&menu_id=6478&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/odoo#151955
This update fixes how the web editor handles list formatting, particularly when converting navigation items to regular text. The editor now properly wraps text in paragraph tags and avoids incorrectly applying list attributes to newly created elements, ensuring cleaner and more predictable formatting behavior.
Original PR description
I. Commit [1] changed the code in toggleList such that variable block could not be a block. This commit updates the name of variable block to nodeToToggle. II. Previously, when changing the tag of a text node within a list, it transferred the list's attributes to the newly created tag. Ideally, this should only carry over the attributes of paragraph-related elements and not of lists. III. Make sure when changing style of a list item with class `nav-item` to normal wraps the text inside of a `<p>` tag. [1]: https://github.com/odoo-dev/odoo/commit/d314fb6a6ceb6bade38a2a6b3e0e2e3fd016b7d9 task-3609500 Forward-Port-Of: odoo/odoo#153224 Forward-Port-Of: odoo/odoo#152871
This fix resolves an error that occurred when users tried to create a new customer in the Point of Sale system while multiple pricelists were configured. The issue has been corrected to allow seamless partner creation regardless of the number of available pricelists.
Original PR description
Prior to this commit, adding more than one pricelist to the available pricelists and attempting to create a partner from the Point of Sale would result in an error. opw-3703269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#151298
This fix corrects a bug where setting a supplier for automatic reordering was not properly updating the order quantity when the supplier's unit of measure differed from the product's base unit. The system now correctly converts quantities to the same unit before comparing them, ensuring the correct order amount is set when you select a supplier from the replenishment page.
Original PR description
**Steps to reproduce the bug:**
- Create a storable product:
- Unit of Measure: KG
- Purchase UoM: Tonne
- Vendor: “Azure Interior” Quantity: 6T
- Recording rule: Min quantity= 500
- Trigger: Manual
- Route: Buy
- Go to the replenishment page:
- Click on the “i” icon
- On the Azure Interior line, click on “Set as supplier”
**Problem**:
The quantity to order is not updated to 6000 kg because in the "action_set_supplier" function, we compare the quantity of the supplier information with the quantity of the orderpoint without converting the values to the same UoM.
So:
500 < 6 → False
Therefore, the quantity is not updated.
opw-3705090
Forward-Port-Of: odoo/odoo#153202
Forward-Port-Of: odoo/odoo#152722This fix prevents the website profile feature from accidentally overwriting existing user data when updating profiles. Previously, the system was using an update method that could inadvertently replace existing values with new ones. This change ensures that only intended fields are modified while preserving other existing information.
Original PR description
Do not apply update method to avoid inadvertently overwrite on existing values. opw-3729318 Forward-Port-Of: odoo/odoo#153240