Friday, April 4, 2025
32 changes · saas-18.1
Resolved issues and error corrections
Chart clicks are now handled consistently so selecting a chart legend no longer triggers the broader chart action by mistake. This prevents unintended dashboard interactions and makes chart controls behave more predictably for users.
Original PR description
We have several click listeners on charts: one on the legend, one on all odoo chart elements, and one on the chart itself in dashboard. The first two are handled in ChartJS, and the last one is handled in a `t-on-click`. The problem is that the `t-on-click` was called for every click on the chart, even if the click was on the legend. This is because ChartJS handles events at the next animation frame, so the `t-on-click` was always called before the ChartJS click listener. To fix this, we also handle the click on the chart inside ChartJS. Task: [4636147](https://www.odoo.com/web#id=4636147&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When importing a CSV referencing a related record, an error occurs if the system attempts to create a missing record, and the exception message is incorrectly translated. **Steps to reproduce:** - Install the `l10n_ro` module. - Switch the user's language to **Romania**. - Import [this](https://drive.google.com/file/d/1D5OZGeCICaySijNVxhSeopru--1iwU96/view?usp=sharing) CSV file into the Journal model (`account.journal`). - Click `Test` button, select `"Creează valori noi"` for `Default Ac
Original PR description
When importing a CSV referencing a related record, an error occurs if the system attempts to create a missing record, and the exception message is incorrectly translated. **Steps to reproduce:** -…
When importing a CSV referencing a related record, an error occurs if the system attempts to create a missing record, and the exception message is incorrectly translated. **Steps to reproduce:** - Install the `l10n_ro` module. - Switch the user's language to **Romania**. - Import [this](https://drive.google.com/file/d/1D5OZGeCICaySijNVxhSeopru--1iwU96/view?usp=sharing) CSV file into the Journal model (`account.journal`). - Click `Test` button, select `"Creează valori noi"` for `Default Account`, and click again. - Observe the error. **Error:** `ValueError: unsupported format character ''' (0x27) at index 74` The Romanian translation contains an incorrect use of `'%%' (câmp)` leads to formatting issues - [1]; the correct placeholder `'%%(field)s'` should be used to match the original message format. This commit corrects the Romanian translation to properly format the field name. [1] - https://github.com/odoo/odoo/blob/4bdbe64928259ddffc93f9c0e60113fc1673e203/odoo/addons/base/i18n/ro.po#L21877 Sentry - 6494943085
Miscellaneous changes
Before this commit, the refresh_token handling was done in the calendar module, even though it relates to token management and should therefore be handled by microsoft_account, which manages tokens and requests to Microsoft. task-4653852 Forward-Port-Of: odoo/odoo#202309
Original PR description
Before this commit, the refresh_token handling was done in the calendar module, even though it relates to token management and should therefore be handled by microsoft_account, which manages tokens and requests to Microsoft. task-4653852 Forward-Port-Of: odoo/odoo#202309
Steps to reproduce: - Install stock, stock_account, sales - Create a product with pricing policy not standard(AVCO, FIFO) - Track this product by lot and keep lot valuation **unchecked** - Add a quant of the product with this lot - Create a quotation on the product and confirm the SO - Confirm the delivery - Activate the lot valuation on the product - Make a return delivery based on the delivery we had - Confirm the return **Issue**: Traceback is thrown ```py new_std_price = ((amo
Original PR description
Steps to reproduce: - Install stock, stock_account, sales - Create a product with pricing policy not standard(AVCO, FIFO) - Track this product by lot and keep lot valuation **unchecked** - Add a…
Steps to reproduce: - Install stock, stock_account, sales - Create a product with pricing policy not standard(AVCO, FIFO) - Track this product by lot and keep lot valuation **unchecked** - Add a quant of the product with this lot - Create a quotation on the product and confirm the SO - Confirm the delivery - Activate the lot valuation on the product - Make a return delivery based on the delivery we had - Confirm the return **Issue**: Traceback is thrown ```py new_std_price = ((amount_unit * qty_avail) + (move_cost[lot] * qty)) / (qty_avail + qty) KeyError: stock.lot(55,) ``` Because `move_cost` is a dictionary returned by `_get_price_unit()`, which gets the current lots’ valuations. Since the pick is a return one, then `_get_price_unit()` uses the original pick stock valuation layers and hence we were disabling the valuation on the original delivery then the layers don’t have the lot of the product valuated. Then the `move_cost` dict is not having the lot of the product while valuating it currently, hence the KeyError is thrown. This issue happens with the AVCO, FIFO because both valuation models depend on the already valuated lots values using the `_get_price_unit()`. **FIX**: Ensure `_get_price_unit()` properly handles cases where lot valuation was disabled at the time of the original move but is enabled later by adding lots of the return pick if not included in the valuation layers of original pick. opw-4662744 opw-4660094 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#204452
Versions -------- - 16.0+ Steps ----- 1. Have a payment token saved via Flutterwave; 2. use token to pay for an order. Issue ----- Error: Provide a valid redirect url Cause ----- Flutterwave now mandates authorization for tokenized flows. They provide an authorization url for this, and expect to receive a redirect url value to return to afterwards. Solution -------- Solution partially based on the Ogone redirect flow added in 0ed92bcc9791 The authorization url is provid
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have a payment token saved via Flutterwave; 2. use token to pay for an order. Issue ----- Error: Provide a valid redirect url Cause ----- Flutterwave now mandates authorization for tokenized flows. They provide an authorization url for this, and expect to receive a redirect url value to return to afterwards. Solution -------- Solution partially based on the Ogone redirect flow added in 0ed92bcc9791 The authorization url is provided in the notification data. Store this in the `provider_reference` field if the transaction is pending. When processing the pending transaction, initiate a redirect flow, which redirects the user to the authorization url. opw-4669110 Forward-Port-Of: odoo/odoo#204599 Forward-Port-Of: odoo/odoo#204322
**Current behavior before PR:** - Before commit [1], when pasting a single paragraph node, only its content was inserted, and the paragraph tag was omitted. However, due to these changes, the entire paragraph node is now inserted instead of just its content, causing the target node to be replaced by the paragraph node. **Desired behavior after PR is merged:** - When pasting a single base container, only its content will be inserted. As a result,the base container will no lon
Original PR description
**Current behavior before PR:** - Before commit [1], when pasting a single paragraph node, only its content was inserted, and the paragraph tag was omitted. However, due to these changes, the entire paragraph node is now inserted instead of just its content, causing the target node to be replaced by the paragraph node. **Desired behavior after PR is merged:** - When pasting a single base container, only its content will be inserted. As a result,the base container will no longer replace the target block format. [1]: https://github.com/odoo/odoo/commit/fef32b42beb80eb27bd3c2cfa8c4c2f3c86ad12d task: 4585788 Forward-Port-Of: odoo/odoo#200142
… flexible This commit aims to resolve critical error in time off when the user is fully flexible. - get_allocation_data is updated to handle the case when the employee is fully flexible. - Set duration_hours and duration_days in the dummy attendance to handle flexible time off requests and to avoid unintended zero division error in _get_attendance_intervals_days_data. P.S: Currently Fully Flexible resources do not support fully time offs, so this allows a fallback that prevents
Original PR description
… flexible This commit aims to resolve critical error in time off when the user is fully flexible. - get_allocation_data is updated to handle the case when the employee is fully flexible. - Set…
… flexible This commit aims to resolve critical error in time off when the user is fully flexible. - get_allocation_data is updated to handle the case when the employee is fully flexible. - Set duration_hours and duration_days in the dummy attendance to handle flexible time off requests and to avoid unintended zero division error in _get_attendance_intervals_days_data. P.S: Currently Fully Flexible resources do not support fully time offs, so this allows a fallback that prevents error while still setting a valid duration of a time off request. Steps to reproduce: 1. Install hr_holidays 2. Go to Mitchel Admin's employee profile > work information 3. Delete the working calendar > so that the employee is fully flexible 4. Try to open time off module -> Prior to this commit, it would raise a zero division error ticket-id: 4677726 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203737
In a form snippet, enabling the "Description" option for a field and then undoing this action caused the field to lose its styling and available customization options. Steps to reproduce: - Enter Edit mode. - Add a Form snippet. - Select any field (e.g., "Your Name"). - Enable the "Description" option from the customization panel. - Undo the action (Ctrl+Z). This results in the field losing its padding and the "Description" and other options being removed. Cause: A redundant line
Original PR description
In a form snippet, enabling the "Description" option for a field and then undoing this action caused the field to lose its styling and available customization options. Steps to reproduce: - Enter Edit mode. - Add a Form snippet. - Select any field (e.g., "Your Name"). - Enable the "Description" option from the customization panel. - Undo the action (Ctrl+Z). This results in the field losing its padding and the "Description" and other options being removed. Cause: A redundant line of code was adding an extra step in the mutation history. When undoing, this extra step caused the removal of essential classes from the field, leading to the loss of styling and options. Fix: Removed the redundant line to ensure undoing the action correctly restores the previous state without affecting the field’s styling or customization options. task-4013551 Forward-Port-Of: odoo/odoo#179858
Before this commit, when the "restricted categories" setting was enabled, products belonging to subcategories of the allowed categories were not shown on the POS screen when no category was selected. opw-4700812 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204640
Original PR description
Before this commit, when the "restricted categories" setting was enabled, products belonging to subcategories of the allowed categories were not shown on the POS screen when no category was selected. opw-4700812 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204640
When the Arabic language was selected, an error occurred due to the write date being formatted with Arabic numerals. This commit ensures that Latin digits are used in the date format, preventing the error and ensuring compatibility. opw-4654484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203306
Original PR description
When the Arabic language was selected, an error occurred due to the write date being formatted with Arabic numerals. This commit ensures that Latin digits are used in the date format, preventing the error and ensuring compatibility. opw-4654484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203306
In this commit, we fix multiple indeterministic tours: - website/static/tests/tours/media_dialog.js Add a step to ensure all images are loaded before exiting the tour to avoid message: "CORS is misconfigured on the API server, image will be treated as non-dynamic." - project/static/tests/tours/project_task_history.js Use stepUtils.saveForm to ensure form is well saved before continue. - website/static/tests/tours/snippets_all_drag_and_drop.js Remove a step that can cause undeterministic fai
Original PR description
In this commit, we fix multiple indeterministic tours: - website/static/tests/tours/media_dialog.js Add a step to ensure all images are loaded before exiting the tour to avoid message: "CORS is…
In this commit, we fix multiple indeterministic tours: - website/static/tests/tours/media_dialog.js Add a step to ensure all images are loaded before exiting the tour to avoid message: "CORS is misconfigured on the API server, image will be treated as non-dynamic." - project/static/tests/tours/project_task_history.js Use stepUtils.saveForm to ensure form is well saved before continue. - website/static/tests/tours/snippets_all_drag_and_drop.js Remove a step that can cause undeterministic failure during tours. - pos_restaurant/static/tests/tours/pos_restaurant_tour.js Add a delay when transfering the order. - website/static/tests/tours/page_manager.js Add a last step to ensure reloading is done before exiting the tour to avoid "Error received after termination: TypeError: Failed to fetch" error. - website/static/tests/tours/html_editor.js Add steps to wait the iframe reload. 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#204109
**Current behavior before PR:** - Inserting an emoji using the emoji picker caused the page to scroll up. **Desired behavior after PR is merged:** - The page no longer scrolls up when an emoji is inserted using the emoji picker. task:4686860 Forward-Port-Of: odoo/odoo#204311
Original PR description
**Current behavior before PR:** - Inserting an emoji using the emoji picker caused the page to scroll up. **Desired behavior after PR is merged:** - The page no longer scrolls up when an emoji is inserted using the emoji picker. task:4686860 Forward-Port-Of: odoo/odoo#204311
Serbia has implemented a mandatory e-invoicing system named eFaktura. This module utilizes the eFaktura API to enable users to submit their e-invoices. task-4004913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204020 Forward-Port-Of: odoo/odoo#186235
Original PR description
Serbia has implemented a mandatory e-invoicing system named eFaktura. This module utilizes the eFaktura API to enable users to submit their e-invoices. task-4004913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204020 Forward-Port-Of: odoo/odoo#186235
Commit 2afc30a introduced reward validation before payment, due to this if promotion expired during payment step during checkout, error informing that promotion was expired was thrown, but user was not able to do anything about. Info about refreshing page has been added. opw-4573640 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.co
Original PR description
Commit 2afc30a introduced reward validation before payment, due to this if promotion expired during payment step during checkout, error informing that promotion was expired was thrown, but user was not able to do anything about. Info about refreshing page has been added. opw-4573640 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#203564 Forward-Port-Of: odoo/odoo#203395
This commit adds a new helper in dom_test_helpers' contains which allows to open a dropdown and select the first item which matches with the input value. Forward-Port-Of: odoo/odoo#204516
Original PR description
This commit adds a new helper in dom_test_helpers' contains which allows to open a dropdown and select the first item which matches with the input value. Forward-Port-Of: odoo/odoo#204516
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or bytearray, not bool ``` Cause:- When the user resets an Egyptian invoice to draft status, the value of `l10n_eg_eta_json_doc_id` is set to False as seen in the following line https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/accoun
Original PR description
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or…
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or bytearray, not bool ``` Cause:- When the user resets an Egyptian invoice to draft status, the value of `l10n_eg_eta_json_doc_id` is set to False as seen in the following line https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L66-L67 After that when the user attempts to sign the document through the list view, it leads to the traceback. This happens because we are passing self instead of the invoices to the method `action_sign_invoices`. https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L73 https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L106 As a result, self contains all draft invoices (if selected by the user), leading to the traceback since the value of l10n_eg_eta_json_doc_id is False for the reset draft invoice. https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/eta_thumb_drive.py#L34-L35 sentry-6448238266 Forward-Port-Of: odoo/odoo#203064
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. Steps to reproduce: - Open Marketing Card app - Open the form view for one of the campaign - Click "Send" button - A dialog opens and display the preview of the mail to send - Double-click an image in the Mail Body tab (or add one first, if none are present) => the file viewer appears behind the dialog and is not usable.
Original PR description
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. Steps to reproduce: - Open Marketing Card app - Open the form view for one of the campaign - Click "Send" button - A dialog opens and display the preview of the mail to send - Double-click an image in the Mail Body tab (or add one first, if none are present) => the file viewer appears behind the dialog and is not usable. task-4387904 Forward-Port-Of: odoo/odoo#203462
Currently there are two bugs: 1) Selling a kit product to another internal company (inter_company) and validating the delivery will not update the `qty_delivered` field on the corresponding `SaleOrderLine` * Currently the filters to capture moves which informs the delivered quantity of the line do not account for moves with `location_dest_id` pointing to the inter-company transit location (which should count towards the delivered value) 2) Receiving a kit product via inter_company whic
Original PR description
Currently there are two bugs: 1) Selling a kit product to another internal company (inter_company) and validating the delivery will not update the `qty_delivered` field on the corresponding…
Currently there are two bugs: 1) Selling a kit product to another internal company (inter_company) and validating the delivery will not update the `qty_delivered` field on the corresponding `SaleOrderLine` * Currently the filters to capture moves which informs the delivered quantity of the line do not account for moves with `location_dest_id` pointing to the inter-company transit location (which should count towards the delivered value) 2) Receiving a kit product via inter_company which has a `comp:final` ratio >1 will result in an inaccurate update on the `qty_received` field on the corresponding `PurchaseOrderLine` * The BoM of the sold kit-product belongs to the selling company, and in the purchase_mrp override of `_compute_qty_received` they fail to get marked as kit lines because the `bom_line_id` is hidden due to a company-precise domain constraint **Steps to reproduce:** *Having `sale_purchase_stock_inter_company_rules` and enabled synchronization of sale & purchase orders for both companies* 1. Create a kit product 2. Deliver it to another internal company 3. After validating the delivery, check the the sale order line and observe that the delivered qty is 0 **Cause of the issue:** When computing `qty_delivered`, we have the following filters to capture in/out move qty: https://github.com/odoo/odoo/blob/ef1be75601e7ce346d8e6b9367505cbf39b05101/addons/sale_mrp/models/sale_order_line.py#L69-L70 which don't account for moves to inter-company transit. When computing `qty_received`, we aggregate purchase lines: https://github.com/odoo/odoo/blob/b13e46f06c1d3166fd64fc72cacd8af1f3673ae6/addons/purchase_mrp/models/purchase.py#L56 however using the line's `company_id` means the BoM belonging to the delivering company isn't revealed. Then the `qty_received` is computed as though the line was an ordinary product, leading to the mismatch between product and qty. **Fix:** Modify the existing incoming/outgoing move filters in the qty received and delivered compute methods to account for inter-company moves. opw-4267210 Forward-Port-Of: odoo/odoo#203568 Forward-Port-Of: odoo/odoo#195726
One issue remained for the 'Multiple choice: multiple answers allowed' option in this task: https://www.odoo.com/odoo/project.task/4663115 Task- 4663115 Forward-Port-Of: odoo/odoo#204603
Original PR description
One issue remained for the 'Multiple choice: multiple answers allowed' option in this task: https://www.odoo.com/odoo/project.task/4663115 Task- 4663115 Forward-Port-Of: odoo/odoo#204603
The domain was syntactically wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204532
Original PR description
The domain was syntactically wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204532
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. - With COMP 1 as main active company, create and confirm an SO for COMP2 > A pick picking has been created for COMP2 - Validate The pick picking #### > The ship picking was not created ### Cause of the issue: During the `_action_done`of the pick move, we will run a `_push_apply` on the mo
Original PR description
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. -…
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. - With COMP 1 as main active company, create and confirm an SO for COMP2 > A pick picking has been created for COMP2 - Validate The pick picking #### > The ship picking was not created ### Cause of the issue: During the `_action_done`of the pick move, we will run a `_push_apply` on the move and try to trigger any push rule related to its destination. However, since de destination location of tha move (COMP2 output) does not belong to the main active company, the warehouse for which we search the rule is set to False and the rule ends up not being found: https://github.com/odoo/odoo/blob/cc05d9d50ac668eaa26363e1127f914897a4b125/addons/stock/models/stock_move.py#L1058-L1066 opw-4670760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204170
Steps to reproduce ================== - Install account_accountant - Enable the debug mode - Copy a very long text in the "Terms and Conditions" section - Click on debug > Set Defaults - Click on the Default selection => Chrome crashes Depending on the window manager/OS, a weird Chrome window can appear spanning across multiple displays. Or Chrome can simply crash. Cause of the issue ================== The text value inside the select option is too long for Chrome to handle.
Original PR description
Steps to reproduce ================== - Install account_accountant - Enable the debug mode - Copy a very long text in the "Terms and Conditions" section - Click on debug > Set Defaults - Click on the Default selection => Chrome crashes Depending on the window manager/OS, a weird Chrome window can appear spanning across multiple displays. Or Chrome can simply crash. Cause of the issue ================== The text value inside the select option is too long for Chrome to handle. Solution ======== We can truncate the displayed text. opw-4572496 Forward-Port-Of: odoo/odoo#204189 Forward-Port-Of: odoo/odoo#202324
Currently, if a serialization error occurs right after sending an invoice to SDI, Odoo retries the submission. This causes issues as the move’s transaction ID will be updated to the second attempt, not the first. Additionally, SDI will detect a duplicate submission and return a "notificaScarto" status. Since only the second transaction ID is stored, Odoo will incorrectly display the invoice as rejected, even though the first submission was actually accepted. This fix ensures the move
Original PR description
Currently, if a serialization error occurs right after sending an invoice to SDI, Odoo retries the submission. This causes issues as the move’s transaction ID will be updated to the second attempt, not the first. Additionally, SDI will detect a duplicate submission and return a "notificaScarto" status. Since only the second transaction ID is stored, Odoo will incorrectly display the invoice as rejected, even though the first submission was actually accepted. This fix ensures the move is locked before sending to SDI, preventing this issue. opw-4643686 Forward-Port-Of: odoo/odoo#202693
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite `global_filter_editor.test.js` with 51 tests - make a snapshot of memory after test => observe that there's thousands of RecordList objects kept in memory (8976) instead of a few hundreds (176) These tests do not make use of any mail code, but the manifest has dependency on `@mail` thus it loads mail sto
Original PR description
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite…
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite `global_filter_editor.test.js` with 51 tests - make a snapshot of memory after test => observe that there's thousands of RecordList objects kept in memory (8976) instead of a few hundreds (176) These tests do not make use of any mail code, but the manifest has dependency on `@mail` thus it loads mail store. This test suite is a good candidate to show constant memory issue from discuss code: 51 tests each having 176 record lists result in 8976 record lists in total. The JS records are expected to be garbage collected after each test, thanks to store not being accessible from components and services (app is unmounted at end of test). However, `Rtc.iceServers` field was preventing this and leads to keeping store in memory. This is happening because the default value of this field is `DEFAULT_ICE_SERVERS`, which is defined on window object globally and is shared among all the different stores in the test suite. The field is computed too, so an internal `onChange` also contributed in keeping a reference to observing this shared object. This commit fixes the issue by providing a deep copy of this global variable as the default value of `iceServers`, allowing proper gc of store between tests of the suite. Forward-Port-Of: odoo/odoo#204521
Versions -------- - saas-17.4+ Price already hidden in 17.0 & earlier. Steps ----- 1. Set website to prevent sale of zero-priced products; 2. create a zero-priced pricelist; 3. create a rental product; 4. set a rental price of $0 on the zero-priced pricelist; 5. go to rental product page on website. Issue ----- It displays "$0.00/day" above the "Not Available for Sale" text. Cause ----- The rental price element doesn't check whether zero-priced products should be made ava
Original PR description
Versions -------- - saas-17.4+ Price already hidden in 17.0 & earlier. Steps ----- 1. Set website to prevent sale of zero-priced products; 2. create a zero-priced pricelist; 3. create a rental product; 4. set a rental price of $0 on the zero-priced pricelist; 5. go to rental product page on website. Issue ----- It displays "$0.00/day" above the "Not Available for Sale" text. Cause ----- The rental price element doesn't check whether zero-priced products should be made available for sale. Solution -------- If the rental price is zero, and the website prevents sale of zero-priced products, hide the rental price element. We can use `combination_info['prevent_zero_price_sale']` for this thanks to commit 1f827ac1fad opw-4643155 Forward-Port-Of: odoo/enterprise#82535
This pull request (PR) facilitates the integration of Odoo with the Uruguayan electronic billing system, allowing automatic synchronization of vendor bills every 10 minutes. Synchronized bills are created in "Draft" status for user review, complete with attached PDF and XML files. Also this pull request allows to create vendor bills from XML files on uruguayan journals. **Key Features**: - **_Automatic Bill Creation_**: Bills are generated in "Draft" status to enable manual verification a
Original PR description
This pull request (PR) facilitates the integration of Odoo with the Uruguayan electronic billing system, allowing automatic synchronization of vendor bills every 10 minutes. Synchronized bills are…
This pull request (PR) facilitates the integration of Odoo with the Uruguayan electronic billing system, allowing automatic synchronization of vendor bills every 10 minutes. Synchronized bills are created in "Draft" status for user review, complete with attached PDF and XML files. Also this pull request allows to create vendor bills from XML files on uruguayan journals. **Key Features**: - **_Automatic Bill Creation_**: Bills are generated in "Draft" status to enable manual verification against vendor invoices and attachments. - **_Necessary Configuration_**: 1) The database must connect to Uruware. 2) A Uruguayan company must be set up with an appropriate chart of accounts. 3) Notifications must be activated in the Uruguayan billing system. **Important Considerations**: - Errors during synchronization will still create invoices in "Draft" with error messages for user review. - Invoice lines are created without products; if a vendor doesn’t exist, it will be automatically created based on RUT. - Any unregistered taxes will be flagged. **Technical Overview**: - **_Notification Mechanism_**: Notifications for each received CFE are managed through a web service, allowing users to check, request details, and discard notifications. - **_Synchronization Process_**: Notifications are read and processed sequentially, with each CFE generating a corresponding document in Odoo. Notifications must be discarded to continue processing. Related Tasks: Adhoc Task: 43467 LATAM Task: 1249 Forward-Port-Of: odoo/enterprise#71234
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. This is the counterpart of the related community change in FileViewer. Forward-Port-Of: odoo/enterprise#82186
Original PR description
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. This is the counterpart of the related community change in FileViewer. Forward-Port-Of: odoo/enterprise#82186
Currently inter-company kit transactions aren't working: 1) Selling a kit product to another internal company (intercompany) and validating the delivery will not update the `qty_delivered` field on the corresponding `SaleOrderLine`: Currently the filters to capture moves which informs the delivered quantity of the line do not account for moves with `location_dest_id` pointing to the inter-company transit location (which should count towards the delivered value) 2) Receiving a kit pro
Original PR description
Currently inter-company kit transactions aren't working: 1) Selling a kit product to another internal company (intercompany) and validating the delivery will not update the `qty_delivered` field on the corresponding `SaleOrderLine`: Currently the filters to capture moves which informs the delivered quantity of the line do not account for moves with `location_dest_id` pointing to the inter-company transit location (which should count towards the delivered value) 2) Receiving a kit product via intercompany will result in an inaccurate update on the `qty_received` field on the corresponding `PurchaseOrderLine`: Tests added here due to inter-company rule modules being enterprise only. opw-4267210 Forward-Port-Of: odoo/enterprise#82251 Forward-Port-Of: odoo/enterprise#78170
Steps to reproduce the bug: - Create a storable product “P1”: - Create a BoM - Go back to the product form and create an ECO: - Apply on: “Bill of Materials” - The created BoM will be selected automatically. - Save. - Return to the product form. - The ECO count in the smart button is 1. - Click on it. Problem: No ECO is displayed because the domain filters only ECOs applied to the product: https://github.com/odoo/enterprise/blob/ec6b4717f49ccd5b651be80aed21494ed
Original PR description
Steps to reproduce the bug: - Create a storable product “P1”: - Create a BoM - Go back to the product form and create an ECO: - Apply on: “Bill of Materials” - The created BoM will be selected…
Steps to reproduce the bug:
- Create a storable product “P1”:
- Create a BoM
- Go back to the product form and create an ECO:
- Apply on: “Bill of Materials”
- The created BoM will be selected automatically.
- Save.
- Return to the product form.
- The ECO count in the smart button is 1.
- Click on it.
Problem:
No ECO is displayed because the domain filters only ECOs applied to the product:
https://github.com/odoo/enterprise/blob/ec6b4717f49ccd5b651be80aed21494ed500f580/mrp_plm/models/product.py#L17-L20
Solution:
only ECOs of type "Product" should be counted in the product form.
Issue 2:
- Try updating the "Apply on" field of the ECO to “Product.”
Problem:
The "Bill of Materials" field becomes invisible but is not cleared. As a result, when counting the number of ECOs linked to the BoM, the count will be incorrect.
https://github.com/odoo/odoo/blob/f2923dec56b5ba2436bc244337c1e430a85e7e94/addons/stock/models/stock_move.py#L45-L48
opw-4653598
Forward-Port-Of: odoo/enterprise#82576[FIX] hr_appraisal: prevent TypeError for raw record data The read method in hr_appraisal.py was raising a TypeError 'NoneType object is not iterable' when the fields parameter was None. This occurred because the code attempted to create a set from the None value directly. Steps to reproduce: ------------------- * Open Appraisal app and click on an employee's card * Activate debug mode * From the bug dropdown click on 'View Raw Record Date' or 'Data' in 18.0+ > Observation: Fil
Original PR description
[FIX] hr_appraisal: prevent TypeError for raw record data The read method in hr_appraisal.py was raising a TypeError 'NoneType object is not iterable' when the fields parameter was None. This…
[FIX] hr_appraisal: prevent TypeError for raw record data
The read method in hr_appraisal.py was raising a TypeError 'NoneType object is not iterable' when the fields parameter was None.
This occurred because the code attempted to create a set from the None value directly.
Steps to reproduce:
-------------------
* Open Appraisal app and click on an employee's card
* Activate debug mode
* From the bug dropdown click on 'View Raw Record Date' or 'Data' in 18.0+
> Observation:
File "/data/build/enterprise/hr_appraisal/models/hr_appraisal.py", line 539, in read
check_notes = set(fields) & {'note', 'assessment_note'}
^^^^^^^^^^^
TypeError: 'NoneType' object is not iterable
Why the fix:
------------
set() requires an iterable. By adding this condition, we avoid iterating over NoneType. This maintains the intended default functionality while preventing the crash.
opw-4631142
Forward-Port-Of: odoo/enterprise#82711
Forward-Port-Of: odoo/enterprise#81758Pytz raises a `NonExistentTimeError` or an `AmbiguousTimeError` when trying to get the offset of a non localized datetime during the daylight saving changing time. Remark: the `_is_customer_in_the_same_timezone` method name should be changed in master as it does the complete opposite. runbot error 162039 Fix courtesy of @Xavier-Do Forward-Port-Of: odoo/enterprise#82810
Original PR description
Pytz raises a `NonExistentTimeError` or an `AmbiguousTimeError` when trying to get the offset of a non localized datetime during the daylight saving changing time. Remark: the `_is_customer_in_the_same_timezone` method name should be changed in master as it does the complete opposite. runbot error 162039 Fix courtesy of @Xavier-Do Forward-Port-Of: odoo/enterprise#82810
Currently, an error is produced when updating payroll data if a referenced partner record in salary rules has been deleted by the user. **Steps to reproduce:** - Install the `account` and `l10n_hr_payroll` modules. - Navigate to the **Vendors** view and delete the `Register for State Labour Welfare Fund Deduction` record. - In **Scheduled Actions**, manually execute `Payroll: Update data`. - Observer the backend error. **Error:** `ValueError - ParseError('while parsing /home/odoo/src/
Original PR description
Currently, an error is produced when updating payroll data if a referenced partner record in salary rules has been deleted by the user. **Steps to reproduce:** - Install the `account` and…
Currently, an error is produced when updating payroll data if a referenced partner record in salary rules has been deleted by the user.
**Steps to reproduce:**
- Install the `account` and `l10n_hr_payroll` modules.
- Navigate to the **Vendors** view and delete the `Register for State Labour Welfare Fund Deduction` record.
- In **Scheduled Actions**, manually execute `Payroll: Update data`.
- Observer the backend error.
**Error:**
`ValueError - ParseError('while parsing /home/odoo/src/enterprise/saas-18.2/l10n_in_hr_payroll/data/salary_rules/hr_salary_rule_ind_emp_data...`
The error occurs because the method at [1] attempts to load the `hr_salary_rule_ind_emp_data.xml` file that references a deleted `partner_id` [2], leading to a parsing error.
[1] - https://github.com/odoo/enterprise/blob/46f838403c8d60760a5b37cb5fe8d052d2307999/l10n_in_hr_payroll/models/hr_payslip.py#L44-L54
[2] - https://github.com/odoo/enterprise/blob/46f838403c8d60760a5b37cb5fe8d052d2307999/l10n_in_hr_payroll/data/salary_rules/hr_salary_rule_ind_emp_data.xml#L364
This commit ensures that `res_partner_data.xml` is loaded before `hr_salary_rule_ind_emp_data.xml`, preventing errors due to missing partners.
Sentry - 6429993371
Forward-Port-Of: odoo/enterprise#81917