Wednesday, April 30, 2025
71 changes · master
Enhancements to existing features
Fleet users can now mark vehicle status stages as folded in the kanban view. This helps keep vehicle boards cleaner and makes it easier to manage less active or completed stages.
Original PR description
Added option to mark vehicle state stages as folded in the kanban view for better stage management. task-4717242 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Editing a publisher comment on a portal rating no longer changes who appears to have written it or when it was originally published. This keeps review interactions clearer and prevents small edits, such as typo fixes, from misleadingly changing the visible comment ownership.
Original PR description
The portal rating "comment" feature is meant as a simple tool to let content publishers interact with reviews by leaving a comment. It was designed with minimal user rights management and allows people with write access to the underlying record to add/edit/delete comments. However, when editing the comment from someone else, it looks a bit odd as you visually become the "author" of this comment. This commit changes the behavior to not alter the metadata (publisher partner and date) when the comment content is modified (fixed a typo, ...). Task-3834294
This update makes small adjustments to invoice and payment portal screens so localization modules can safely add Ecuador withholding-related views. It also fixes an Indonesian localization override so invoice portal pages continue to work correctly when other local rules extend them.
Original PR description
To add a new filter type of withholdings in Ecuador, some changes needed to be made in the base modules. 1) `account` and `account_payment` needed additional name attributes to be able to xpath nicely to them when overriding in the ecuador module. 2) `l10n_id` had an override of `/my/invoices/ID` that had a different signature than any of the other overrides that was missed until now, adding the override in `l10n_ec_edi` leads to the wrong number of positional arguments in super calls. Fixed to add `args`. Enterprise PR: https://github.com/odoo/enterprise/pull/83178 task-4304037
The work entry regeneration wizard now only shows employees who have a contract. This reduces confusion and helps users avoid selecting employees for whom work entries cannot be regenerated.
Original PR description
This commit filters out employees without a contract from the selection list when regenerating work entries. task-4660041 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update aligns internal message handling behavior across several Odoo apps, reducing the risk of inconsistencies when records create or manage discussions. It is a behind-the-scenes improvement that helps maintain reliability for accounting, HR, portal, project, and mail-related workflows.
Original PR description
See also: odoo/enterprise#83678
Certain temporary startup and testing options now only work when provided directly on the command line, rather than being read from saved configuration files. This reduces accidental behavior from stale config files and makes system startup and test runs more predictable.
Original PR description
Some options don't really make sense to be loaded from file. These are purely needed at the command line. --import-partial --stop-after-init --i18n-override --test-file --test-enable --test-tags --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update standardizes how several Odoo apps connect with mail discussion features, making future maintenance safer and more consistent. It is an internal improvement with no expected change to everyday user workflows.
Original PR description
odoo/odoo#206588
Resolved issues and error corrections
Completed eLearning courses will no longer have their resume entries automatically restored after course content changes if the user had removed them. This keeps employee resume information aligned with user choices while still adding entries when a course is completed for the first time.
Original PR description
When an eLearning course is completed, a resume line for that course is added. Currently, the used method has no idea if the course was already completed or completed for the first time. This results in some situations where the resume line is re-added upon course changes (e.g. adding some content) even if the user deleted it beforehand. To solve this issue, the method used is not the post completion update hook, which is only called the first time a course is completed. That way, the resume line will still be removed if the user decides to remove it, even if the course completion is recomputed. task-4737314
Code cleanup and technical improvements
The printer driver code for Windows and Linux has been reorganized to share common logic in one parent component. This reduces duplication, making future maintenance simpler and lowering the risk of inconsistent behavior across platforms.
Original PR description
Printer drivers for Windows and Linux were full of duplicated code. We created a parent class for both drivers, in order simplify maintainability and ease readability. Task: 4645053
Miscellaneous changes
This commit changed the way to give the render_model to the model fleet_vehicle_send_mail (introduced by this commit : #61221b2e6552b21508a6a36ab69352e6793d70c5) 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#207749
Original PR description
This commit changed the way to give the render_model to the model fleet_vehicle_send_mail (introduced by this commit : #61221b2e6552b21508a6a36ab69352e6793d70c5) 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#207749
The server now handles internal signal queues more efficiently, helping background worker processes respond reliably under load. Obsolete compatibility code for unsupported Python versions was also removed, simplifying maintenance without changing business workflows.
Original PR description
Details in commit messages. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The time off request wizard now keeps attachment-related panels hidden when a leave request includes files. This prevents clutter and keeps the calendar leave request experience consistent for employees and managers.
Original PR description
Steps: - Install the hr_holidays module - apply for leave from the calendar and add an attachment. - open the form view from the wizard using the expand button at the top right. - then, open the same leave again from the calendar in the wizard view Description of the issue/feature this PR addresses: When opening a leave request in the wizard view that includes an attachment, the chatter and attachment preview are displayed. This makes the wizard layout inconsistent. Cause: The chatter and attachment preview are unintentionally shown in the wizard due to the attachment being linked to the record. Fix: This PR hides the chatter and attachment preview in the wizard view, ensuring a cleaner and more consistent user experience. task-4703080
The AI message action now works correctly even when an incoming message cannot be matched to a known contact. This prevents an error from interrupting users when viewing or acting on those messages.
Original PR description
Purpose: -------- A message can have no author (when 'email_from' does not match any partner). When this is the case, the messageActionsInternal patch throws an error because it assumed that a message always has an author. Task-4762361
Temporarily disables unreliable VoIP test checks that were failing inconsistently due to timing issues. This helps keep the development validation process stable while the underlying test problems are investigated later.
Original PR description
Some tests seem to have race conditions. We don't have time to debug it right now, so let's just disable the problematic tests for the time being.
This change renames internal project task field settings to better reflect that they control what portal users can access. It does not change business behavior, but makes the code easier to understand and maintain for future updates.
Original PR description
The name for the property is poorly chosen. These properties are used for `_portal_accessible_fields`. They are used to define custom access to fields only for portal users. odoo/enterprise#84132 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update cleans up how shared internal utilities are imported and exposed, reducing reliance on deprecated patterns. It should make future maintenance safer without changing day-to-day user workflows.
Original PR description
Details in commit messages: - use `reset_cached_properties` - export only used properties --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change updates internal data cleaning logic to use a shared maintenance approach for resetting stored values. It helps keep the codebase simpler and more consistent, with no expected change to day-to-day user workflows.
Original PR description
odoo/odoo#207475
This update reorganizes internal automated tests so they reuse shared project testing models instead of duplicating setup across modules. It helps keep project planning, field service, and timesheet test coverage more consistent and easier to maintain, with no expected change for end users.
Original PR description
_*= industry_fsm, timesheet_grid - Replaced custom model definitions in `task_gantt.test.js`, `task_gantt_dependency.test.js`, and `task_progress_gantt.test.js` with extensions of models from the project module. - Moved shared model setup to project_test_models.js to avoid duplication and improve consistency. task-4725275
This update renames internal project task field references to use clearer portal-related wording. It does not change business workflows, but helps keep project, field service, helpdesk, and timesheet code easier to maintain consistently.
Original PR description
odoo/odoo#207477
In 80ff2d2 hooks were added so that we can guarantee currency exchange diff journal entries & items in the proper journal & account- but an accountant doesn't necessarily have a group that permits access to the `Stock.valuation.layer` model (which is checked raw, without sudo, when `stock_account` is installed) -> AccessError So we will always allow access to an SVL record in this context via `sudo()`. Forward-Port-Of: odoo/odoo#207897
Original PR description
In 80ff2d2 hooks were added so that we can guarantee currency exchange diff journal entries & items in the proper journal & account- but an accountant doesn't necessarily have a group that permits access to the `Stock.valuation.layer` model (which is checked raw, without sudo, when `stock_account` is installed) -> AccessError So we will always allow access to an SVL record in this context via `sudo()`. Forward-Port-Of: odoo/odoo#207897
Steps to reproduce - Have a bank account in the accounting tab of the current company partner - Create an invoice for a customer - Confirm it - Send&Print - Reset the invoice to draft Issue: In 'Other Info' tab, the Recipient Bank (`partner_bank_id`) is still red-only. It occurs since 5c7eefed412e676c6ddf67f62bce514e5bade44c The bank account is now editable even when the invoice is posted but become readonly once the invoice is sent. This means that if a wrong bank account has been s
Original PR description
Steps to reproduce - Have a bank account in the accounting tab of the current company partner - Create an invoice for a customer - Confirm it - Send&Print - Reset the invoice to draft Issue: In 'Other Info' tab, the Recipient Bank (`partner_bank_id`) is still red-only. It occurs since 5c7eefed412e676c6ddf67f62bce514e5bade44c The bank account is now editable even when the invoice is posted but become readonly once the invoice is sent. This means that if a wrong bank account has been set by mistake it is impossible to change it, and a credit note is needed. opw-4683997 Forward-Port-Of: odoo/odoo#206965
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced over time. ## How to reproduce - Create product P, storable, tracked in Kg - Create a receipt/delivery move for 14g of P -> Stock Quant is updated by 0.01Kg -> Stock Valuation is updated by 0.02Kg OPW-4734980 --- Test result without fix: ``` 2025-04-22 13:40:45,088 38626 ERROR oes_tes
Original PR description
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced…
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced over time.
## How to reproduce
- Create product P, storable, tracked in Kg
- Create a receipt/delivery move for 14g of P -> Stock Quant is updated by 0.01Kg
-> Stock Valuation is updated by 0.02Kg
OPW-4734980
---
Test result without fix:
```
2025-04-22 13:40:45,088 38626 ERROR oes_test_16 odoo.addons.stock_account.tests.test_stockvaluation: FAIL: TestStockValuation.test_valuation_rounding_method
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/16.0/odoo/addons/stock_account/tests/test_stockvaluation.py", line 4397, in test_valuation_rounding_method
self.assertEqual(receipt.move_ids.stock_valuation_layer_ids.quantity, 0.01)
AssertionError: 0.02 != 0.01
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#207821
Forward-Port-Of: odoo/odoo#206884test_01_beacon was disabled to allow an easier forwardport of #207720 This commit fixes the issue by providing a correct substitution for the external call. Runbot error: 182085 Forward-Port-Of: odoo/odoo#207874
Original PR description
test_01_beacon was disabled to allow an easier forwardport of #207720 This commit fixes the issue by providing a correct substitution for the external call. Runbot error: 182085 Forward-Port-Of: odoo/odoo#207874
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs
Original PR description
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient…
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs on cash desk 2 during payment: could not obtain lock on row in relation “ir_sequence”. The odoo.service.model retries to create the order and since the ir_sequence of pos_config used in the pos_order name is not set to "no_gap", the pos_order names have a gap equal to the number of retries. Task-4708543 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#207852 Forward-Port-Of: odoo/odoo#205935
### Issue: Numerous SO views were recently cleaned up in PR #167023. However, removing `display_type` from the Quotation Template Form no longer adds the key into the `web_save`, so we'll eventually fail the SQL constraint `_accountable_product_id_required` if we try to add a Section or Note to the Template. ### Solution: Add the hidden `display_type` field back to the view. opw-4757060 Forward-Port-Of: odoo/odoo#207856
Original PR description
### Issue: Numerous SO views were recently cleaned up in PR #167023. However, removing `display_type` from the Quotation Template Form no longer adds the key into the `web_save`, so we'll eventually fail the SQL constraint `_accountable_product_id_required` if we try to add a Section or Note to the Template. ### Solution: Add the hidden `display_type` field back to the view. opw-4757060 Forward-Port-Of: odoo/odoo#207856
In [1], a mechanism was introduced to detect lost notifications when the bus table is cleared during socket disconnection. However, this relies on the "reconnect" event. The "reconnect" event is not triggered when the connection is closed cleanly. In such cases, the next connection is treated as a new one and triggers the "connect" event, which does not check for missed notifications. As a result, any notifications sent while the socket was disconnected can be missed. This commit ensures t
Original PR description
In [1], a mechanism was introduced to detect lost notifications when the bus table is cleared during socket disconnection. However, this relies on the "reconnect" event. The "reconnect" event is not triggered when the connection is closed cleanly. In such cases, the next connection is treated as a new one and triggers the "connect" event, which does not check for missed notifications. As a result, any notifications sent while the socket was disconnected can be missed. This commit ensures that the missed notification check is performed on all connections after the initial one, not only during a "reconnect". [1]: https://github.com/odoo/odoo/pull/206106 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#207880 Forward-Port-Of: odoo/odoo#207392
## Version: 18.0+ ## Issue: PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the penultimate page. ## Steps to reproduce: - Install Sales app; - Navigate to the Settings app: - Under the `Companies` section, configure the document layout: - Ensure the `Bubble` (or `Boxed`) layout is selected; - Navigate to the Sales app: - Create a new quote with 8x `Chair floo
Original PR description
## Version: 18.0+ ## Issue: PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the…
## Version:
18.0+
## Issue:
PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the penultimate page.
## Steps to reproduce:
- Install Sales app;
- Navigate to the Settings app:
- Under the `Companies` section, configure the document layout: - Ensure the `Bubble` (or `Boxed`) layout is selected;
- Navigate to the Sales app:
- Create a new quote with 8x `Chair floor protection`;
- Via the `Actions` gear button, print the `PDF Quote`.
## Cause:
Complete code refactoring for documents layouts styles introduced by https://github.com/odoo/odoo/pull/169512 has probably not been tested on that use case.
## Fix:
<img width="1105" alt="Capture d’écran 2025-04-03 à 10 25 58" src="https://github.com/user-attachments/assets/67bce15e-c5e9-40f8-9fbf-7721afc98ae5" />
opw-4624623
opw-4627809
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#204575In this PR, we adapt existing demo data to showcase the flows of the new ESG module. We also create a category for this new module. [task-4517841](https://www.odoo.com/odoo/project.task/4517841) Related to https://github.com/odoo/enterprise/pull/79004 Forward-Port-Of: odoo/odoo#195951
Original PR description
In this PR, we adapt existing demo data to showcase the flows of the new ESG module. We also create a category for this new module. [task-4517841](https://www.odoo.com/odoo/project.task/4517841) Related to https://github.com/odoo/enterprise/pull/79004 Forward-Port-Of: odoo/odoo#195951
Steps to reproduce the bug: - Use Edge browser with zoom set to 150% (default zoom on Windows installations). - On a screen with a resolution of 1920px (and the browser window set to full width). - Install the Website app and go to the homepage. - The page is displayed in desktop view. - Enter edit mode by clicking the "Edit" button. - The page width becomes smaller than the mobile breakpoint. As a result , the page switches to mobile view: the navbar turns into a hamburger menu, and the
Original PR description
Steps to reproduce the bug: - Use Edge browser with zoom set to 150% (default zoom on Windows installations). - On a screen with a resolution of 1920px (and the browser window set to full width). -…
Steps to reproduce the bug: - Use Edge browser with zoom set to 150% (default zoom on Windows installations). - On a screen with a resolution of 1920px (and the browser window set to full width). - Install the Website app and go to the homepage. - The page is displayed in desktop view. - Enter edit mode by clicking the "Edit" button. - The page width becomes smaller than the mobile breakpoint. As a result , the page switches to mobile view: the navbar turns into a hamburger menu, and the layout changes to mobile style. This should not happen, as the edit mode is designed to remain in desktop view with 150% zoom on 1920px wide screens. The issue is caused by Edge adding a few pixels of border around the browser window, which leads to this problem specific to Edge. To fix this in the stable version, we reduce the sidebar width in edit mode by 5 pixels to ensure the page stays in desktop view. This change is applied only if the browser is Edge and 150% zoom is used. In all other cases, no changes are made. This fix is temporary. In the next redesign of the edit mode sidebar, the sidebar width will be adjusted accordingly so that this workaround will no longer be necessary. Note: The Arc browser has the same issue, but we haven’t fixed it because there’s currently no way to reliably detect it in JavaScript. Since Arc is much less popular than Edge, it’s less critical. task-4587203 Forward-Port-Of: odoo/odoo#207835 Forward-Port-Of: odoo/odoo#205721
* = pos_restaurant In this commit: === - Ensured that when a popup is open and the screensaver appears, the popup no longer overlays the screensaver. - Fixed an issue in the restaurant module is installed, after the screensaver appears on the login screen, clicking would bring back the login screen, but attempting to open a session would trigger the screensaver again. task-4607035 Forward-Port-Of: odoo/odoo#207810 Forward-Port-Of: odoo/odoo#199528
Original PR description
* = pos_restaurant In this commit: === - Ensured that when a popup is open and the screensaver appears, the popup no longer overlays the screensaver. - Fixed an issue in the restaurant module is installed, after the screensaver appears on the login screen, clicking would bring back the login screen, but attempting to open a session would trigger the screensaver again. task-4607035 Forward-Port-Of: odoo/odoo#207810 Forward-Port-Of: odoo/odoo#199528
PR #202334 introduced a test in `pos_loyalty` that depends on the field `discount_product_id` that is created in the module `pos_discount`. However, `pos_loyalty` and `pos_discount` does not have dependence, so the fails if `pos_discount` is not installed. This PR only runs it when `pos_discount` is installed. opw-4622428 Forward-Port-Of: odoo/odoo#207758
Original PR description
PR #202334 introduced a test in `pos_loyalty` that depends on the field `discount_product_id` that is created in the module `pos_discount`. However, `pos_loyalty` and `pos_discount` does not have dependence, so the fails if `pos_discount` is not installed. This PR only runs it when `pos_discount` is installed. opw-4622428 Forward-Port-Of: odoo/odoo#207758
Since https://github.com/odoo/odoo/pull/197629 there's no need to save to access newly created child records: pressing “View” to switch to the form view is done directly by triggering a save. But this has been broken on project since https://github.com/odoo/odoo/pull/200153/files#diff-e9f20117c15ae605880f16d452197f66d140754be214b7e32b3dcdbd75fd7e37R12-R32 The `switchToForm` override completely bypasses the original flow. This pr corrects this problem by splitting the `x2many_field` logi
Original PR description
Since https://github.com/odoo/odoo/pull/197629 there's no need to save to access newly created child records: pressing “View” to switch to the form view is done directly by triggering a save. But this has been broken on project since https://github.com/odoo/odoo/pull/200153/files#diff-e9f20117c15ae605880f16d452197f66d140754be214b7e32b3dcdbd75fd7e37R12-R32 The `switchToForm` override completely bypasses the original flow. This pr corrects this problem by splitting the `x2many_field` logic into two functions to allow easier override of the action (as in the case of project), and thus fixes the problem on the project side. task-4752252 Forward-Port-Of: odoo/odoo#207433
Currently, since we read most data from cache, if an employee right was changed, it is not reflected in the pos. Steps to reproduce: ------------------- * Enable "Log in with employees" and set some records for each field. * Open session, make a sale, close register * Edit employees configuration, delete one, change rights advanced -> minimal * Reopen the session > Observation: The employee deleted is still visible in the list of cashiers and the employee that has now minimal rights is
Original PR description
Currently, since we read most data from cache, if an employee right was changed, it is not reflected in the pos. Steps to reproduce: ------------------- * Enable "Log in with employees" and set some…
Currently, since we read most data from cache, if an employee right was changed, it is not reflected in the pos. Steps to reproduce: ------------------- * Enable "Log in with employees" and set some records for each field. * Open session, make a sale, close register * Edit employees configuration, delete one, change rights advanced -> minimal * Reopen the session > Observation: The employee deleted is still visible in the list of cashiers and the employee that has now minimal rights is still having advanced rights. Why the fix: ------------ When removing rights from an employee it is important to have it reflected as soon as possible. A possible solution would have been to recompute `last_data_change` when making any modification on the employee rights but this would recompute everything and we lose the performance added by the caching feature. Instead, by adding the model to `uniqueModels` we ensure that anytime we reload the pos, all `hr.employee` records will be dropped from the indexedDB, which ends up using the data loaded. https://github.com/odoo/odoo/blob/5d52373b4c9d64968316c4e883d6b49c7cd1d048/addons/point_of_sale/static/src/app/services/data_service.js#L246-L251 opw-4699241 Forward-Port-Of: odoo/odoo#206914 Forward-Port-Of: odoo/odoo#206099
Build error 162704 Follow-up on other WebSocket fixes, this time for the execution of the WebSocket request inside the same test, but not after a Chrome browser. This case is quite specific and is related to a low timeout set on websocket_connect, leading to the request being randomly executed inside the test. This is a problem for the current test (fixed by increasing the timeout), but also for the next test: if the TestCursor rollback fails, the cursor_stack of the TestCursor is not empt
Original PR description
Build error 162704 Follow-up on other WebSocket fixes, this time for the execution of the WebSocket request inside the same test, but not after a Chrome browser. This case is quite specific and is related to a low timeout set on websocket_connect, leading to the request being randomly executed inside the test. This is a problem for the current test (fixed by increasing the timeout), but also for the next test: if the TestCursor rollback fails, the cursor_stack of the TestCursor is not emptied, leading to a case where an existing read-only test cursor in the stack makes the next TestCursor read-only, causing chain failures. Forward-Port-Of: odoo/odoo#207974
After e1145d56162a5b88fe56b78abf70f7bd104ead00 we do not compute pricelists unless they are enabled which caused some tests to fail as they expected pricelists to be activated. Forward-Port-Of: odoo/odoo#207948
Original PR description
After e1145d56162a5b88fe56b78abf70f7bd104ead00 we do not compute pricelists unless they are enabled which caused some tests to fail as they expected pricelists to be activated. Forward-Port-Of: odoo/odoo#207948
Before this PR, real user name was displayed in the message reaction summary. We should use the custom live chat name if any not to leak the real name of the agent. This PR fixes this issue. 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#207768 Forward-Port-Of: odoo/odoo#207398
Original PR description
Before this PR, real user name was displayed in the message reaction summary. We should use the custom live chat name if any not to leak the real name of the agent. This PR fixes this issue. 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#207768 Forward-Port-Of: odoo/odoo#207398
Before this commit, there was no test to ensure that orders could be validated correctly when using a currency with zero decimal places. This commit adds a test to validate an order with a zero decimal places currency, ensuring that the system handles such cases without errors. opw-4595028 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203380 Forward-Port-Of: odoo/odoo#198754
Original PR description
Before this commit, there was no test to ensure that orders could be validated correctly when using a currency with zero decimal places. This commit adds a test to validate an order with a zero decimal places currency, ensuring that the system handles such cases without errors. opw-4595028 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203380 Forward-Port-Of: odoo/odoo#198754
This PR fixes the order of the reporting measures in the pivot view of the livechat agents report. task-4753008 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207781
Original PR description
This PR fixes the order of the reporting measures in the pivot view of the livechat agents report. task-4753008 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207781
With this commit; if a template is selected (need to be added in xml view in 16.0 but already display in 17.2) the body and the subject will be rendered. task-4664784 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#207816 Forward-Port-Of: odoo/odoo#203254
Original PR description
With this commit; if a template is selected (need to be added in xml view in 16.0 but already display in 17.2) the body and the subject will be rendered. task-4664784 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#207816 Forward-Port-Of: odoo/odoo#203254
When using an intermediate return location, the delivered qty of a returned kit is incorrect To reproduce the issue: 1. In Settings, enable "Multi-Step Routes" 2. Create a location L: - Parent: WH - Type: Internal - Return location: True 3. Create a route: - Applicable on: Main warehouse - Add one rule: - Action: Push To - Operation Type: Internal - From: L - To: WH/Stock 4. Create a kit K 5. Sell and deliver 1 x K 6. Return it to L - It
Original PR description
When using an intermediate return location, the delivered qty of a returned kit is incorrect To reproduce the issue: 1. In Settings, enable "Multi-Step Routes" 2. Create a location L: - Parent: WH -…
When using an intermediate return location, the delivered qty of a
returned kit is incorrect
To reproduce the issue:
1. In Settings, enable "Multi-Step Routes"
2. Create a location L:
- Parent: WH
- Type: Internal
- Return location: True
3. Create a route:
- Applicable on: Main warehouse
- Add one rule:
- Action: Push To
- Operation Type: Internal
- From: L
- To: WH/Stock
4. Create a kit K
5. Sell and deliver 1 x K
6. Return it to L
- It will create an internal transfer
7. Process the internal transfer
8. Open the SO
Error: The delivered quantity of the kit is -1 instead of 0
Step 6, when returning the kit, the push rule is applied and create
the SM from L to WH/Stock. Since we copy the SM from Customer to L, the
new SM also has the field `sale_line_id` defined.
As a result, step 7, since all SM are done, `moves` contain them
(the delivery, the return and the internal transfer). We then filter
them based on some criteria:
https://github.com/odoo/odoo/blob/9918e8f3d627f3c52238d6b04bcd15c05d34e40c/addons/sale_mrp/models/sale_order_line.py#L67-L73
But, for `outgoing_moves` (which is actually the incoming ones, the
name is wrong), since we look at the destination location, both the
return and the internal SM will match. That's why we will decrease
twice the delivered quantity. Hence, the bug.
A fix could be to avoid copying the `sale_line_id` field. That being
said, when looking `sale_stock` side (i.e., same flow with a classic
product), we don't have any issue because the filters are slightly
different:
https://github.com/odoo/odoo/blob/418dc0cc3b3aa1ee2abbdb4852d9cd24fba7636e/addons/sale_stock/models/sale_order_line.py#L274-L278
(Here, we need to look at the `incoming_moves`. Again: the name is just
incorrect on mrp side...)
We see that, for `incoming_moves`, we actually look at the source
location. This explains why we don't have any issue with a non-kit
product.
Therefore, the best fix would be to use the same filters everywhere.
Good news, such a method already exist:
https://github.com/odoo/odoo/blob/9918e8f3d627f3c52238d6b04bcd15c05d34e40c/addons/sale_mrp/models/sale_order_line.py#L115-L116
However, using this method might lead to some other issues (among them:
the override in `sale_subscription_stock` reads a field although the
method is an `api.model` one). So, let's minimize the diff on stable
version and refactor the code (use the same filters everywhere) on
master.
About the filter names, the confusion actually comes from:
https://github.com/odoo/odoo/blob/312572c7b8138a4800350cd7a524a37551a348ef/addons/mrp/models/stock_move.py#L624
There, we should rather talk about positive moves and negatives
moves, since this method can be used either in a SO flow or in a PO
one. This explains why, for now, SO sode, an "incoming move" is
actually an outgoing one. So, on master, another commit will be
added to also clean that part of the code:
\- Improve the expected filter names in `_compute_kit_quantities`
\- Fix the filter names in `_get_incoming_outgoing_moves_filter`
OPW-4625228
Forward-Port-Of: odoo/odoo#207739
Forward-Port-Of: odoo/odoo#206966When `<attribute name="string" add="something more"` is used to add onto a string in another view, the `"something more"` string isn't translatable. Therefore since there isn't anything else adding onto this string, let's completely replace it with the original string + the "something more" string. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207896
Original PR description
When `<attribute name="string" add="something more"` is used to add onto a string in another view, the `"something more"` string isn't translatable. Therefore since there isn't anything else adding onto this string, let's completely replace it with the original string + the "something more" string. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207896
**Current behavior:** With anglo saxon accounting and real-time valuation, purchasing a kit product with a BoM that has components whose costs add up to the exact price of the kit product and that is invoiced on ordered qty and has avg costing, then billing before receiving will prevent the reception from being validate-able. **Expected behavior:** Can validate **Steps to reproduce:** 1. Create a kit product with avg costing, invoiced on ordered qty, and a BoM with 2 components tha
Original PR description
**Current behavior:** With anglo saxon accounting and real-time valuation, purchasing a kit product with a BoM that has components whose costs add up to the exact price of the kit product and that is…
**Current behavior:** With anglo saxon accounting and real-time valuation, purchasing a kit product with a BoM that has components whose costs add up to the exact price of the kit product and that is invoiced on ordered qty and has avg costing, then billing before receiving will prevent the reception from being validate-able. **Expected behavior:** Can validate **Steps to reproduce:** 1. Create a kit product with avg costing, invoiced on ordered qty, and a BoM with 2 components that have a cumulative cost equalling that of the final kit product 2. Make a purchase for it, invoice -> post 3. Try to validate the receipt -> can't due to attempted re-reconicilation **Cause of the issue:** When validating the receipt, we end up here: https://github.com/odoo/odoo/blob/c9ea75efb8e260d6bea5b777f4f950f106ffcfa5/addons/stock_account/models/stock_valuation_layer.py#L81-L90 And attempt to reconcile both the original kit product AML from corresponding to the purchase line as well as the AML for the component in the stock input account. But we only will capture 1 exploded component AML in each loop iteration, so the original kit product AML will not actually be set `reconciled = True`, so we will also add it to be reconciled again: https://github.com/odoo/odoo/blob/c9ea75efb8e260d6bea5b777f4f950f106ffcfa5/addons/stock_account/models/stock_valuation_layer.py#L90 The same thing happens in subsequent calls to `_stock_account_anglo_saxon_reconcile_valuation()`, except on a final call for the last component line- if the components' cumulative cost aligns with the total cost of the kit product (which it should) then the reconciliation attempt will succeed. Then here: https://github.com/odoo/odoo/blob/c9ea75efb8e260d6bea5b777f4f950f106ffcfa5/addons/stock_account/models/stock_valuation_layer.py#L92 `reconcile()` is called on the already-reconciled AML which will cause the re-reconiliation error. **Fix** Reconcile all the resulting kit AMLs (component AMLs + actual kit product AML from the bill) together. opw-4668004 Forward-Port-Of: odoo/odoo#207803 Forward-Port-Of: odoo/odoo#205401
Thanks to [1], we can now fix the website page properties tour ensuring that the necessary elements are visible on the page. [1]: https://github.com/odoo/odoo/commit/4e25c13c918382afb34013a6dd30aac4a0ce4e84 runbot-106391 Co-authored-by: Pierre Pulinckx Forward-Port-Of: odoo/odoo#207740
Original PR description
Thanks to [1], we can now fix the website page properties tour ensuring that the necessary elements are visible on the page. [1]: https://github.com/odoo/odoo/commit/4e25c13c918382afb34013a6dd30aac4a0ce4e84 runbot-106391 Co-authored-by: Pierre Pulinckx Forward-Port-Of: odoo/odoo#207740
Purpose of this commit: To show the status of the livechat session in the kanban view. task-4753047 Forward-Port-Of: odoo/odoo#207662
Original PR description
Purpose of this commit: To show the status of the livechat session in the kanban view. task-4753047 Forward-Port-Of: odoo/odoo#207662
When uninstalling Odoo with the NSIS uninstaller, whole install dir is removed when ngingx is not found which is not the desired behavior. While at it, update the NSIS version. Forward-Port-Of: odoo/odoo#207873 Forward-Port-Of: odoo/odoo#207464
Original PR description
When uninstalling Odoo with the NSIS uninstaller, whole install dir is removed when ngingx is not found which is not the desired behavior. While at it, update the NSIS version. Forward-Port-Of: odoo/odoo#207873 Forward-Port-Of: odoo/odoo#207464
This commit adds a new button to the dialog used to connect the IoT Box to a Wi-Fi network, to display/hide the password. Forward-Port-Of: odoo/odoo#207285
Original PR description
This commit adds a new button to the dialog used to connect the IoT Box to a Wi-Fi network, to display/hide the password. Forward-Port-Of: odoo/odoo#207285
Forward-Port-Of: odoo/odoo#208093 Forward-Port-Of: odoo/odoo#208076
Original PR description
Forward-Port-Of: odoo/odoo#208093 Forward-Port-Of: odoo/odoo#208076
odoo/odoo#203874 broke compatibility with Python 3.8 and Python 3.9 due to the typing annotations, leading `test_pylint` to fail on Focal and Bullseye: - `list[int]` requires Python 3.9 (PEP 585) - type-wise `a | b` requires Python 3.10 (PEP 604) Making annotations lazy works around the issue (and changes less stuff than removing the annotations). Forward-Port-Of: odoo/odoo#208110
Original PR description
odoo/odoo#203874 broke compatibility with Python 3.8 and Python 3.9 due to the typing annotations, leading `test_pylint` to fail on Focal and Bullseye: - `list[int]` requires Python 3.9 (PEP 585) - type-wise `a | b` requires Python 3.10 (PEP 604) Making annotations lazy works around the issue (and changes less stuff than removing the annotations). Forward-Port-Of: odoo/odoo#208110
**Current behavior before PR:** The agents reporting pivot view displayed the `display_name` of agents instead of their `name`. **Desired behavior after PR is merged:** The pivot view now shows the `name` of agents. **Task**-4753030 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207705
Original PR description
**Current behavior before PR:** The agents reporting pivot view displayed the `display_name` of agents instead of their `name`. **Desired behavior after PR is merged:** The pivot view now shows the `name` of agents. **Task**-4753030 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207705
In continuation of this pull request https://github.com/odoo/enterprise/pull/81569 We had to add more features, this includes: - An improvement of the return dashboard journal: (name and style) - Support for dark mode - Additional checks for oss and intrastat - periodicity selection order changed Forward-Port-Of: odoo/enterprise#84115
Original PR description
In continuation of this pull request https://github.com/odoo/enterprise/pull/81569 We had to add more features, this includes: - An improvement of the return dashboard journal: (name and style) - Support for dark mode - Additional checks for oss and intrastat - periodicity selection order changed Forward-Port-Of: odoo/enterprise#84115
[IMP] account_reports: EC Sales List return: checks improvement - Make the checks generic for all returns made for any EC Sales List, not just for Belgium - Improve the phrasing of the check messages [FIX] account_reports: EC Sales List generic check: wrong warning keys The account_reports prefix was missing ; so the check was never considered a failure. Forward-Port-Of: odoo/enterprise#84110
Original PR description
[IMP] account_reports: EC Sales List return: checks improvement - Make the checks generic for all returns made for any EC Sales List, not just for Belgium - Improve the phrasing of the check messages [FIX] account_reports: EC Sales List generic check: wrong warning keys The account_reports prefix was missing ; so the check was never considered a failure. Forward-Port-Of: odoo/enterprise#84110
Add, update, or delete some checks done on the accounting returns for the vat return and the partner vat listing reports. task-4627315 Forward-Port-Of: odoo/enterprise#84103
Original PR description
Add, update, or delete some checks done on the accounting returns for the vat return and the partner vat listing reports. task-4627315 Forward-Port-Of: odoo/enterprise#84103
Before we did it only for be but it was decided to move it for every l10n Forward-Port-Of: odoo/enterprise#84047
Original PR description
Before we did it only for be but it was decided to move it for every l10n Forward-Port-Of: odoo/enterprise#84047
When `<attribute name="string" add="something more"` is used to add onto a string in another view, the `"something more"` string isn't translatable. Therefore since there isn't anything else adding onto this string, let's completely replace it with the original string + the "something more" string. Forward-Port-Of: odoo/enterprise#84388
Original PR description
When `<attribute name="string" add="something more"` is used to add onto a string in another view, the `"something more"` string isn't translatable. Therefore since there isn't anything else adding onto this string, let's completely replace it with the original string + the "something more" string. Forward-Port-Of: odoo/enterprise#84388
Forward-Port-Of: odoo/enterprise#84269
Original PR description
Forward-Port-Of: odoo/enterprise#84269
Dates used to be loaded as strings until odoo/odoo#189879 in 18.2. Now they're loaded as luxon DateTime objects and those cannot be passed directly to `t-out`. Task: 4751574 Forward-Port-Of: odoo/enterprise#84096
Original PR description
Dates used to be loaded as strings until odoo/odoo#189879 in 18.2. Now they're loaded as luxon DateTime objects and those cannot be passed directly to `t-out`. Task: 4751574 Forward-Port-Of: odoo/enterprise#84096
- If the payslip sturct has `use_worked_day_lines = False` the printed payslip shoud not have worked_days_table Task: 4720429 Forward-Port-Of: odoo/enterprise#84248
Original PR description
- If the payslip sturct has `use_worked_day_lines = False` the printed payslip shoud not have worked_days_table Task: 4720429 Forward-Port-Of: odoo/enterprise#84248
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question and open the generated PDF - The address is not the one of the company, the footer doesn't show the right company, etc ### Cause: When sending to multiple partners, the action is dispatched with cron so a new `env` is created. This `env` has all companies active and the first one as main company.
Original PR description
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question and open the generated PDF - The address is not the one of the company, the footer doesn't show the right company, etc ### Cause: When sending to multiple partners, the action is dispatched with cron so a new `env` is created. This `env` has all companies active and the first one as main company. So in the end the wrong company is used to generate the report. ### Solution: In the cron when calling `_process_send_and_print` we give `report.with_company(company)` to make sure that the value the report will us are the one from the correct company. Also revert the small [fix](https://github.com/odoo/enterprise/pull/82320/files) that was made before, which is no longer needed. opw-4635283 Forward-Port-Of: odoo/enterprise#84408
This PR adds a validation check for a company's GST token before making GST API calls via cron. These validations already exist when making GST API calls through the GST return period but were missing in the cron execution. This ensures that no unnecessary cron execution and api call takes place. task-4350780 Forward-Port-Of: odoo/enterprise#84339 Forward-Port-Of: odoo/enterprise#81974
Original PR description
This PR adds a validation check for a company's GST token before making GST API calls via cron. These validations already exist when making GST API calls through the GST return period but were missing in the cron execution. This ensures that no unnecessary cron execution and api call takes place. task-4350780 Forward-Port-Of: odoo/enterprise#84339 Forward-Port-Of: odoo/enterprise#81974
Following 002df5f10d2378bab139ea5d59af7be3d6b40358 which made an error. When creating a new model, the feature that make a record specific to a company (ie: "use_company" -- just adds a field "company_id" on a model) should not be available when in single company mode, but should be available when in multicompany mode opw-4752832 Forward-Port-Of: odoo/enterprise#84225
Original PR description
Following 002df5f10d2378bab139ea5d59af7be3d6b40358 which made an error. When creating a new model, the feature that make a record specific to a company (ie: "use_company" -- just adds a field "company_id" on a model) should not be available when in single company mode, but should be available when in multicompany mode opw-4752832 Forward-Port-Of: odoo/enterprise#84225
Open Trial Balance report in debug mode Access report options In Column tab, check 'Blank if Zero' for all columns Go back to report Issue: If Initial/End Balance columns are blank, also the total line will be blank. This occurs since f3c230817087d452f810b8473f813add0ead30d0 were the formatting of values has been delayed to improve performances but the exception on 'blank_if_zero' was lost opw-4624006 Forward-Port-Of: odoo/enterprise#84070 Forward-Port-Of: odoo/enterprise#83493
Original PR description
Open Trial Balance report in debug mode Access report options In Column tab, check 'Blank if Zero' for all columns Go back to report Issue: If Initial/End Balance columns are blank, also the total line will be blank. This occurs since f3c230817087d452f810b8473f813add0ead30d0 were the formatting of values has been delayed to improve performances but the exception on 'blank_if_zero' was lost opw-4624006 Forward-Port-Of: odoo/enterprise#84070 Forward-Port-Of: odoo/enterprise#83493
…terms Steps to reproduce: - With an ES company setup - Create 1 invoice to an EU partner with the payment term "30% Now, Balance 60 Days" - Make sure Mod349 Invoice Type is set - Go to Accounting / Reporting / Statement Reports / Tax Report - Select Tax Report (Mod 349) (ES) Issue: Amount shown on lines "Total amount of intra-community operations" and "E. Intra-community sales" is doubled. This occurs because each installment of the payment terms will be a payment term line, an
Original PR description
…terms Steps to reproduce: - With an ES company setup - Create 1 invoice to an EU partner with the payment term "30% Now, Balance 60 Days" - Make sure Mod349 Invoice Type is set - Go to Accounting / Reporting / Statement Reports / Tax Report - Select Tax Report (Mod 349) (ES) Issue: Amount shown on lines "Total amount of intra-community operations" and "E. Intra-community sales" is doubled. This occurs because each installment of the payment terms will be a payment term line, and the query retrieving values to compose MOD349 will take the whole move amount for each payment term line. opw-4637439 Forward-Port-Of: odoo/enterprise#84085 Forward-Port-Of: odoo/enterprise#82435
task-4751862 Forward-Port-Of: odoo/enterprise#84094
Original PR description
task-4751862 Forward-Port-Of: odoo/enterprise#84094
"Do not disturb selector changes state correctly with limited time" is failing with this error: ``` 9. [toBe] Failed to find 1 of "p" with text "Until Jan 1, 2025, 1:15 AM" (Timeout of 3 seconds). Found 0 instead. > Expected: true > Received: false ``` Depending on the environment, it seems that the time is sometimes formatted with a nonbreaking space before the AM, and sometimes not. This is likely the reason for the failure. This commit adapts the test in order to exclude the prob
Original PR description
"Do not disturb selector changes state correctly with limited time" is failing with this error: ``` 9. [toBe] Failed to find 1 of "p" with text "Until Jan 1, 2025, 1:15 AM" (Timeout of 3 seconds). Found 0 instead. > Expected: true > Received: false ``` Depending on the environment, it seems that the time is sometimes formatted with a nonbreaking space before the AM, and sometimes not. This is likely the reason for the failure. This commit adapts the test in order to exclude the problematic space from the selector. Forward-Port-Of: odoo/enterprise#84383
Before this commit _compute_parent_line_id make the assumption that a parent line can only be linked to once child: When the parent_line_id is set, it's remove from the pool of possible parent_line_id Actually this is not the case, different upsell order can have a line that have the same parent. Upsell order A can have line 1 with the same parent as the line 2 of Upsell order B. Before this commit if the parent line of both order were computed at the same time one of them would end up
Original PR description
Before this commit _compute_parent_line_id make the assumption that a parent line can only be linked to once child: When the parent_line_id is set, it's remove from the pool of possible…
Before this commit _compute_parent_line_id make the assumption that a parent line can only be linked to once child: When the parent_line_id is set, it's remove from the pool of possible parent_line_id Actually this is not the case, different upsell order can have a line that have the same parent. Upsell order A can have line 1 with the same parent as the line 2 of Upsell order B. Before this commit if the parent line of both order were computed at the same time one of them would end up without parent. This situation is getting worse since odoo@42008de (saas-18.1) were all the parent_line_id are recomputed on every upsell order (even already confirmed one) as soon as line on the parent order are touched The follow use case lead to duplicate line on the parent A parent subscription A with 1 product Z Create an upsell B with a line that upsell 1 product Z Create an upsell C with a line that upsell 1 product Z On both upsell the parent line is set properly Confirm Upsell B, the parent line on Upsell C is set to false Confirm Upsell B, the parent subscription ends up with a two line for the product Z After this commit, parent_line_id are computed per order, so one order cannot have two lines with the same parent_line_id but two (or more) different order can have each one line with the same parent_line_id even if their parent_line_id are computed at the same time. Forward-Port-Of: odoo/enterprise#84340 Forward-Port-Of: odoo/enterprise#84255
Steps to Reproduce: 1. A document with a long title 2. Upload document 3. Preview the document When a document had a long title, the action buttons in the DocumentsFileViewer The header became misaligned. After this commit: No misalignment on action buttons. Task-4600177 Forward-Port-Of: odoo/enterprise#84375
Original PR description
Steps to Reproduce: 1. A document with a long title 2. Upload document 3. Preview the document When a document had a long title, the action buttons in the DocumentsFileViewer The header became misaligned. After this commit: No misalignment on action buttons. Task-4600177 Forward-Port-Of: odoo/enterprise#84375
The aim of this commit is fixing a traceback when we have a statement group with no balance passed as props. It could happen when we have statement lines without any statement between 2 groups of statement lines with statement. This commit changes the component to set this props as optional (as before) and adds a new props "isValid" to put the label of the statement group in text-danger when the statement is not valid. no task id Forward-Port-Of: odoo/enterprise#84387
Original PR description
The aim of this commit is fixing a traceback when we have a statement group with no balance passed as props. It could happen when we have statement lines without any statement between 2 groups of statement lines with statement. This commit changes the component to set this props as optional (as before) and adds a new props "isValid" to put the label of the statement group in text-danger when the statement is not valid. no task id Forward-Port-Of: odoo/enterprise#84387
**PURPOSE** ESG (Environmental, Social, and Governance) module was built with one clear mission: to make ESG reporting simple, integrated, and affordable for every business. Today, ESG is no longer a nice-to-have, it's a legal, financial, and reputational necessity. With the EU's Corporate Sustainability Reporting Directive (CSRD) now in force, companies are required to report their environmental, social, and governance performance using formal frameworks like the European Sustainability Rep
Original PR description
**PURPOSE** ESG (Environmental, Social, and Governance) module was built with one clear mission: to make ESG reporting simple, integrated, and affordable for every business. Today, ESG is no longer a…
**PURPOSE**
ESG (Environmental, Social, and Governance) module was built with one clear mission: to make ESG reporting simple, integrated, and affordable for every business.
Today, ESG is no longer a nice-to-have, it's a legal, financial, and reputational necessity. With the EU's Corporate Sustainability Reporting Directive (CSRD) now in force, companies are required to report their environmental, social, and governance performance using formal frameworks like the European Sustainability Reporting Standards (ESRS).
But beyond compliance, the pressure is mounting from all sides: investors are assessing ESG risks before funding businesses, major clients are adding sustainability criteria to supplier evaluations, and consumers are choosing brands that act responsibly. At the same time, ESG opens up massive business opportunities; from lowering energy costs and improving employee retention to building long-term trust and brand loyalty.
That's where Odoo comes in. By natively integrating with apps like Accounting, Fleet, Payroll, and Employees, we automate ESG data collection, eliminating the manual burden and reducing the cost and time spent collecting the data required for carbon footprint reporting. Each business activity can be tracked, through expense type of account move lines, in real time, giving you an up-to-date view of your emissions and enabling you to measure the immediate impact of your sustainability efforts.
If you work with a carbon consultant, their configuration becomes a reusable asset, making year-on-year updates seamless. For environmental consultancies, we also offers the most affordable carbon tracking tool on the market enabling you to focus on expertise services while giving clients a powerful, integrated platform without the need for expensive external tools. With secure access rights, ESG professionals can collaborate directly on client data, just like accountants do.
With Odoo, ESG impact is no longer a burden or a side project, it becomes a natural, data-driven part of how you run your business.
**MODELS**
* Source Database (`esg.database`): connect to certified emission factor databases, including regional and sector-specific sources (e.g. ADEME, IPCC). Download the DB that the system proposes and that fit your business needs or upload yours by creating a new one.
* Gaz (`esg.gas`): includes the six gases defined under the Kyoto Protocol: CO₂, CH₄, N₂O, HFCs, PFCs, and SF₆. Each gas is assigned a Global Warming Potential (GWP) value, allowing for conversion into a standard unit — CO₂-equivalents (kgCO₂e). This ensures consistency and comparability across different emission sources, aligning with GHG Protocol standards.
* Emission Sources (`esg.emission.source`): grouped into three scopes based on their origin:
- Scope 1: Direct emissions from owned or controlled sources (e.g. fuel used in company cars or on-site combustion).
- Scope 2: Indirect emissions from purchased energy (e.g., electricity, steam, heating).
- Scope 3: All other indirect emissions from the value chain, including both upstream (e.g. supplier emissions, travel) and downstream (e.g. product use, waste). Scope 3 often represents the majority of total emissions.
* Emission factors (`esg.emission.factor`): coefficients which allows to convert activity data into GHG emissions.
- Computation method: physical vs monetary (choose how emissions are calculated)
- Physical: based on quantity and unit of measure: e.g. kg CO₂ per liter of fuel or per kWh — more precise.
- Monetary: based on amount and currency: e.g. kg CO₂ per € spent — useful when no physical data is available.
* Assignation Rules (`esg.assignation.line`): define how the emission factors will be assigned on the account move lines.
- Product level (e.g. laptop, printer)
- Partner level (e.g. emissions tied to a specific supplier)
- Account level (e.g. expense account 6700 for Office Equipment)
=> Product assignation takes precedence over partner and account, and partner assignation takes precedence over account.
* Activity type mapping (`esg.activity.type`): link each emission to a lifecycle activity type (e.g. Raw Materials, Transport, Energy).
* Other Emissions (`esg.other.emission`): emissions that are not linked to a journal entry. This allows for the inclusion of emissions from activities that are not directly tied to financial transactions, such as employee commuting or waste disposal.
**MENU ITEMS**
* Collect:
- Emissions: automatic data synchronization. Pulls data from Accounting for purchase and expense data and provides a “New” option to add Other Emissions (not linked to a journal entry) manually. The system will assign Emission Factor if there's a pre-configured assignation rule and if not, the user can add an emission factor on an emission manually.
- Employee commuting pivot table: uses data from the Employee (distance from home to office), Fleet (Vehicle model and associated emission factor (gCO₂/km)).
Apply the formula: `Days * Distance * 2 (round trip) * 3/7 (average number of office days per week) * Vehicle emission factor`
* Measure -> Environment:
- Carbon Analytics: visualize and analyze emissions per year, scopes (1,2,3), activity types (energy, transport, etc.), etc. To highlight where to act to have the biggest impact on your company's carbon footprint.
- Carbon Footprint Report: automatically generate your company's carbon footprint report: in tCO₂e (tonnes of CO₂ equivalent), by scopes, with gas repartition, aligned with “Le Bilan Carbone” and “GHG Protocol” requirements, available in downloadable PDF and Excel formats for submission or internal use.
* Measure -> Social:
- Gender Parity: view gender breakdown across departments, leadership levels, locations, job positions, etc.
- Pay Gap Calculation: automatically calculates the median hourly pay gap between male and female employees, following the EU method: `(Median male pay - Median female pay) / Median male pay * 100`
* Act:
- Initiatives as projects: Use the Project module to manage ESG actions.
[ task-4517841](https://www.odoo.com/odoo/project.task/4517841)
Related to https://github.com/odoo/odoo/pull/195951
Forward-Port-Of: odoo/enterprise#79004Forward-Port-Of: odoo/enterprise#84345 Forward-Port-Of: odoo/enterprise#83244
Original PR description
Forward-Port-Of: odoo/enterprise#84345 Forward-Port-Of: odoo/enterprise#83244
Before this commit, achievement were performed using records on account_move, sale_order and sale_order_log tables (+ move lines, order lines, products etc). Reading those table is extermely costly. We tried to limit what we fetched using context depending on the current action: - https://github.com/odoo/enterprise/commit/7c8621e71b1e8267cd6e0e7968cbb46705568e32 - https://github.com/odoo/enterprise/pull/80043 And we had to revert it here: https://github.com/odoo/enterprise/commit/c
Original PR description
Before this commit, achievement were performed using records on account_move, sale_order and sale_order_log tables (+ move lines, order lines, products etc). Reading those table is extermely costly.…
Before this commit, achievement were performed using records on account_move, sale_order and sale_order_log tables (+ move lines, order lines, products etc). Reading those table is extermely costly. We tried to limit what we fetched using context depending on the current action: - https://github.com/odoo/enterprise/commit/7c8621e71b1e8267cd6e0e7968cbb46705568e32 - https://github.com/odoo/enterprise/pull/80043 And we had to revert it here: https://github.com/odoo/enterprise/commit/c6ee48faa967342c958b4410e71b49bf453cd316 Using a period_domain in the context computed on fly in _where_calc was a bad idea. The record were correctly fetched but the following flow was broken: Go to an approved commission plan --> click on the commissions stat button --> everything is correct Now click on details for a commission line with non empty achived amount All the achievements are correct but when we click on "Details" of sale.commission.achievement.report (id=42) account_move (142), we may end up on another record. Because when the ORM does the fetch query, it will fetch sale.commission.achievement.report where id=42 and at that moment, the context is lost when we click on the line. Therefore as ids are recomputed, the line 42 is not the one corresponding to the account move 142 anymore. This commit ensure we avoid doing a cross join on account_move or sale_order or sale_order_log because these are really bad for performance and we select the record in a CTE. - We select them based on current users, teams if defined - We avoid fetching records outside of plan date values Forward-Port-Of: odoo/enterprise#84352 Forward-Port-Of: odoo/enterprise#82518
When a bank statement line has a partner name (from the bank), that is not in our database, we have a button to create it. Add the partner name from the bank as the default for the new partner. task-4749340 Forward-Port-Of: odoo/enterprise#84137
Original PR description
When a bank statement line has a partner name (from the bank), that is not in our database, we have a button to create it. Add the partner name from the bank as the default for the new partner. task-4749340 Forward-Port-Of: odoo/enterprise#84137