Friday, May 3, 2024
44 changes · saas-17.1
Resolved issues and error corrections
A visual flicker issue in the mass mailing template has been resolved. This change ensures the sidebar loads smoothly and correctly, eliminating a distracting visual glitch for users creating and managing email marketing campaigns. This improves the overall user experience.
Original PR description
Issue: ====== mass mailing template flicker while loading. Steps to reproduce the issue: ============================= - Go to email marketing - Create a new mass mailing Origin of the issue: ==================== The sidebar with id `oe_snippets` is being loaded but transformed with translateX to be outside the html_field but there is some space left between the field and the chatter so a part of it will be shown. Solution: ========= Force the display attribue of the sidebar to be `none` at the start and remove it after being completely loaded. task-3792995
Miscellaneous changes
Steps to reproduce ------------------ 1. Install the `l10n_sa_edi` module. 2. Create a user X with `Advisor` as Accounting Rights only 3. Log in as user X and try accessing a sales Journal for company SA Issue ----- Error: Rendering Failed Cause ----- When a user without the group `base.group_system` tries to access the `l10n_sa_compliance_csid_json` or `l10n_sa_production_csid_json` fields (needed to display the ZATCA process steps) in the journal form view, the rendering fails.
Original PR description
Steps to reproduce ------------------ 1. Install the `l10n_sa_edi` module. 2. Create a user X with `Advisor` as Accounting Rights only 3. Log in as user X and try accessing a sales Journal for company SA Issue ----- Error: Rendering Failed Cause ----- When a user without the group `base.group_system` tries to access the `l10n_sa_compliance_csid_json` or `l10n_sa_production_csid_json` fields (needed to display the ZATCA process steps) in the journal form view, the rendering fails. Solution -------- Hide the ZATCA process steps if the user does not have access to `l10n_sa_compliance_csid_json` or `l10n_sa_production_csid_json` fields. opw-3812234 Forward-Port-Of: odoo/odoo#164359 Forward-Port-Of: odoo/odoo#161024
Versions -------- - saas-16.3+ Issue ----- If early pay discount includes taxes, its amount was calculated by first multiplying the total amount by the discount's complementary percentage, and take the difference between its result and the total amount. Let's assume discount is 10% and total price is 1725.05. - We want to pay 90% of the full amount, which is 1552.545; - to get the discount, we subtract it from the full amount: 1725.05 - 1552.545 = 172.505; - we then round this
Original PR description
Versions -------- - saas-16.3+ Issue ----- If early pay discount includes taxes, its amount was calculated by first multiplying the total amount by the discount's complementary percentage, and take…
Versions
--------
- saas-16.3+
Issue
-----
If early pay discount includes taxes, its amount was calculated by first multiplying the total amount by the discount's complementary percentage, and take the difference between its result and the total amount.
Let's assume discount is 10% and total price is 1725.05.
- We want to pay 90% of the full amount, which is 1552.545;
- to get the discount, we subtract it from the full amount:
1725.05 - 1552.545 = 172.505;
- we then round this discount to 172.51;
- and return total amount minus discount as amount due after discount:
1725.05 - 172.51 = 1552.54
- elsewhere we round 1552.545 to 1552.55, a 1 cent difference
Cause
-----
The `_get_amount_due_after_discount` adds half a cent to the discount by rounding half-up, while elsewhere the reduced price gets rounded half-up, increasing it by half a cent, this adds up to a 1 cent discrepancy.
Solution
--------
Call the rounding method after subtracting discount from the total amount, so rounding happens in the same direction.
Issue found working on opw-3705546
Forward-Port-Of: odoo/odoo#163786A test exists on mail.template to test dynamic evaluation of scheduled_date field, based on datetime. However it currently runs on non-mocked datetime and it sometimes fails due to a minute-switch between test begin and end. In this commit we freeze the time to ensure test is fixed. However we also have to somehow hack "safe_eval.datetime" usage as it is not covered by standard usage of "freeze_time", probably because it is wrapped. Simplest solution is to mock it directly, assuming safe_eval
Original PR description
A test exists on mail.template to test dynamic evaluation of scheduled_date field, based on datetime. However it currently runs on non-mocked datetime and it sometimes fails due to a minute-switch between test begin and end. In this commit we freeze the time to ensure test is fixed. However we also have to somehow hack "safe_eval.datetime" usage as it is not covered by standard usage of "freeze_time", probably because it is wrapped. Simplest solution is to mock it directly, assuming safe_eval itself is working as intended (breaking safe_eval itself will probably break other tests; purpose of mail.template test is to check its dynamic rendering is effectively called and taken into account when sending emails based on templates). Task-3872732 Runbot-54946 Forward-Port-Of: odoo/odoo#163943
Versions -------- - 15.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Enterprise branch: https://github.com/odoo/enterprise/pull/61311 Forward-Port-Of: odoo/odoo#164063 Forward-Port-Of: odoo/odoo#162977
Original PR description
Versions -------- - 15.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Enterprise branch: https://github.com/odoo/enterprise/pull/61311 Forward-Port-Of: odoo/odoo#164063 Forward-Port-Of: odoo/odoo#162977
The steps to reproduce: - Go to a warehouse. Under the technical information tab, change the field sam_loc_id from "WH/Post-Production" to "WH/Stock". - Create a sales order with 2 different products and confirm it. - 2 pickings will be created with different group_id MO/XXXX instead of a single picking. After this commit, we only check the sam_loc_id if we are in 3 steps manufacturing. OPW-3871886 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit
Original PR description
The steps to reproduce: - Go to a warehouse. Under the technical information tab, change the field sam_loc_id from "WH/Post-Production" to "WH/Stock". - Create a sales order with 2 different products and confirm it. - 2 pickings will be created with different group_id MO/XXXX instead of a single picking. After this commit, we only check the sam_loc_id if we are in 3 steps manufacturing. OPW-3871886 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#164221 Forward-Port-Of: odoo/odoo#162947
Problem: For the Norwegian localization, the field name "Register of Legal Entities (Brønnøysund Register Center)" is not displayed Steps to reproduce: - Install "Contacts" app and "l10n_no" module - Create a new Norwegian contact as company, the field below "Tax ID" has no name Cause: Probably a change in the framework making the behavior different compared to previous versions opw-3863407 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-p
Original PR description
Problem: For the Norwegian localization, the field name "Register of Legal Entities (Brønnøysund Register Center)" is not displayed Steps to reproduce: - Install "Contacts" app and "l10n_no" module - Create a new Norwegian contact as company, the field below "Tax ID" has no name Cause: Probably a change in the framework making the behavior different compared to previous versions opw-3863407 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162836
Current behavior: --- When trying to un-blacklist a phone number from the contacts, it doesn't do anything. Steps to reproduce: --- 1. Install mass_mailing_sms 2. Go to Contacts 3. Create a new contact 4. Add a mobile phone number (ie: +917896525894) 5. Go to SMS Marketing 6. Go to Configuration > Blacklisted phone numbers 7. Click on new and input the same number then confirm 8. Click on Blacklist 9. Go back to the contact 10. Before the field, a block icon has appeared 11. Cli
Original PR description
Current behavior: --- When trying to un-blacklist a phone number from the contacts, it doesn't do anything. Steps to reproduce: --- 1. Install mass_mailing_sms 2. Go to Contacts 3. Create a new contact 4. Add a mobile phone number (ie: +917896525894) 5. Go to SMS Marketing 6. Go to Configuration > Blacklisted phone numbers 7. Click on new and input the same number then confirm 8. Click on Blacklist 9. Go back to the contact 10. Before the field, a block icon has appeared 11. Click on it then confirm 12. Nothing happens Cause of the issue: --- The search override was always checking for a string, but when the keyword 'in' is used in the domain, the last element is a list. opw-3757193 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163621 Forward-Port-Of: odoo/odoo#155457
In iOS, there is a dictation feature accessible from the keyboard. This feature modifies the DOM directly and triggers input events. From observations made on [1], it seems it triggers each event twice for unknown reason. Since there is custom editor code bound on this event, the `insertText` function was called twice, thus resulting in the text being duplicated. Note that the bug is in fact subtle because, if the selection reported by iOS was always accurate when triggering those events,
Original PR description
In iOS, there is a dictation feature accessible from the keyboard. This feature modifies the DOM directly and triggers input events. From observations made on [1], it seems it triggers each event…
In iOS, there is a dictation feature accessible from the keyboard. This feature modifies the DOM directly and triggers input events. From observations made on [1], it seems it triggers each event twice for unknown reason. Since there is custom editor code bound on this event, the `insertText` function was called twice, thus resulting in the text being duplicated. Note that the bug is in fact subtle because, if the selection reported by iOS was always accurate when triggering those events, then calling `insertText` twice would have no visual effect. However, in the case where the user chooses to manually stop the dictation mechanism through the dedicated button on the keyboard before it has finished writing the whole sentence, then the selection is not updated accordingly and the second call to `insertText` ends up inserting the text at the wrong place, thus triggering the symptom of duplicating the text. This commit fixes the issue by restricting the cases where a manual call to `insertText` is needed. The previous comment specified that the only case in which it was needed was when some text was selected. This is not entirely true. The only case in which it is needed is when text is selected in a way that spans multiple block elements, as this is the only case where the browser can alter those nodes by removing or merging them. Note that the first line of the `insertText` conditional branch, the one that fetches the current selection, actually looks fishy. It is possible the bug is caused by the fact that this selection is used instead of `this._currentStep.selection`. That being said, changing that part of the code in stable would not be worth the risk of breaking something that might rely on it, especially considering the dictation on iOS is a pretty niche feature. Also note that, for some reason, the issue only happens when the paragraph was empty when the dictation started. If some previous text was already present in the paragraph, for example from a previous dictation test, then the duplication will not occur. In this case however, a traceback can sometimes occur due to the fact that when checking for a potential url match, the `pop` method is called on an array multiple times then the result value is used as an object even though no check were made to make sure that the return value was not `undefined` because the array had nothing more to pop. This commit fixes that second issue by adding the missing check. task-3374520 opw-3167676 [1]: https://w3c.github.io/uievents/tools/key-event-viewer-ce.html Forward-Port-Of: odoo/odoo#163993 Forward-Port-Of: odoo/odoo#160363
The test `website_media_dialog_undraw` (introduced in [this commit]) wasn't launched because the python method was not prefixed by `test_`. [this commit]: https://github.com/odoo/odoo/commit/d6ca59ed9bf6877ee6b1b311223472adfa4db549 Forward-Port-Of: odoo/odoo#163616 Forward-Port-Of: odoo/odoo#163555
Original PR description
The test `website_media_dialog_undraw` (introduced in [this commit]) wasn't launched because the python method was not prefixed by `test_`. [this commit]: https://github.com/odoo/odoo/commit/d6ca59ed9bf6877ee6b1b311223472adfa4db549 Forward-Port-Of: odoo/odoo#163616 Forward-Port-Of: odoo/odoo#163555
Responses should be mocked according to requests that are made during tests. The tests use a sample Peppol file, where the supplier is `0198:dk16356706`. When the document is imported and its content is extracted, the corresponding partner is created with these `peppol_eas` and `peppol_endpoint` values. That triggers a participant check but the response is not mocked for this endpoint. This commit adds a mock response for the endpoint that matches the test file. no task, reported by gawa
Original PR description
Responses should be mocked according to requests that are made during tests. The tests use a sample Peppol file, where the supplier is `0198:dk16356706`. When the document is imported and its content is extracted, the corresponding partner is created with these `peppol_eas` and `peppol_endpoint` values. That triggers a participant check but the response is not mocked for this endpoint. This commit adds a mock response for the endpoint that matches the test file. no task, reported by gawa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163603
patch fixed Arabic class from newer version of num2words package. ## Description of the issue/feature this PR addresses the num2words library does not correctly convert some numbers to words in Arabic. It erroneously appends the Arabic equivalent of "one" to the translation of 1000 (one thousand), when it must be implicit. Also, it was noticed that this behaviour happens in all multiple of 1000s. It appends 'one' to million and billion, etc. ## Current behaviour before PR ``` >>> from
Original PR description
patch fixed Arabic class from newer version of num2words package. ## Description of the issue/feature this PR addresses the num2words library does not correctly convert some numbers to words in Arabic. It erroneously appends the Arabic equivalent of "one" to the translation of 1000 (one thousand), when it must be implicit. Also, it was noticed that this behaviour happens in all multiple of 1000s. It appends 'one' to million and billion, etc. ## Current behaviour before PR ``` >>> from num2words import num2words >>> num2words(1234.56, lang="ar") 'واحد ألف و مئتان و أربعة و ثلاثون , ست و خمسون' ``` ## Desired behaviour after PR is merged: ``` >>> from num2words import num2words >>> num2words(1234.56, lang="ar") 'ألف و مئتان و أربعة و ثلاثون , ست و خمسون' ``` Forward-Port-Of: odoo/odoo#156286
It is currently not possible to use a scrapped tracked-by-SN component in a new MO To reproduce the issue: 1. In Settings, enable "Multi Locations" 2. Create two products P_finished, P_comp: - Storable - P_comp tracked by SN 3. Update the quantity of P_comp: - WH/Stock: 1 x SN01 4. Process a manufacturing order: - Product: P_finished - Components: - 1 x P_comp 5. Process a repair order: - Product: P_finished - Remove: - Product: P_co
Original PR description
It is currently not possible to use a scrapped tracked-by-SN component in a new MO To reproduce the issue: 1. In Settings, enable "Multi Locations" 2. Create two products P_finished, P_comp: -…
It is currently not possible to use a scrapped tracked-by-SN
component in a new MO
To reproduce the issue:
1. In Settings, enable "Multi Locations"
2. Create two products P_finished, P_comp:
- Storable
- P_comp tracked by SN
3. Update the quantity of P_comp:
- WH/Stock: 1 x SN01
4. Process a manufacturing order:
- Product: P_finished
- Components:
- 1 x P_comp
5. Process a repair order:
- Product: P_finished
- Remove:
- Product: P_comp
- Lot: SN01
- Destination Location: Virtual Location/scrap
6. Unscrap SN01 (via an internal transfer from scrap to stock)
7. Repeat 4
Error: a UserError is displayed because the SN of the component has
already been consumed. It should be possible to use it
When checking the uniqueness, we are working on the SMLs (see the
lines removed by this commit).
`duplicates` contains the SML from step 4. `duplicates_returned` is
zero since we did not return the component back to the stock.
`removed` is zero too, because we look at the scrapped SML from an
internal location. However, step 5 generates an SML that starts from
the production location. As a result, nothing compensate the value
of `duplicates`, hence the raised error.
Removing the condition of the source location of `removed` would
lead to another bug, so we can't do that. So, this commit suggests a
new implementation based on the following rationale:
- The uniqueness checking simply ensures that one and only one
existing finished product consumed a specific SN
- What happened outside this context does not matter here
That way, we should only look at the SML from/to production
locations, for tracked-by-sn products used as components only. All
other SML (scrap, unscrap, SML for SN production, and so on) should
not be considered here.
OPW-3834835
Forward-Port-Of: odoo/odoo#164074
Forward-Port-Of: odoo/odoo#163394Resolves a problem when removing a coupon from an order containing different tax applications. If an order is composed of products with varying tax rates, the coupon applied generates separate lines for each unique tax situation. This includes non-taxed products, products with individual taxes, and combinations thereof. The purpose of this commit is to fix the management of coupon deletion in cases where the coupon generates multiple lines for different tax scenarios. Adjusting the recover
Original PR description
Resolves a problem when removing a coupon from an order containing different tax applications. If an order is composed of products with varying tax rates, the coupon applied generates separate lines for each unique tax situation. This includes non-taxed products, products with individual taxes, and combinations thereof. The purpose of this commit is to fix the management of coupon deletion in cases where the coupon generates multiple lines for different tax scenarios. Adjusting the recovery process to select the first coupon line identifier, ensuring that the correct line is targeted for deletion in scenarios with multiple tax-related coupon lines. Example: - Product A (non-taxed) - Product B (Tax A) - Product C (Tax B) - Product D (Tax A and B) The coupon would generate four separate lines for non-taxed, Tax A, Tax B, and Tax A & B scenarios, respectively. opw-3693319 Forward-Port-Of: odoo/odoo#163411 Forward-Port-Of: odoo/odoo#161817
Steps to reproduce: 1. Configure Sendcloud shipping with pick-up locations 2. Go to website and use the shipping method and select a pick-up location 3. Try step 2 again, using the same pick-up point but with a different name 4. Checking the delivery address of the second customer, we see the name of the first customer is used The problem is that if a pick-up location is already saved, we re-use the same contact for the delivery address. This commit ensures separate contacts are created f
Original PR description
Steps to reproduce: 1. Configure Sendcloud shipping with pick-up locations 2. Go to website and use the shipping method and select a pick-up location 3. Try step 2 again, using the same pick-up point but with a different name 4. Checking the delivery address of the second customer, we see the name of the first customer is used The problem is that if a pick-up location is already saved, we re-use the same contact for the delivery address. This commit ensures separate contacts are created for different customers. opw-3853716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162950
The issue: Currently, in Indonesia, the regulation for tax ID is 15 digits. But a new regulation is coming where Tax ID is now 16 digits by adding 0 in front The fix: Remove the first zero and leave the rest for the _run_vat_test function Related PR: odoo/odoo#146111 opw-3782636 Forward-Port-Of: odoo/odoo#157885
Original PR description
The issue: Currently, in Indonesia, the regulation for tax ID is 15 digits. But a new regulation is coming where Tax ID is now 16 digits by adding 0 in front The fix: Remove the first zero and leave the rest for the _run_vat_test function Related PR: odoo/odoo#146111 opw-3782636 Forward-Port-Of: odoo/odoo#157885
**Before this commit:** SVG images disappeared after cropping and clicking elsewhere or saving. **After this commit:** Now the images don't disappear after cropping. task-3809854 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163895 Forward-Port-Of: odoo/odoo#162032
Original PR description
**Before this commit:** SVG images disappeared after cropping and clicking elsewhere or saving. **After this commit:** Now the images don't disappear after cropping. task-3809854 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163895 Forward-Port-Of: odoo/odoo#162032
### Before this commit Can't navigate through the Locations list view as it would throw a Memory Error if too many stock.quants records. ### After this commit We prefetch only necessary fields to compute the value and the currency of the quants. ## Peak Memory Usage | stock.quants | Before | After | |-------------|---------|--------| | 1.2 million |1.6 GB | 600 MB | ## References opw-3887471 --- I confirm I have signed the CLA and read the PR guidelines at www.o
Original PR description
### Before this commit Can't navigate through the Locations list view as it would throw a Memory Error if too many stock.quants records. ### After this commit We prefetch only necessary fields to compute the value and the currency of the quants. ## Peak Memory Usage | stock.quants | Before | After | |-------------|---------|--------| | 1.2 million |1.6 GB | 600 MB | ## References opw-3887471 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163378
Before this commit, our distribution analytics process included searching the table res.partner for potential matches, which negatively impacted performance. However, this is no longer necessary as the default name of the account matches the name of the partner. This change removes the unnecessary performance overhead. Forward-Port-Of: odoo/odoo#162951
Original PR description
Before this commit, our distribution analytics process included searching the table res.partner for potential matches, which negatively impacted performance. However, this is no longer necessary as the default name of the account matches the name of the partner. This change removes the unnecessary performance overhead. Forward-Port-Of: odoo/odoo#162951
Description of the issue/feature this PR addresses: This commit addresses slow performance of the JS `OrderLine.findAttribute` method when `attributes_by_ptal_id` is exceedingly large. Before this commit, `findAttribute` would loop over all the values of `this.pos.attributes_by_ptal_id`, and filter out only the attributes that have at least one of the passed in ptal IDs (from the `values` parameter) within the attribute's "values" list. It would also modify the attribute to include a `"val
Original PR description
Description of the issue/feature this PR addresses: This commit addresses slow performance of the JS `OrderLine.findAttribute` method when `attributes_by_ptal_id` is exceedingly large. Before this…
Description of the issue/feature this PR addresses: This commit addresses slow performance of the JS `OrderLine.findAttribute` method when `attributes_by_ptal_id` is exceedingly large. Before this commit, `findAttribute` would loop over all the values of `this.pos.attributes_by_ptal_id`, and filter out only the attributes that have at least one of the passed in ptal IDs (from the `values` parameter) within the attribute's "values" list. It would also modify the attribute to include a `"valuesForOrderLine"` key mapping to a list of all of the found ptal IDs from that attribute's values. This method becomes slow when `this.pos.attributes_by_ptal_id` is very large. Since it needs to loop over every single attribute. This commit provides a workaround to this slowness, by caching the search for valid attributes that this method performs in a lookup table. First, we construct the lookup table in `_processData` method of the `PosStore` class. `_add_ptal_ids_by_ptav_id` does this, by looping over all the values of all the attributes, mapping the ptav ID of the attribute to all the ptal IDs we find. Now, inside `findAttribute`, we will instead loop over each of the passed in `values`. For each value, we will retrieve the all the cached ptal IDs from `this.pos.ptal_ids_by_ptav_id` for the given value. Now that we have the ptal IDs, we can get all the corresponding attributes from `this.pos.attributes_by_ptal_id`. For each of those attributes, we can do the same modification from the original method by adding the `"valuesForOrderLine"` key/value. Finally we return all the modified attributes. This new method has a nested for loop, which may seem like a problem. But I believe that both the things being looped over (`values` and `this.pos.ptal_ids_by_ptav_id[value]`) should be very small compared to the potential size of `this.pos.attributes_by_ptal_id`. (43,000 in this customer's DB) `findAttributes` is called many times whenever the POS's numpad buttons are pressed, so this commit has the overall effect of drastically reducing the input latency for a numpad press. However, I do believe that this is a workaround, and the real problem is that the entire `attributes_by_ptal_id` is always passed to the POS, regardless of what products are actually being ordered. `attributes_by_ptal_id` should instead be incrementally fetched as products are ordered (if this is possible). Benchmarks (in customer DB): Before commit, each keypad press took around 1-3 seconds per Order Line present in the POS. For 11 products this was ~15 second latency. After commit, each keypad press is almost instant. The `ptal_ids_by_ptav_id` lookup table will consume additional memory, in this customer's DB I've estimated it to be about 0.3MB more memory. Taking memory snapshots in profiler shows no significant different between versions, however this is inconsistent. Will attach profiler results to PR. Current behavior before PR: Poor performance of `OrderLine.findAttribute` Desired behavior after PR is merged: Fast performance of `OrderLine.findAttribute` for a memory tradeoff. opw-3788840 Forward-Port-Of: odoo/odoo#159402
Currently, in a database that lacks vendor bill records, if a user with all accounting rights attempts to upload a vendor bill, they encounter an access error. ### Steps to Reproduce 1. Install the `account_accountant` module. 2. Switch to a company that does not have any vendor bills. 3. Use an account that has full accounting rights but lacks administration rights. 4. On the accounting dashboard, within the vendor bills journal, click on 'Upload'. You should be met with an access e
Original PR description
Currently, in a database that lacks vendor bill records, if a user with all accounting rights attempts to upload a vendor bill, they encounter an access error. ### Steps to Reproduce 1. Install the `account_accountant` module. 2. Switch to a company that does not have any vendor bills. 3. Use an account that has full accounting rights but lacks administration rights. 4. On the accounting dashboard, within the vendor bills journal, click on 'Upload'. You should be met with an access error stating, "You are not allowed to access 'Onboarding Step' (onboarding.onboarding.step)." ### Cause When no bill has been previously created and a user tries to upload one, the system triggers an onboarding popup. However, access to this popup is restricted to the 'Administration/Settings' (base.group_system) group. opw-3887851 opw-3890044 Forward-Port-Of: odoo/odoo#163709
### Steps to Reproduce 1. Install the `account` module. 2. Activate Quick Encoding in the settings. 3. Create an invoice and populate the 'Total (Tax inc.)' field, which will automatically generate an invoice line. 4. Add a section line to the invoice. 5. Attempt to save the invoice. An error message should appear, stating: "The operation cannot be completed: Forbidden balance or account on non-accountable line." ### Cause The issue arises due to a constraint that prevents non-a
Original PR description
### Steps to Reproduce 1. Install the `account` module. 2. Activate Quick Encoding in the settings. 3. Create an invoice and populate the 'Total (Tax inc.)' field, which will automatically generate an invoice line. 4. Add a section line to the invoice. 5. Attempt to save the invoice. An error message should appear, stating: "The operation cannot be completed: Forbidden balance or account on non-accountable line." ### Cause The issue arises due to a constraint that prevents non-accounting lines (such as sections and notes) from having values in accounting fields (debit, credit, account, etc.). When Quick Encoding is enabled and the 'Total (Tax inc.)' field is populated, the system automatically suggests and applies default values to new lines. Unfortunately, these defaults are also applied to non-accounting lines, leading to the assignment of an `account_id` to the section line, which violates the existing constraint. opw-3852844 Forward-Port-Of: odoo/odoo#163717
### Steps to reproduce * install `website_sale` * in the settings, enable 'Extra Step During Checkout' * go to the Extra Info step in the checkout process * switch to edit mode and click on any input in the form You should be met with a traceback: "Cannot read property of undefined (reading 'website_form_label')" ### Cause This issue was introduced with odoo/odoo@3626e36a9c4995286be48206b0d927f1de51e295 Basically, if you try to edit a form whose model is not one of the `compatibl
Original PR description
### Steps to reproduce * install `website_sale` * in the settings, enable 'Extra Step During Checkout' * go to the Extra Info step in the checkout process * switch to edit mode and click on any input in the form You should be met with a traceback: "Cannot read property of undefined (reading 'website_form_label')" ### Cause This issue was introduced with odoo/odoo@3626e36a9c4995286be48206b0d927f1de51e295 Basically, if you try to edit a form whose model is not one of the `compatible_form_models`, you get a traceback because the system attempts to access `website_form_label` on an empty form. opw-3891255 Forward-Port-Of: odoo/odoo#163962
With BE localization Enable 'Use QR code on ticket' in Settings Open POS Session Add a Product with 21% Tax Pay > Save QR link for later Close Pos session Access QR link, generate invoice Check Accounting>Reporting>Tax Report Issue: Line '03 - Operations subject to 21% VAT' will account twice the product amount instead of canceling it This occurs because when reverting the POS closing entry we create an entry having amounts with inverted signs and same tax tags. We also need to s
Original PR description
With BE localization Enable 'Use QR code on ticket' in Settings Open POS Session Add a Product with 21% Tax Pay > Save QR link for later Close Pos session Access QR link, generate invoice Check Accounting>Reporting>Tax Report Issue: Line '03 - Operations subject to 21% VAT' will account twice the product amount instead of canceling it This occurs because when reverting the POS closing entry we create an entry having amounts with inverted signs and same tax tags. We also need to set the flag `tax_tag_invert` to ensure the amount correctly accounted as reverse opw-3815770 opw-3821017 Forward-Port-Of: odoo/odoo#163696 Forward-Port-Of: odoo/odoo#161531
Versions -------- - 17.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Enterprise branch: https://github.com/odoo/enterprise/pull/61387 Forward-Port-Of: odoo/odoo#163182
Original PR description
Versions -------- - 17.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Enterprise branch: https://github.com/odoo/enterprise/pull/61387 Forward-Port-Of: odoo/odoo#163182
This error arises when the someone clicks on ``Early Discount`` in Payment Terms while creating a new one. Steps to reproduce - Install ``account`` module - Invoicing -> Configuration -> Invoicing -> Payment Terms - Click on ``New`` -> click on ``Early Discount`` Traceback : ``` ValueError: not enough values to unpack (expected 1, got 0) File "odoo/models.py", line 5848, in ensure_one _id, = self._ids ValueError: Expected singleton: res.currency() File "odoo/http.py", lin
Original PR description
This error arises when the someone clicks on ``Early Discount`` in Payment Terms while creating a new one. Steps to reproduce - Install ``account`` module - Invoicing -> Configuration -> Invoicing ->…
This error arises when the someone clicks on ``Early Discount`` in Payment Terms while creating a new one.
Steps to reproduce
- Install ``account`` module
- Invoicing -> Configuration -> Invoicing -> Payment Terms
- Click on ``New`` -> click on ``Early Discount``
Traceback :
```
ValueError: not enough values to unpack (expected 1, got 0)
File "odoo/models.py", line 5848, in ensure_one
_id, = self._ids
ValueError: Expected singleton: res.currency()
File "odoo/http.py", line 2251, in __call__
response = request._serve_db()
File "odoo/http.py", line 1827, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1847, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1825, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1832, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2057, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 739, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/web/models/models.py", line 1011, in onchange
todo = [
File "addons/web/models/models.py", line 1014, in <listcomp>
if field_name not in done and snapshot0.has_changed(field_name)
File "addons/web/models/models.py", line 1127, in has_changed
return self[field_name] != self.record[field_name]
File "odoo/models.py", line 6576, in __getitem__
return self._fields[key].__get__(self, self.env.registry[self._name])
File "odoo/fields.py", line 1261, in __get__
self.compute_value(recs)
File "odoo/fields.py", line 1443, in compute_value
records._compute_field_value(self)
File "odoo/models.py", line 4931, in _compute_field_value
fields.determine(field.compute, self)
File "odoo/fields.py", line 100, in determine
return needle(*args)
File "addons/account/models/account_payment_term.py", line 95, in _compute_example_preview
discount_amount = record._get_amount_due_after_discount(record.example_amount, 0.0)
File "addons/account/models/account_payment_term.py", line 67, in _get_amount_due_after_discount
discount_amount_currency = self.currency_id.round(total_amount - (total_amount * (1 - (percentage))))
File "odoo/addons/base/models/res_currency.py", line 217, in round
self.ensure_one()
File "odoo/models.py", line 5851, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
This error occurs from line[1] where the currency ID is getting false within the self, leading to a value error being raised. This happens because of this PR https://github.com/odoo/odoo/pull/161044, where they have removed the default currency from currency ID field.
This commit will fix the above error by adding ``company_id`` field in the payment term from view.
[1] : https://github.com/odoo/odoo/blob/5673ea9d8c6993575bd9ce9c2a931a8738e77e76/addons/account/models/account_payment_term.py#L67
sentry - 5209971284
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#162564Current Behavior: - Creating a copy of a product with attributes and extra prices set for the values of this attribute will not copy the extra prices. Expected Behavior: - These prices should be matched with the newly created objects if possible. Steps to reproduce: - - Create a product > add an attribute line with at least one value. - Save the product > configure the attribute line and set an extra price for that value. - Duplicate the product. Fix: - Since copies are not cr
Original PR description
Current Behavior: - Creating a copy of a product with attributes and extra prices set for the values of this attribute will not copy the extra prices. Expected Behavior: - These prices should be…
Current Behavior: - Creating a copy of a product with attributes and extra prices set for the values of this attribute will not copy the extra prices. Expected Behavior: - These prices should be matched with the newly created objects if possible. Steps to reproduce: - - Create a product > add an attribute line with at least one value. - Save the product > configure the attribute line and set an extra price for that value. - Duplicate the product. Fix: - Since copies are not created in cascade by the framework, we need to match by hand the `price_extra` and the `exlude_for` of the newly created `product.template.attribute.value` with the old ones. As this matching might not be deterministic when the same attribute and value combination is used on multiple lines, we expect that the extra price and the exclusion rule depend only on this combination. opw-3731192 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162972 Forward-Port-Of: odoo/odoo#154692
**Current behavior:** On a payslip, creating multiple lines with the same rule code will result in a misreport with duplicate pay records. **Expected behavior:** Payroll reporting should accurately reflect reality. **Steps to reproduce:** 1. Create a new salary rule (e.g., Commission) and set its 'code' field to 'COMMISSION' and tick the option `View on Payroll Reporting` 2. Set its 'Condition Based on' to 'Python Expression' and enter `result = (inputs.get("COMMIS
Original PR description
**Current behavior:** On a payslip, creating multiple lines with the same rule code will result in a misreport with duplicate pay records. **Expected behavior:** Payroll reporting should accurately…
**Current behavior:**
On a payslip, creating multiple lines with the same rule code
will result in a misreport with duplicate pay records.
**Expected behavior:**
Payroll reporting should accurately reflect reality.
**Steps to reproduce:**
1. Create a new salary rule (e.g., Commission) and set its
'code' field to 'COMMISSION' and tick the option
`View on Payroll Reporting`
2. Set its 'Condition Based on' to 'Python Expression' and enter
`result = (inputs.get("COMMISSION") or 0)`
3. Set its 'Computation' to 'Python code' and enter
`result = (inputs.get("COMMISSION") or 0).amount`
`result_name = (inputs.get("COMMISSION") or 0).name`
4. Create a `hr.payslip.input.type` (other input type) record
to permit the newly created salary rule to appear on a
payslip (e.g., Country of current company and 'Regular Pay'
for 'Availability in Structure' and 'code' = 'COMMISSION'
5. Create a payslip record (To Pay) for some employee, selecting
the structure that permits the newly created rule to be
applied (e.g., 'Regular Pay') (Note the pay period)
6. In the 'Other Inputs' table add two lines both set to the
'COMMISSION' code -> Compute Sheet -> Create Draft Entry
7. Go to the Reporting -> Payroll -> Pivot View, collapse the
y-axis; Expand y-axis -> Employee -> Employee from payslip
-> Add Custom Group -> End Date; Observe multiple entries
pay period defined when creating the payslip
**Cause of the issue:**
In `hr.payroll.report` these rules will be grouped by their
'total' fields. When we have a repeated rule code with some
'total' amount, we will create two reports for the same
payslip.
**Fix:**
Use a SUM to aggregate these additional_rules in the SELECT and
remove them from the GROUP BY. We need another DISTINCT clause
to ensure we aren't summing redundant row values.
opw-3614679
Forward-Port-Of: odoo/enterprise#60814Changed service product UOM code from `UNT` to `NA` in the HSN JSON file for GSTR-1 reporting. Task ID: 3907971 Forward-Port-Of: odoo/enterprise#61914
Original PR description
Changed service product UOM code from `UNT` to `NA` in the HSN JSON file for GSTR-1 reporting. Task ID: 3907971 Forward-Port-Of: odoo/enterprise#61914
Versions -------- - 15.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Community branch: https://github.com/odoo/odoo/pull/162977 Forward-Port-Of: odoo/enterprise#61797 Forward-Port-Of: odoo/enterprise#61311
Original PR description
Versions -------- - 15.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Community branch: https://github.com/odoo/odoo/pull/162977 Forward-Port-Of: odoo/enterprise#61797 Forward-Port-Of: odoo/enterprise#61311
**Steps to reproduce:** - Install l10n_lu_reports - Switch to a company in Luxembourg (e.g. LU Company) - Go to "Accounting / Reporting / Statement Reports / Balance Sheet" - Export electronic report via "XML" button **Issue:** Some fields (i.e. "201", "202", "405", "406") don't appear in the XML if their value is 0. These fields are mandatory and should always appear in the XML. **Source:** https://ecdf.b2g.etat.lu/ecdf/forms/popup/CA_BILAN_ABR/2024/en/1/rules opw-3802589 Forwa
Original PR description
**Steps to reproduce:** - Install l10n_lu_reports - Switch to a company in Luxembourg (e.g. LU Company) - Go to "Accounting / Reporting / Statement Reports / Balance Sheet" - Export electronic report via "XML" button **Issue:** Some fields (i.e. "201", "202", "405", "406") don't appear in the XML if their value is 0. These fields are mandatory and should always appear in the XML. **Source:** https://ecdf.b2g.etat.lu/ecdf/forms/popup/CA_BILAN_ABR/2024/en/1/rules opw-3802589 Forward-Port-Of: odoo/enterprise#61446
Added a test for partners vat export in DateV report. task-3866785 Forward-Port-Of: odoo/enterprise#61202
Original PR description
Added a test for partners vat export in DateV report. task-3866785 Forward-Port-Of: odoo/enterprise#61202
string format was broken on post fail message, this commit fix it. [Task-3775424](https://www.odoo.com/web#id=3775424&cids=1&menu_id=6478&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#61857
Original PR description
string format was broken on post fail message, this commit fix it. [Task-3775424](https://www.odoo.com/web#id=3775424&cids=1&menu_id=6478&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#61857
**Steps:** Go to Payroll App > Configuration > Salary > Structures Select checkbox for any entry Now click on the Action Button **Issue:** "Duplicate" action menu is displayed 2 times  **Cause:** Prior to this update, the 'list_controller.js' file in version saas~16.4 did not included the "Duplicate" menu action within the [getActionMenuItems](https://github.com/odoo/odoo/blob
Original PR description
**Steps:** Go to Payroll App > Configuration > Salary > Structures Select checkbox for any entry Now click on the Action Button **Issue:** "Duplicate" action menu is displayed 2 times…
**Steps:** Go to Payroll App > Configuration > Salary > Structures Select checkbox for any entry Now click on the Action Button **Issue:** "Duplicate" action menu is displayed 2 times  **Cause:** Prior to this update, the 'list_controller.js' file in version saas~16.4 did not included the "Duplicate" menu action within the [getActionMenuItems](https://github.com/odoo/odoo/blob/saas-16.4/addons/web/static/src/views/list/list_controller.js#L287-L325) function. However, in the same version, the 'hr.payroll' model defined this action in the [hr_payroll_structure_views.xml](https://github.com/odoo/enterprise/blob/saas-16.4/hr_payroll/views/hr_payroll_structure_views.xml#L132-L143) file, utilized within the 'Salary Structures' in the Payroll app. In version 17.0, the "Duplicate" menu action was added to the [getStaticActionMenuItems](https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/list/list_controller.js/#L304-L349) function of 'list_controller.js'. Following the update, despite the addition of the "Duplicate" menu action in the 'list_controller.js' file for version 17.0, it still remained present in the [hr_payroll_structure_views.xml](https://github.com/odoo/enterprise/blob/17.0/hr_payroll/views/hr_payroll_structure_views.xml#L134-L145) file. **Fix:** Removed the 'ir_actions_server_duplicate_structure' from hr_payroll_structure_views.xml, to ensure the same menu action "Duplicate" do not exist twice, in the 'Salary Structures'. Affected Version: 17.0 ~ master Task ID: [3854557](https://www.odoo.com/web#id=3854557&cids=2&menu_id=4720&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#61666
Before this commit: When a portal user navigates through the Signatures using the arrow buttons, an error "500: Internal Server Error" is raised. Traceback error: values = self._get_page_view_values(sign_item_sudo, sign_item_sudo.access_token, values, TypeError: CustomerPortal._get_page_view_values() got multiple values for argument 'access_token' This happened because the argument 'access_token' is passed two times: 1. sign_item_sudo.access_token 2. in **kwargs This commit aims to
Original PR description
Before this commit: When a portal user navigates through the Signatures using the arrow buttons, an error "500: Internal Server Error" is raised. Traceback error: values = self._get_page_view_values(sign_item_sudo, sign_item_sudo.access_token, values, TypeError: CustomerPortal._get_page_view_values() got multiple values for argument 'access_token' This happened because the argument 'access_token' is passed two times: 1. sign_item_sudo.access_token 2. in **kwargs This commit aims to fix the issue by deleting 'access_token' from kwargs. Task: 3853020 Forward-Port-Of: odoo/enterprise#60299
Steps to reproduce: - Make a service product, with invoicing policy based on timesheet and project & task set for create on order. - Make an SO for that product - The SO will create the task and the project - Register timesheet linked with the task with 15 min - Start a timer - Create the invoice Issues: The timer is still running, with the only choice possible being to discard it. Solution: The behaviour wanted by the po is to stop all the timer and count them in the invoice. o
Original PR description
Steps to reproduce: - Make a service product, with invoicing policy based on timesheet and project & task set for create on order. - Make an SO for that product - The SO will create the task and the project - Register timesheet linked with the task with 15 min - Start a timer - Create the invoice Issues: The timer is still running, with the only choice possible being to discard it. Solution: The behaviour wanted by the po is to stop all the timer and count them in the invoice. opw-3715694 Forward-Port-Of: odoo/enterprise#61475
[FIX] account_reports: hide lines at 0 when unfold Problem: There are two way to see the issue :- 1- Whenever you go to the balance sheet and check on the hide at 0 option Then you go and unfold-fold-unfold a line with one zero child and non zero child. The line will with zero will keep showing up. 2- Mentioned in the task-3898147 Issue: when we check the option 'hide at 0' then we fold
Original PR description
[FIX] account_reports: hide lines at 0 when unfold Problem: There are two way to see the issue :- 1- Whenever you go to the balance sheet and check on the hide at 0 option Then you go and…
[FIX] account_reports: hide lines at 0 when unfold
Problem: There are two way to see the issue :-
1- Whenever you go to the balance sheet and check on the hide at 0 option Then you go and
unfold-fold-unfold a line with one zero child and non zero child.
The line will with zero will keep showing up.
2- Mentioned in the task-3898147
Issue: when we check the option 'hide at 0' then we fold and unfold.
The flow of func 'unfold Loaded Line' (the already loaded lines) has no clue about the 'hide at 0' option
but on the other hand the func 'unfoldNewLine' (the new added lines) know about the 'hide at 0' option
Solution: Send the lines that we want to unfold to the 'assignLinesVisibility' logic that handle 'hide at 0'
as we do with 'unfoldNewLine'
Minor renames: setLineVisibility >> hideZeroLines, assignLinesVisibility >> setLineVisibility
Task-3898147
Forward-Port-Of: odoo/enterprise#61831Wrong conflict resolution when forward porting https://github.com/odoo/enterprise/commit/b81c50278a8d55a733c6f1579dc764c19b92e08d Task-3901993 Forward-Port-Of: odoo/enterprise#61772
Original PR description
Wrong conflict resolution when forward porting https://github.com/odoo/enterprise/commit/b81c50278a8d55a733c6f1579dc764c19b92e08d Task-3901993 Forward-Port-Of: odoo/enterprise#61772
**Current behavior:** When downloading sign documents via buttons in the form and tree views, user will get an access error on the read perm for the `sign.request.item.value` model. **Expected behavior:** These buttons should permit the download of the corresponding document. **Steps to reproduce:** 1. In the Sign app go to Documents 2. In the tree view click the download button by a document which has not already been generated (e.g., any of the demo data documents) **Cause of th
Original PR description
**Current behavior:** When downloading sign documents via buttons in the form and tree views, user will get an access error on the read perm for the `sign.request.item.value` model. **Expected…
**Current behavior:** When downloading sign documents via buttons in the form and tree views, user will get an access error on the read perm for the `sign.request.item.value` model. **Expected behavior:** These buttons should permit the download of the corresponding document. **Steps to reproduce:** 1. In the Sign app go to Documents 2. In the tree view click the download button by a document which has not already been generated (e.g., any of the demo data documents) **Cause of the issue:** The download buttons call `get_completed_document()` which, if the completed doc has not been generated, will directly call `_generate_completed_document()` where we do a `read_group()` on the `sign.request.item.value` model. This model must be read with `.sudo()` because access rights are never granted to any group. **Fix:** Get rid of the `_generate_completed_document()` call in `get_completed_document()`, letting the program go to the `act_url` flow, into `download_document()`. Here we will access the `sign.request` record with `env.su is True` which will permit the `read_group()` later on in the aforementioned flow. Because we always route from `get_completed_document()` with a `download_type='completed'`, there is no reason to generate the document here. opw-3834177 Forward-Port-Of: odoo/enterprise#61332 Forward-Port-Of: odoo/enterprise#60399
Versions -------- - 17.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Community branch: https://github.com/odoo/odoo/pull/163182 Forward-Port-Of: odoo/enterprise#61387
Original PR description
Versions -------- - 17.0+ Issue ----- `precision_rounding` values were being passed incorrectly as `precision_digits` parameters. Solution -------- Pass them as named `precision_rounding` parameters instead. Community branch: https://github.com/odoo/odoo/pull/163182 Forward-Port-Of: odoo/enterprise#61387
**Steps to reproduce:** - Install l10n_ec_reports_ats - Switch to an Ecuadorian company (e.g. EC Company) - Create a draft invoice - Cancel the invoice - Go to "Accounting / Reporting / Statement Reports / Tax Report" - Filter the report on the same month than the cancelled invoice - Click on upper-left ATS button **Issue:** A traceback is raised: "TypeError: 'bool' object is not subscriptable" while trying to render the cancelled moves: <secuencialInicio t-out="void_move.l10n_lata
Original PR description
**Steps to reproduce:** - Install l10n_ec_reports_ats - Switch to an Ecuadorian company (e.g. EC Company) - Create a draft invoice - Cancel the invoice - Go to "Accounting / Reporting / Statement Reports / Tax Report" - Filter the report on the same month than the cancelled invoice - Click on upper-left ATS button **Issue:** A traceback is raised: "TypeError: 'bool' object is not subscriptable" while trying to render the cancelled moves: <secuencialInicio t-out="void_move.l10n_latam_document_number[-9:]"/> **Cause:** "l10n_latam_document_number" field is a computed field that depends on the name of the account move. When the move is in draft, it doesn't have a name (i.e. "/") and "l10n_latam_document_number" has False as value. **Solution:** Cancelled draft invoices should not be taken into account in ATS report. opw-3857645 Forward-Port-Of: odoo/enterprise#61737
Versions -------- - saas-16.4+ Steps ----- 1. Set decimal accuracy of Product Unit of Measure to 5 digits; 2. create a Manufacturing Order for any product; 3. set quantity to 1000 Units; 4. add Work Order and confirm; 5. go to Overview and click on the chosen Work Center. Issue ----- `1000` gets displayed as `1000.0000000000001`. Cause ----- Our float utils introduce tiny rounding errors, especially at higher precisions, which need to be eliminated for display. Solution
Original PR description
Versions -------- - saas-16.4+ Steps ----- 1. Set decimal accuracy of Product Unit of Measure to 5 digits; 2. create a Manufacturing Order for any product; 3. set quantity to 1000 Units; 4. add Work Order and confirm; 5. go to Overview and click on the chosen Work Center. Issue ----- `1000` gets displayed as `1000.0000000000001`. Cause ----- Our float utils introduce tiny rounding errors, especially at higher precisions, which need to be eliminated for display. Solution -------- Use `formatFloat` w/ the precision digits of the `qty_producing` field. opw-3684166 Forward-Port-Of: odoo/enterprise#61868 Forward-Port-Of: odoo/enterprise#58880
The context key default_journal_id is being given the record and not the id when opening the bank rec widget. In the bank rec widget, updateJournalState is called, which in some [cases](https://github.com/odoo/enterprise/blob/17.0/account_accountant/static/src/components/bank_reconciliation/kanban.js#L553) will use that context key as journal id to send to [collect_global_info_data](https://github.com/odoo/enterprise/blob/17.0/account_accountant/models/bank_rec_widget.py#L1576). In collect_g
Original PR description
The context key default_journal_id is being given the record and not the id when opening the bank rec widget. In the bank rec widget, updateJournalState is called, which in some [cases](https://github.com/odoo/enterprise/blob/17.0/account_accountant/static/src/components/bank_reconciliation/kanban.js#L553) will use that context key as journal id to send to [collect_global_info_data](https://github.com/odoo/enterprise/blob/17.0/account_accountant/models/bank_rec_widget.py#L1576). In collect_global_info_data, the journal id is used to browse, which create a recordset with id 'account.journal(x,)' which will trigger an error when exists is called. This change will simply fix the context key to properly take the id as you would expect. opw-3885030 Forward-Port-Of: odoo/enterprise#61850
Adding tooltip to Withhold Agent for l10n_ec localization in accounting settings under Ecuadorian Localization Reason is to give the user tip about what this field actually hold and enhance the user experience as some users raising some issues because of the lack of knowing this field Task-id: #3819108 Forward-Port-Of: odoo/enterprise#60578
Original PR description
Adding tooltip to Withhold Agent for l10n_ec localization in accounting settings under Ecuadorian Localization Reason is to give the user tip about what this field actually hold and enhance the user experience as some users raising some issues because of the lack of knowing this field Task-id: #3819108 Forward-Port-Of: odoo/enterprise#60578