Daily updates from Odoo
Navigate
Branch
Monday, February 17, 2025
33 changes
21 changes
New functionality added to Odoo
Amazon sellers can now select the Ireland marketplace directly in Odoo. This removes the need to add Amazon.ie manually and makes setup easier for Irish marketplace operations.
Original PR description
**Description of what this PR addresses:** - Add amazon marketplace for Ireland(IE) **Desired Behaviour after PR is merged:** - Users can access Amazon.ie marketplace directly without adding manually. Task-4447381
Enhancements to existing features
Bank reconciliation now handles zero-balance transactions more cleanly by automatically cancelling the related accounting entry when the bank statement line is created. Users can also see and filter posted, draft, and cancelled bank statement lines, improving visibility and reducing reconciliation confusion.
Original PR description
This commit will do multiple things: - Allow cancel bank statement line to be displayed in the bank rec widget - Deal with zero balancing transaction by cancelling the move when the bank statement line is created - Adding filters for posted, draft and cancel bank statement lines - UX for draft and cancel bank statement line task-4476707
Approval activity updates now send only the information needed instead of all available activity fields. This reduces unnecessary data transfer and supports cleaner, more efficient activity handling across related apps.
Original PR description
Currently the _to_store of mail.activity is actually returning all fields (just using read() result). In order to improve _to_store and also to reduce the number of useless fields we send, we should actually list only the fields we need (also taking care of overrides if necessary). In a similar pattern as other _to_store methods. PR community: https://github.com/odoo/odoo/pull/189598 Task-4364655
Payroll reports have been optimized to load much faster, reducing report generation time from about 35 seconds to about 5 seconds on odoo.com. This helps payroll teams access information more quickly and reduces waiting time during reporting.
Original PR description
From 35 to 5 seconds on odoo.com
Hosts can now check out visitors directly from the email notification they receive when a visitor checks in. This streamlines front desk operations by reducing extra steps and helping visitor records stay up to date more quickly.
Original PR description
This PR improves the visitor check-out process directly from the email. Hosts can now check out visitors using the email they receive upon the visitor's check-in. task-4402880
The recruitment app now centers hiring activity on applications instead of separate candidate records, making simple hiring workflows easier for smaller companies. A new talent pool feature preserves advanced recruiting needs by letting teams reuse strong applicant profiles as templates for future job openings.
Original PR description
The goal of this PR can be split into three sections: 1. Remove the hr.candidate model The removal of the hr.candidate model required migrating information previously attached to the candidate over…
The goal of this PR can be split into three sections: 1. Remove the hr.candidate model The removal of the hr.candidate model required migrating information previously attached to the candidate over to the applicant. This change aims to simplify the flow of the recruitment app, as most SMEs don't need extensive complex recruitment workflows for hiring a few people occasionally. 2. Introduce the hr.talent.pool model While removing hr.candidate means losing features useful for industries like headhunting, the new talent pool system aims to re-introduce these features. It enables creating application templates (talents) from existing applications and using these talents to generate applications for other jobs. 3. Other minor UI/UX/DX tweaks - Improved job position form view for better user experience - Improved applicant form view to integrate with talent pool system - Renamed appraisal_goal_date/timeless_date to 'timeless_datetime' and moved it to 'hr' so it can be used in both appraisal and recruitment These changes make the recruitment app more versatile. Smaller companies with simple recruitment processes can use basic applications and recruitment flows (similar to 17.4), while companies with complex needs can leverage talent pools to manage applications as they did with the candidate model. Task-4307229
Approval requests for creating RFQs now show clearer updates in their chatter, including which products were added to which RFQs and later RFQ status changes. The change also prevents users without purchase access from seeing RFQ-related controls that could trigger an access error, making approvals easier and safer to follow.
Original PR description
When an approval request of category `Create RFQ` is approved, the approver can create an RFQ. This will create a new RFQ with the requested products or will add the requested products to existing RFQs that have the same vendors as the products. However, the user who created the approval request doesn't get any feedback on the RFQs. To solve this issue, A message is logged to the chatter of the approval request. The message will show each product and the reference (name) of the corresponding RFQ to which the product has been added. Also, when the state of the RFQ changes, a message will be logged to the chatter of the approval request. The message will show the products from the approval request that are present in the RFQ, the RFQ reference, the old state and new state of the RFQ. task-3941803
This update adds more realistic appraisal demo data for the Indian payroll module using dates that stay current over time. It helps salespeople and business analysts present smoother, more accurate demonstrations to customers and partners.
Original PR description
The purpose of these demo data is for our salesperson or business analyst to give a demo to customers/partners. This PR includes the following changes: - Create demo data for appraisal by adding dynamic date calculations. - Ensured accurate demo data creation for better testing and simulation. task-4231194
This update strengthens automated checks for inter-company sales and purchase flows by verifying that planned dates update correctly. It helps reduce the risk of scheduling issues between related companies, with no direct change expected for end users.
Original PR description
In this commit: ================= - Updated the test case to ensure the planned date changes correctly. Task - [4321341](https://www.odoo.com/odoo/my-tasks/4321341)
Resolved issues and error corrections
Fixed an installation issue in the accounting spreadsheet dashboard caused by a changed dependency order between accounting modules. This helps ensure the dashboard module can be installed reliably without blocking setup due to a missing menu reference.
Original PR description
Since enterprise#77895 the module 'accountant' depends on 'account_reports', whereas it was the contrary before. And so this module installation was raising an error on unknown reference 'accountant.menu_accounting' runbot error 116839
This fix restores reliable drag-and-drop behavior in the Documents folder panel and prevents the folder panel from staying open when selecting documents on mobile. It improves usability and avoids crashes or confusing screen layout issues for users managing documents.
Original PR description
Issue 1, Drag and Drop Reproduce: 1. Try drag & drop in search panel. 2. Either it doesn't work, or it crashes. Issue 2, Reproduce: 1. Go to mobile view 2. Select a document 3. `Folders`, the search panel, is still visible In 0d904521, the `root` property was redefined in document's search panel and overrode the `root` `ref` from the search panel template. Furthermore, if we renamed the property, if at some point we are without selection while in "All", and then open a folder and select a document, the side panel won't be hidden either. This commit then reverts these changes. We also take the opportunity, while in master, to clean some unrelated dead code.
Code cleanup and technical improvements
Social post actions such as loading comments and liking posts or comments now call the post record directly instead of going through separate web endpoints. This simplifies the internal flow, reduces duplicated routing code, and should make the social integrations easier to maintain without changing the user experience.
Original PR description
Before this commit: - we used to follow an approach where to get the comments made on a post, like that comment, like a post, etc, we were making an `rpc` call to the controller bound on a specific route. - say `/social_facebook/like_comment` to like a comment present inside a post. - the controller method then used to fetch the related `social.stream.post` record, and call the actual method. ex --> `stream_post._facebook_like(comment_id, like)` After this commit: - we now directly call the method bound on the related `social.stream.post` record bypassing the controller calls. Task-**4184961**
Miscellaneous changes
Fix the position of the web ribbon which isn't correctly set to the right of the kanban card. related PR: odoo/enterprise#77884 Task-4582362 Forward-Port-Of: odoo/enterprise#79437
Original PR description
Fix the position of the web ribbon which isn't correctly set to the right of the kanban card. related PR: odoo/enterprise#77884 Task-4582362 Forward-Port-Of: odoo/enterprise#79437
Before this commit: Total weight sent for a multipackage shipment was sum of all the weights of packages in the shipment. After this commit: Average weight of all the packages is sent as total weight. Sendcloud in the backend use average weight for the multipackage shipping request and multiplies it by the number of packages. *checked with sendcloud support. opw-4260104 Forward-Port-Of: odoo/enterprise#79001
Original PR description
Before this commit: Total weight sent for a multipackage shipment was sum of all the weights of packages in the shipment. After this commit: Average weight of all the packages is sent as total weight. Sendcloud in the backend use average weight for the multipackage shipping request and multiplies it by the number of packages. *checked with sendcloud support. opw-4260104 Forward-Port-Of: odoo/enterprise#79001
steps to reproduce: - Install the module approvals_purchase - As admin user - go to approvals - create a new approval for RFQ request - attribute the approval to an user without any access rights - put yourself as the approver - submit and validate the approval - click on the button Create RFQ's - create the RFQ - logout and connect as the user without access rights - try to access your approval -> Access Error related infos: first appeared with: https://github.com/odoo/enterprise
Original PR description
steps to reproduce: - Install the module approvals_purchase - As admin user - go to approvals - create a new approval for RFQ request - attribute the approval to an user without any access rights -…
steps to reproduce: - Install the module approvals_purchase - As admin user - go to approvals - create a new approval for RFQ request - attribute the approval to an user without any access rights - put yourself as the approver - submit and validate the approval - click on the button Create RFQ's - create the RFQ - logout and connect as the user without access rights - try to access your approval -> Access Error related infos: first appeared with: https://github.com/odoo/enterprise/commit/4220723e0779287e5a8e301553e1a870cd3c4ca5 in task: 2040710 Reason: No group where set on the button 'Purchase Orders' which is used to access the RFQ from the approval this button needs a protected field to be able to be displaed properly in addition to that no default value was set if the user has no rights to read the 'purchase.order.line' model. Expected behavior: The button should not be displayed if the user has no access rights to the RFQ and thus grand access to the approval of the user FIX add a default value if the user has no read rights on the model 'purchase.order.line' ultimatly making everything related to it in the form view invisible Also add a group to it in the view to permit to remove the default value in master task-3561514 Forward-Port-Of: odoo/enterprise#79098 Forward-Port-Of: odoo/enterprise#78275
### Steps to reproduce: - Create a recurring product with only one recurring plan - Go to the product's page in the website - Notice the pricing table is shown with only one plan ### Cause: In the pricing view in the website we are showing the pricing table just after checking if we have pricings or not. ### Fix: We are now checking if the pricings we have is more than one we will show the table otherwise will not show it. opw-4559071 Forward-Port-Of: odoo/enterprise#79102
Original PR description
### Steps to reproduce: - Create a recurring product with only one recurring plan - Go to the product's page in the website - Notice the pricing table is shown with only one plan ### Cause: In the pricing view in the website we are showing the pricing table just after checking if we have pricings or not. ### Fix: We are now checking if the pricings we have is more than one we will show the table otherwise will not show it. opw-4559071 Forward-Port-Of: odoo/enterprise#79102
Before this commit, the under warranty field is always copied when the user duplicates a task which it does not make sense since the new task could not have exactly the same context and the intervention could be different. This commit avoid copying the under warranty field when the user duplicates a task to let the user decide if the new task should be also in warranty or not. opw-4571460 Forward-Port-Of: odoo/enterprise#79250
Original PR description
Before this commit, the under warranty field is always copied when the user duplicates a task which it does not make sense since the new task could not have exactly the same context and the intervention could be different. This commit avoid copying the under warranty field when the user duplicates a task to let the user decide if the new task should be also in warranty or not. opw-4571460 Forward-Port-Of: odoo/enterprise#79250
isActive: ["auto"] doesn't make sense with the "run" function in a step because tour_interactive doesn't take into account steps without the "run" function. So, in this commit, we remove all isActive: ["auto"] for steps where there is no "run" function. Forward-Port-Of: odoo/enterprise#79291 Forward-Port-Of: odoo/enterprise#79068
Original PR description
isActive: ["auto"] doesn't make sense with the "run" function in a step because tour_interactive doesn't take into account steps without the "run" function. So, in this commit, we remove all isActive: ["auto"] for steps where there is no "run" function. Forward-Port-Of: odoo/enterprise#79291 Forward-Port-Of: odoo/enterprise#79068
Bug === In some situation, it's possible that the `is_template` raises when it shouldn't. It's more consistent to check it after the creation (super call). Task-4571151 Forward-Port-Of: odoo/enterprise#79173
Original PR description
Bug === In some situation, it's possible that the `is_template` raises when it shouldn't. It's more consistent to check it after the creation (super call). Task-4571151 Forward-Port-Of: odoo/enterprise#79173
Steps to reproduce ============= 1. Allow edit access to portal user. 2. Try to publish an article from the portal user. The portal user has no right to publish/unpublish articles. After this commit ============== This commit prevents access error when portal users try to publish an article. Task-4414401 Forward-Port-Of: odoo/enterprise#79258 Forward-Port-Of: odoo/enterprise#76350
Original PR description
Steps to reproduce ============= 1. Allow edit access to portal user. 2. Try to publish an article from the portal user. The portal user has no right to publish/unpublish articles. After this commit ============== This commit prevents access error when portal users try to publish an article. Task-4414401 Forward-Port-Of: odoo/enterprise#79258 Forward-Port-Of: odoo/enterprise#76350
With is Commit : ---------------------------------------------------------- - In the previous implementation, components marked for manual consumption were automatically consumed, like auto-consumed components, when starting production on a manufacturing order (MO). This occurred due to missing logic and conditions in the code that failed to differentiate between manual and automatic component consumption, and it only affected the shop floor operations. - This update corrects the components
Original PR description
With is Commit : ---------------------------------------------------------- - In the previous implementation, components marked for manual consumption were automatically consumed, like auto-consumed components, when starting production on a manufacturing order (MO). This occurred due to missing logic and conditions in the code that failed to differentiate between manual and automatic component consumption, and it only affected the shop floor operations. - This update corrects the components' consumption process and enhances production tracking's reliability, ensuring that manual components are managed according to their intended usage. Task id: 4096514 Community PR: odoo/odoo#175816 Forward-Port-Of: odoo/enterprise#79277 Forward-Port-Of: odoo/enterprise#77831
12 changes
Enhancements to existing features
Salary offer forms now default to selecting a new company car when the number of available cars is below the allowed unused-car limit. This helps HR teams align offers with fleet availability rules and reduces manual adjustments during contract salary proposals.
Original PR description
- make `new_car` True by default if the `available_cars_amount` is less than the `max_unused_cars` Task: 4378810
Resolved issues and error corrections
Fixed an issue where invoice PDF documents stored through accounting file centralization could not be found by their indexed content. This makes centralized accounting documents searchable as expected, helping users locate related files reliably.
Original PR description
Issue ----- Attachments are linked to `document.document` with a (`res_model`) and `res_field` By default, searching on `ir.attachment` filters out attachments tied to binary fields (ref.1), by adding `['res_field', '=', False]` to the domain preventing such documents from appearing in searches. Solution -------- This commit skips the filter on `res_field` Steps to Reproduce ------------------- 1. Install `documents` and `accountant` modules. 2. Enable Files Centralization for Accounting and add Customer Invoices to its Journals. 3. Create an invoice → Confirm → Print → Download. 4. Click on the related document. Bug:The PDF cannot be searched by its indexed content. (ref. 1) ---- 1bb61c970ed63eabe3821d21f3ed6f99c4b16daa [ADD] fields: add option to store binary fields into attachments opw-4267371
The subscription portal now shows renewal amounts using the correct currency conversion instead of only changing the currency symbol. This prevents customers in multi-currency setups from seeing or paying an incorrectly low or high amount when extending a subscription.
Original PR description
The recurring subscription amount displayed in the sidebar of the subscription order portal view is incorrect. For companies using multiple currencies, the displayed amount is based on the database's…
The recurring subscription amount displayed in the sidebar of the subscription order portal view is incorrect. For companies using multiple currencies, the displayed amount is based on the database's base currency but is shown with the expected currency symbol. This discrepancy can cause issues when extending a subscription, as clients may not be charged the correct amount. For example, a product priced at €10 EUR should require the customer to pay ¥75.15 CNY. However, due to the previous use of the total_amount field, the customer only needed to pay ¥10 CNY to extend their subscription. The total_amount_currency field resolves this issue by correctly converting and displaying the amount in the expected currency. Before Fix:  After Fix:  Task-4484696
The Executive Summary now calculates net profit margin using the same income basis as the accounting dashboard. This prevents mismatched profitability figures between reports, helping users rely on consistent financial metrics.
Original PR description
Users can access different metrics to evaluate their financial performance, both from the accounting app and from the accounting dashboard in the dashboard app. However, the values to compute the…
Users can access different metrics to evaluate their financial
performance, both from the accounting app and from the accounting
dashboard in the dashboard app.
However, the values to compute the metrics are retrieved independently
and this is causing an issue with the computation of Net profit margin
Steps to reproduce:
- Add an invoice (to have income) and a bill (to have expenses)
- Check Net profit margin in Dashboards > Finance > Accounting
- Check margin also in Accounting > Reporting > Statement Reports > Executive Summary
Issue:
Net Profit margin in executive summary and accounting dashboard differs.
Reason:
Net Profit margin is defined as NEP/INC
- NEP is:
- In dashboard OPINC + OIN - COS - EXP - DEC
(All accounts type income and other incomes minus expenses)
- In executive summary REV + OIN - COS - EXP - OEXP
(Same as above)
- INC is:
- In dashboard OPINC + OIN
(All accounts type income and other incomes)
- In executive summary REV - COS - EXP
(All accounts income type - Account type cost - all expenses)
Solution:
Correct Net profit margin computation in execute summary to use the
income and not the operating income, as in the latter the expenses have
been already deducted
opw-4450678Users now see the correct access-related error when trying to split a PDF in a Documents folder they no longer have permission to use. This avoids a confusing unrelated message and helps users understand that the action is blocked by folder permissions.
Original PR description
## Issue: When we upload a pdf document to a folder and remove access to that folder, if we attempt to split the document it shows an unralted error. ## Steps to reproduce: - install…
## Issue: When we upload a pdf document to a folder and remove access to that folder, if we attempt to split the document it shows an unralted error. ## Steps to reproduce: - install documents_project - Open documents app - Select "Projects" folder - Upload a pdf document - Edits "Projects" folder sharing settins to remove Mitchell Admin and restrict Internal users to None - Select the pdf document and click on "Split" button - Try to split the document - Not possible due to folder access error but the error message is not related to the issue ## Solution: - In the `PdfManager` component, we noticed that inside the `_sendChanges` method, we don't verify whether the response from the `pdf_split` controller is JSON before calling `.json()`. As a result, when we attempt splitting, an access error is raised in the controller, and Werkzeug returns an HTML error response by default. This leads to an error when `.json()` is called, which is eventually caught in `_applyChanges` and displayed in the notification instead of the intended access error. - this fix handles the error response from the `pdf_split` controller better by checking if the reponse is ok before calling `.json()`, and handling the error response accordingly. OPW-4453150
Miscellaneous changes
Steps to reproduce: - Run helpdesk tour. - Change the language - Proceed with the tour Isuse: - The tours fails. Problem: - It is due to the triggers using english text in :contains. Fix: - Replace all the :contains with concrete triggers. Also changed some tour steps pointer orientation as it doesnt sit right in some conditions(gets broken/ partially invisible) task-4479518 Forward-Port-Of: odoo/enterprise#79301 Forward-Port-Of: odoo/enterprise#77398
Original PR description
Steps to reproduce: - Run helpdesk tour. - Change the language - Proceed with the tour Isuse: - The tours fails. Problem: - It is due to the triggers using english text in :contains. Fix: - Replace all the :contains with concrete triggers. Also changed some tour steps pointer orientation as it doesnt sit right in some conditions(gets broken/ partially invisible) task-4479518 Forward-Port-Of: odoo/enterprise#79301 Forward-Port-Of: odoo/enterprise#77398
Before this commit: Total weight sent for a multipackage shipment was sum of all the weights of packages in the shipment. After this commit: Average weight of all the packages is sent as total weight. Sendcloud in the backend use average weight for the multipackage shipping request and multiplies it by the number of packages. *checked with sendcloud support. opw-4260104 Forward-Port-Of: odoo/enterprise#79001
Original PR description
Before this commit: Total weight sent for a multipackage shipment was sum of all the weights of packages in the shipment. After this commit: Average weight of all the packages is sent as total weight. Sendcloud in the backend use average weight for the multipackage shipping request and multiplies it by the number of packages. *checked with sendcloud support. opw-4260104 Forward-Port-Of: odoo/enterprise#79001
The use of the parameters date_start and date_end in the url is not always correct in the planning gantt model. For instance, if date_start and date_end are given and are in the same week, the range selected has one day more than expected and does not start on the first day of the week. Here we fix/improve the usage of those parameters by removing the extra day (if any) and localizing appropriately the ranges. Task ID: 4500939 Forward-Port-Of: odoo/enterprise#79362
Original PR description
The use of the parameters date_start and date_end in the url is not always correct in the planning gantt model. For instance, if date_start and date_end are given and are in the same week, the range selected has one day more than expected and does not start on the first day of the week. Here we fix/improve the usage of those parameters by removing the extra day (if any) and localizing appropriately the ranges. Task ID: 4500939 Forward-Port-Of: odoo/enterprise#79362
steps to reproduce: - Install the module approvals_purchase - As admin user - go to approvals - create a new approval for RFQ request - attribute the approval to an user without any access rights - put yourself as the approver - submit and validate the approval - click on the button Create RFQ's - create the RFQ - logout and connect as the user without access rights - try to access your approval -> Access Error related infos: first appeared with: https://github.com/odoo/enterprise
Original PR description
steps to reproduce: - Install the module approvals_purchase - As admin user - go to approvals - create a new approval for RFQ request - attribute the approval to an user without any access rights -…
steps to reproduce: - Install the module approvals_purchase - As admin user - go to approvals - create a new approval for RFQ request - attribute the approval to an user without any access rights - put yourself as the approver - submit and validate the approval - click on the button Create RFQ's - create the RFQ - logout and connect as the user without access rights - try to access your approval -> Access Error related infos: first appeared with: https://github.com/odoo/enterprise/commit/4220723e0779287e5a8e301553e1a870cd3c4ca5 in task: 2040710 Reason: No group where set on the button 'Purchase Orders' which is used to access the RFQ from the approval this button needs a protected field to be able to be displaed properly in addition to that no default value was set if the user has no rights to read the 'purchase.order.line' model. Expected behavior: The button should not be displayed if the user has no access rights to the RFQ and thus grand access to the approval of the user FIX add a default value if the user has no read rights on the model 'purchase.order.line' ultimatly making everything related to it in the form view invisible Also add a group to it in the view to permit to remove the default value in master task-3561514 Forward-Port-Of: odoo/enterprise#79098 Forward-Port-Of: odoo/enterprise#78275
Before this commit, the under warranty field is always copied when the user duplicates a task which it does not make sense since the new task could not have exactly the same context and the intervention could be different. This commit avoid copying the under warranty field when the user duplicates a task to let the user decide if the new task should be also in warranty or not. opw-4571460 Forward-Port-Of: odoo/enterprise#79250
Original PR description
Before this commit, the under warranty field is always copied when the user duplicates a task which it does not make sense since the new task could not have exactly the same context and the intervention could be different. This commit avoid copying the under warranty field when the user duplicates a task to let the user decide if the new task should be also in warranty or not. opw-4571460 Forward-Port-Of: odoo/enterprise#79250
Bug === In some situation, it's possible that the `is_template` raises when it shouldn't. It's more consistent to check it after the creation (super call). Task-4571151 Forward-Port-Of: odoo/enterprise#79173
Original PR description
Bug === In some situation, it's possible that the `is_template` raises when it shouldn't. It's more consistent to check it after the creation (super call). Task-4571151 Forward-Port-Of: odoo/enterprise#79173
An error occurs when triggering a cron job for posting all pending posts. ```ValueError: Expected singleton: social.post(14, 13)``` A singleton error occurs when the system tries to get a value of 'post_method' from multiple records at [1]. Link [1]: https://github.com/odoo/enterprise/blob/5e968dfce025102bc27f01ba9b07304477835b47/social_push_notifications/models/social_post.py#L26 To avoid the singleton error, we can use the ```mapped()``` function to retrieve a list of values from a
Original PR description
An error occurs when triggering a cron job for posting all pending posts. ```ValueError: Expected singleton: social.post(14, 13)``` A singleton error occurs when the system tries to get a value of 'post_method' from multiple records at [1]. Link [1]: https://github.com/odoo/enterprise/blob/5e968dfce025102bc27f01ba9b07304477835b47/social_push_notifications/models/social_post.py#L26 To avoid the singleton error, we can use the ```mapped()``` function to retrieve a list of values from all the records and check the condition across them. Sentry-6055370689 Forward-Port-Of: odoo/enterprise#74698