Daily updates from Odoo
Tuesday, December 17, 2024
47 changes · 18.0
New functionality added to Odoo
Adds sample invoices and demo partner records for the Pakistan localization, making it easier to evaluate and demonstrate typical accounting workflows. This helps users and implementers explore the localization with realistic example data before configuring a live company.
Original PR description
- Added sample account invoices - Created demo partners with relevant information > task-2879519
Enhancements to existing features
Odoo makes Peppol e-invoicing easier to adopt by simplifying setup, automatically enabling it in many supported countries, and reducing registration friction. Users get clearer guidance when sending invoices and cleaner partner/configuration screens, helping businesses use Peppol with fewer manual steps and less confusion.
Original PR description
*: account_edi_ubl_cii, account_peppol Revamping around Peppol to simplify onboarding. 1. In previous commit [1], we added a footer in email when relevant with some Peppol related information. 2.…
*: account_edi_ubl_cii, account_peppol Revamping around Peppol to simplify onboarding. 1. In previous commit [1], we added a footer in email when relevant with some Peppol related information. 2. Simplify the res.config.setting view. 3. Auto-install the Peppol module for following countries: AT, BE, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GR, IE, IS, IT, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI. 4. Peppol Registration wizard: **Remove SMS validation** => we are assessing some KYC, but the SMS validation is not preventing much, so its only adding frictions. Remove the migrations key from the wizard, if the user has registered a key through his previous Access Point, we retrieve it and automatically migrates the participant. Small UI improvements. 5. Print & Send wizard: refine warnings, disable the "by Peppol" checkbox if the customer is not on Peppol. Add some modals with explanations about Peppol if the customer is on Peppol but the Sender didn't check the option. 6. Partner form: Hide in debug some too technical field. Small UI improvements. 7. EAS cleanup: revamp EAS description to be shorter and clearer. Better handling of translations. [1] https://github.com/odoo/odoo/commit/4e984c0ae234f02bd07d96fc555d5b5e9ad144c3 task-4332306
Draft accounting documents no longer consume official sequence numbers before confirmation, preventing numbering gaps or out-of-order records when users confirm documents later. Users may see a dynamic placeholder preview for the first expected number, while the final number is only assigned once the document is confirmed.
Original PR description
*: account_payments, l10n_ar, l10n_cl, l10n_in_edi, l10n_in_edi_ewaybill, l10n_it_edi, l10n_latam_invoice_document, payment_asiapay --- Description of the issue this commit addresses: When there is…
*: account_payments, l10n_ar, l10n_cl, l10n_in_edi, l10n_in_edi_ewaybill, l10n_it_edi, l10n_latam_invoice_document, payment_asiapay --- Description of the issue this commit addresses: When there is no move in the current sequence, the moves you create take a slot in the sequence while being drafts, this means that if you do not confirm moves in the order they were created, the second move to be confirmed has a lower sequence number than the first which breaks continuity. --- Desired behavior after this commit is merged: This commit makes it so that no sequence number is ever assigned while the move stays in draft. A dynamic placeholder shows the user what the name will be with the sequence "template" but it is only used once the move is confirmed. For subsequent moves, meaning when a first sequence number has been consumed, the old behavior of showing "Draft" as a name stands but there is still no sequence number consumed. --- Enterprise PR: https://github.com/odoo/enterprise/pull/73837 task-4241510 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The batch Send & Print preview now shows how many invoices will also be sent through the default electronic invoicing process. This helps users understand all actions that will happen before confirming a batch send, reducing confusion and surprises.
Original PR description
Problem --------- The Send&Print has been reworked in 9e769e1b11f22890e5245859053bc8dd31e42634. However, there is currently no information about which EDIs are going to be triggered along side the sending of the invoice; meaning that the user will not know that the EDI process will be executed too, which is confusing. Objective --------- Add to the preview of the list of stuff to be sent in batch the amount of invoices that will be sent using the default EDI. Solution --------- Update the `summary_data` computation to encompass for EDI counting adding the results to the dictionary that will be displayed by the batch Send&Print custom JS Component and custom template. task-4306204 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Peppol document bridge module will no longer be installed automatically. This avoids adding a module that is planned for removal, keeping installations cleaner and reducing unnecessary components.
Original PR description
…ocument bridge Will be removed in master, in the meantime we don't auto-install the module. task-4332306
When a sales commission plan is duplicated, its target commission lines are now copied as well. This helps teams reuse existing commission structures more reliably and avoids manually recreating targets after copying a plan.
Changes to document folder access now also apply to documents that have been moved to the trash. This keeps permissions consistent across a folder, reducing the risk of outdated access settings on archived items.
Original PR description
Task-4353456
This update aligns accounting and localization reports with the latest posting-time numbering behavior for journal entries. It helps ensure automated checks and exports reflect the actual document numbers used after entries are posted, including excluding Ecuador ATS records that lack required document numbers.
Original PR description
*: account_reports, l10n_ec_reports_ats, l10n_es_reports, l10n_uy_edi --- Description of the issue this commit addresses: The community PR linked to this one modified the naming behavior of moves and…
*: account_reports, l10n_ec_reports_ats, l10n_es_reports, l10n_uy_edi --- Description of the issue this commit addresses: The community PR linked to this one modified the naming behavior of moves and therefore tests have broken. This PR adapts thoses tests to the new behavior. --- Old vs. New naming behavior: Let's consider an empty journal. In this journal three moves are added with decreasing date (move1 is the most recent, move2 is in the middle and move3 is the oldest). now we batch the moves and post them together. Before, the first move of a journal would consume the first sequence number upon its creation even in draft and subsequent moves in would be named "/". When batched and posted afterwards, in the `_compute_name()` method, a `.sorted()` would order the moves by date (account.move(3, 2, 1)) and would use that order to name them. As the first sequence number is burned, move3 will use the second number and move2 will use the third number in the sequence. Resulting names: move1: 1, move2: 3 and move3: 2. With x moves: move1: 1, move2: x, move3: x-1, move4: x-2, ... Now, since no sequence number name is ever assigned to a draft entry, upon their creation, all three moves are named "/". And then, when they are batched and posted. they will be ordered 3,2,1 just like before but when naming move3, the first sequence number isn't consumed anymore so it will be named 1, move2 will be name 2 and move1 will be name 3. Resulting names: move1: 3, move2: 2 and move3: 1. With x moves: move1: x, move2: x-1, move3: x-2, move4: x-3, ... --- Desired behavior after this commit is merged: Tests that were relying on the fact that the first move of a sequence uses the first sequence number upon creation and not when posted are now adapted to take into account that sequence number are consumed when posted. In l10n_ec_reports_ats, moves without a latam document number are ignored for the ATS export because missing that attribute means they don't have names which makes them unfit for the export anyway. --- Community PR: https://github.com/odoo/odoo/pull/185326 task-4241510
Resolved issues and error corrections
Two Swiss localization taxes are now correctly marked as tax included. This ensures companies using the Swiss accounting setup get the expected tax behavior without manual correction.
Original PR description
### Steps to reproduce: - Install "l10n_ch" - Accounting > Configuration > Taxes - The taxes "100% GS" and "100% I OE" are not Tax included ### Cause: The column `price_include` in the tax CSVs was changed to `price_include_override` but the configuration was not kept for these fields. ### Solution: Make these two taxes 'Tax included' opw-4365234
This fixes an issue where some Calendar email templates could show an unintended blue background. The change ensures template formatting is saved in a browser-friendly way, so emails display as intended for users.
Original PR description
Steps to reproduce ----- 1. On a fresh database, install Calendar 2. Go to Email Templates > "Calendar : Event update" ** The content of the mail has a blue background ** Cause ----- Since commit 24731938f75358fd3c72b91465b72ab80d62d208, the `body_html` of the `mail.template` is stored in a xhtml format while it was previously saved in HTML. This means self-closing t tags, which were previously saved as `<t></t>`, are now saved as <t .../> in database. Since self closing t tags are not valid HTML, they get turned into opening t tags when viewed as HTML and the `data-oe-t-inline` attribute that prevents the blue background color styling to be applied are not present on these t tags. Solution ----- In case `output_format` is xml, transform the self closing t tags into empty elements which will be valid html. opw-4348482
This fix adjusts email editor tests so they pass consistently across community builds, where styling can differ slightly. It also improves how formatting is measured by placing a temporary copy of the editable content in the same page context, helping prevent false test failures.
Original PR description
Tests introduced with [commit] were failing on community builds because the style sheets have slight variations. This commit also specifies the DOM position of the cloned editable for style extraction. Instead of adding it blindly to the `body`, it is added as a sibling of the original `editable` element, which will provide a more accurate style context. [commit]: https://github.com/odoo/odoo/commit/1d709e8858ffdd86e79056c0f3a992e4410e127e Runbot tasks: 110278, 110279 task-4414541
The point of sale receipt screen now keeps subtotal labels such as "Untaxed Amount" from overlapping nearby values. This improves readability for cashiers and customers, especially in Odoo Online where the layout issue could appear.
Original PR description
In this commit: === - Added `text-nowrap` and `mw-100` classes to ensure labels like "Untaxed Amount" do not overlap with other elements. - This issue is only reproduce in odoo online. task-4402429 Before this commit:  After this commit:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix stops an Argentine payment option for existing third-party checks from appearing on every cash journal. It now applies only to the specific third-party check and rejected third-party check journals, reducing configuration mistakes and keeping payment workflows cleaner.
Original PR description
**Description of the issue/feature this PR addresses**: It is necessay not to set "Existing Third Party Checks" outgoing payment method in all argentinean cash journals. It is only needed to be set on "Third Party Checks" and "Rejected Third Party Checks" Argentinean journals that are created when the module is installed or a new argentinean company is created. **Current behavior before PR**: "Existing Third Party Checks" outgoing payment method is set in all argentinean cash journals. **Desired behavior after PR is merged**: "Existing Third Party Checks" outgoing payment method is set only in "Third Party Checks" and "Rejected Third Party Checks" argentinean journals. _Ticket Adhoc side_: 83443 _Task Latam side_: 1293 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects Uruguay tax settings so 10% and 22% VAT-included options are properly marked as prices that include tax. This helps businesses create sales and purchase documents with accurate tax treatment and avoids incorrect totals when using VAT-included pricing.
Original PR description
This pull request addresses an issue in PR #186444, which aimed to update l10n_uy by introducing 22% and 10% VAT-included tax options for sales and purchases. These changes support Uruguay’s practice of handling both tax-included and tax-excluded amounts per document. However, the tax_included_override option was mistakenly not enabled for these VAT-included tax options. This PR resolves the issue by enabling the tax_included_override option for 22% and 10% VAT-included taxes. Task Adhoc side: 43467 Task Latam side: 1294 This pr replaces https://github.com/odoo/odoo/pull/189224 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix keeps long search terms and tag names contained within the search bar instead of spilling outside the page layout. Users will see shortened text with the full value available on hover, making search results cleaner and better aligned.
Original PR description
Before this PR: - Long search content overflows the container. - Search input and searched content are misaligned when the content isn't long. Steps to Reproduce: - Type a very long string in the search bar. - Press enter and observe that the content overflows the container. After this PR: - Max-width is set on input_container to keep searched content within the container. - Long searched content will be ellipsis, with full text viewable on hover. - Max-width on searched content ensures alignment with search input. - `$search-align-width-large and $search-align-width-small` keeps the (Search...) aligned when input is long. task-4011097
This fixes Italian electronic invoicing so invoices with negative-quantity lines are formatted in a way accepted by SDI. The system now converts those lines by reversing the quantity and unit price, helping prevent invoice submission rejections.
Original PR description
Lines with negative quantity are refused by SDI. To avoid this issue, we invert the quantity and price unit in this case. opw-4402782 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that occurred when users started a timesheet timer, chose a Helpdesk project, and then selected a task. The Timesheets kanban view now includes the needed company information again, preventing the crash and keeping time tracking workflows uninterrupted.
Original PR description
Steps to reproduce: - In Timesheets app, go to kanban view. - Start the timer. - Select any Helpdesk project. - Try to select a task. Issue: - A traceback is thrown. Fix: - It is due to the fact that company_id field is removed from the kanban xml. - Thus not getting the value is throwing out a traceback. Solution: - Inject back the field into the kanban view. Issue from the PR: https://github.com/odoo/odoo/pull/172375 task-4382051
This fixes an automated website event test by ensuring the test focuses on the event ticket question modal before editing. It prevents a test failure related to editing a non-editable target, improving reliability for event website workflows.
Original PR description
we move the place of one step to have the focus in the modal in order to fix the error: "ERROR IN ACTION: cannot call `edit()`: target should be editable" After this commit, this error is therefore fixed. 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
Fixes an issue where filtering or grouping accounting data by distributed analytic accounts did not actually narrow the results. Users can now rely on journal item filters and balance sheet horizontal groups to show the correct figures per analytic account.
Original PR description
**Steps to reproduce:** - Install Accounting - Create an analytic plan (e.g. XYZ) - Create 2 associated analytic accounts (e.g. XYZ_1 and XYZ_2) - Create a journal entry with the first analytic…
**Steps to reproduce:**
- Install Accounting
- Create an analytic plan (e.g. XYZ)
- Create 2 associated analytic accounts (e.g. XYZ_1 and XYZ_2)
- Create a journal entry with the first analytic account:
* Journal: Miscellaneous Operations
* Journal Items:
| Account | Analytic Distribution | Debit | Credit |
| ------------- | ------------ | ----------------- | --------------------- |
| 101000 Current Assets | XYZ_1 | 100 | 0 |
| 600000 Expenses | | 0 | 100 |
- Create another journal entry with the second analytic account:
* Journal: Miscellaneous Operations
* Journal Items:
| Account | Analytic Distribution | Debit | Credit |
|----------------|-----------------|---------------|---------------|
| 101000 Current Assets | XYZ_2 | 200 | 0 |
| 600000 Expenses | | 0 | 200 |
**Use case 1:**
- Go to "Accounting / Accounting / Journal Items"
- Add a custom filter: [("Distribution Analytic Account", "is in", "XYZ_1")]
**Issue 1:**
Nothing happens. The filter doesn't work.
**Use case 2:**
- Go to "Accounting / Configuration / Accounting / Horizontal Groups"
- Create a group:
* Reports: Balance Sheet
* Field: Distribution Analytic Account
* Domain: [("Plan", "is in", "XYZ")]
- Go to "Accounting / Reporting / Statement Reports / Balance Sheet"
- Set Horizontal Group to the created one
**Issue 2:**
A grouping is done by analytic account (visually) but no filter is done on the data.
The value on all the columns are the same.
The configuration of field "Distribution Analytic Account" in the horizontal group doesn't apply.
**Cause:**
`distribution_analytic_account_ids` is a computed field without a search defined.
opw-4302877
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix ensures Uruguay’s 22% and 10% VAT-included tax options are properly marked so invoices can handle tax-included amounts as intended. Businesses using Uruguay localization get more accurate tax behavior when documents mix tax-included and tax-excluded pricing.
Original PR description
This pull request addresses an issue in PR #186444, which aimed to update l10n_uy by introducing 22% and 10% VAT-included tax options for sales and purchases. These changes support Uruguay’s practice of handling both tax-included and tax-excluded amounts per document. However, the tax_included_override option was mistakenly not enabled for these VAT-included tax options. This PR resolves the issue by enabling the tax_included_override option for 22% and 10% VAT-included taxes. Task Adhoc side: 43467 Task Latam side: 1294 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a database upgrade issue for companies using the Vietnam localization. The migration now uses the correct company reference so upgrades to Odoo 18 can complete without an accounting-related error.
Original PR description
- The post-migration script _fix_accounts_type attempted to use the field company_id, which no longer exists in the account.account model in the 18 version. This caused a traceback ValueError: Invalid field during the database upgrade. [reference](odoo@854c3b2#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R102) tbg-1602 upg-2387888
Fixed an issue where POS preparation screens could go blank when an order included notes spanning multiple lines. Staff can now view and process these orders normally, reducing disruption in kitchen or preparation workflows.
Original PR description
Steps to reproduce: - Create a pos order with multiple line order notes - Send the order to preparation - Open preparation display screen Current behaviour: - Blank preparation display screen Expected behaviour: - Show the order with mutliple lines order notes Explanation: - Order note is using split to display the note in point form. So inside the t-foreach loop, the t-key should be the value of the splited note value. Instead of using generate_note which is underfined. If multiple lines of order note, all lines generate_note will be underfined thus error thrown because t-key needs to be unique. X-original-commit: de85be7
Deleting a folder and its contained documents from Trash no longer triggers an error when both are selected together. This helps users clean up archived Documents records reliably without interruption.
Original PR description
Currently, an exception is generated when the user archives a document and its folder and tries to delete both folder and document once from Trash. Steps to produce: - Open document and create folder…
Currently, an exception is generated when the user archives a document and its folder and tries to delete both folder and document once from Trash. Steps to produce: - Open document and create folder and add document in folder - Now delete document and folder - Go to Trash > open list view > Select all records > Click on Delete error ``` MissingError: Record does not exist or has been deleted. (Record: documents.document(1,), User: 1) ``` This is because 'to_delete' contains all documents (self), including the folder that we deleted, and `removable_parent_folders` contains only the folder that we deleted. Now when cleaning records, [1] unlinks all files, including folders, and [2] again tries to delete the folder that we already deleted with [1]. This commit will fix the above issue by filtering `removable_parent_folders` now it is filtering records folders thats id not in self ids. [1] - https://github.com/odoo/enterprise/blob/5ba1aa66ab17d686da648025c8921995938115ed/documents/models/documents_document.py#L1935 [2] - https://github.com/odoo/enterprise/blob/5ba1aa66ab17d686da648025c8921995938115ed/documents/models/documents_document.py#L1941 sentry-6048388238
Canceled invoices are no longer counted when calculating sales commissions. This prevents overstated commission amounts and keeps commission reports aligned with valid invoicing activity.
Original PR description
Steps: - Create a sales commission plan and assign salespeople. - Create SO and invoice and assign the salesperson to the plan. This will give this person a commission. - Cancel the invoice the commission is still on the commission report. Issue: - Cancelled invoices were being included in commission calculations, which resulted in inaccurate commission amounts. Cause: - The existing SQL query did not account for the state of the invoices, leading to all invoices (including canceled ones) being considered for commission calculations. Fix: - Updated the SQL query by adding a filter to exclude invoices where the state is `canceled`. This ensures only valid invoices are used for commission calculations, providing accurate results. opw-4261999
Miscellaneous changes
### After this PR: This PR simply add a search function to stock_picking_batch move_line_ids field --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189172
Original PR description
### After this PR: This PR simply add a search function to stock_picking_batch move_line_ids field --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189172
Improve loop detection and break. Indeed heavy usage of mailgateway on Odoo servers lead us to face email loops. Those lead to email being disabled on our servers due to email limit, and to other issues (spam, never ending notifications, ...) on hosted servers. Three scenarios are fixed with this PR. See individual commits for more details. Those are * having followers using alias email, and using a mail provider that rewrites msg-id: we cannot detect message duplication and this ma
Original PR description
Improve loop detection and break. Indeed heavy usage of mailgateway on Odoo servers lead us to face email loops. Those lead to email being disabled on our servers due to email limit, and to other…
Improve loop detection and break. Indeed heavy usage of mailgateway on Odoo servers lead us to face email loops. Those lead to email being disabled on our servers due to email limit, and to other issues (spam, never ending notifications, ...) on hosted servers. Three scenarios are fixed with this PR. See individual commits for more details. Those are * having followers using alias email, and using a mail provider that rewrites msg-id: we cannot detect message duplication and this may generate loops. Several mail providers rewrite message IDs and that is a pain for us. We therefore add a custom header allowing to keep message ID in envelope; * replying to bounce may create bounce in loops: this is fixed using the loop detection custom reference; * detect loops on record update in addition to record creation: do not limit loops detection on aliases creating records, also check updated records; Task-3895869 OPW-4051539 OPW-4295745 OPW-4302257 Forward-Port-Of: odoo/odoo#190767 Forward-Port-Of: odoo/odoo#187696
For now, a user chan change the locations of a done SML, making it valuable while it was not (or the opposite), which leads to a broken stock valuation. To reproduce the issue: 1. In the Settins, enable - Automatic Accounting - Storage Locations 2. Create a product category C - Method: FIFO - Valo: Auto 3. Create a product P - Inventory tracked - Category P - Cost $1 4. Update its quantity - 10 x P at WH/Stock 5. Inventory > Reporting > Moves History, op
Original PR description
For now, a user chan change the locations of a done SML, making it valuable while it was not (or the opposite), which leads to a broken stock valuation. To reproduce the issue: 1. In the Settins,…
For now, a user chan change the locations of a done SML, making it
valuable while it was not (or the opposite), which leads to a broken
stock valuation.
To reproduce the issue:
1. In the Settins, enable
- Automatic Accounting
- Storage Locations
2. Create a product category C
- Method: FIFO
- Valo: Auto
3. Create a product P
- Inventory tracked
- Category P
- Cost $1
4. Update its quantity
- 10 x P at WH/Stock
5. Inventory > Reporting > Moves History, open SML related to P
6. Update the SML:
- From: WH/Stock
- To: WH/Stock/Shelf 1
- Quantity: 100
7. Inventory > Reporting > Locations, look for P
- There are two lines
- -100 at WH/Stock
- 100 at WH/Stock/Shelf 1
- And, therefore, the total on hand is 0, which makes sense
8. Inventory > Reporting > Valuation, look for P
Error: There are two lines, one that adds $10 to the valuation (from
step 4) and a second one that adds $90. This is incorrect, the SML
is now an internal move and should not add any value to the stock.
In fact, the first line should even be cancelled
Letting the user changes a done SML can be convenient, but he should
not be able to change the locations as he wants since the code does
not handle all cases.
OPW-4275417
Forward-Port-Of: odoo/odoo#190511### Current behavior before PR: While working on this https://github.com/odoo/enterprise/pull/74813/commits/337ea18baebdf4c896bc3e503448207fd9095991 we were overriding a method in VariantMixin but it was shadowed and not executed this was happening because of the order JS is loading the files when importing website_sale. ### Desired behavior after PR is merged: After discussing with XBO, we are removing the import of website_sale from variant_mixin.js and moving the overridden method to web
Original PR description
### Current behavior before PR: While working on this https://github.com/odoo/enterprise/pull/74813/commits/337ea18baebdf4c896bc3e503448207fd9095991 we were overriding a method in VariantMixin but it was shadowed and not executed this was happening because of the order JS is loading the files when importing website_sale. ### Desired behavior after PR is merged: After discussing with XBO, we are removing the import of website_sale from variant_mixin.js and moving the overridden method to website_sale.js to avoid having this problem in the future. Forward-Port-Of: odoo/odoo#190343 Forward-Port-Of: odoo/odoo#189038
Versions -------- - 17.0+ Steps ----- 1. Edit a product page in eCommerce; 2. enable "Buy Now" button; 3. disable "Select Quantity". Issue ----- The "Buy Now" button becomes comically large. Cause ----- In 16.0, this specific configuration also enlarged the "Add to Cart" button, so a conditional was added to keep the "Buy Now" button the same size. With the UI changes in 16.3+, the cart button no longer changes size, but doing the same for the "Buy Now" button was overlooke
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Edit a product page in eCommerce; 2. enable "Buy Now" button; 3. disable "Select Quantity". Issue ----- The "Buy Now" button becomes comically large. Cause ----- In 16.0, this specific configuration also enlarged the "Add to Cart" button, so a conditional was added to keep the "Buy Now" button the same size. With the UI changes in 16.3+, the cart button no longer changes size, but doing the same for the "Buy Now" button was overlooked. Solution -------- No longer change the button size on `not hasQuantities or not hasBuyNow` opw-4404060 Forward-Port-Of: odoo/odoo#190635
This is a regression since 48ef812a. Before, the field's views were rendered directly, getting all the decoration classes on them. Since 48ef812a, they are rendered as a child of a parent `Field` component (a `div`), which gets the decoration classes instead [^1]. The issue was partially fixed by 2f99f7dc, but only for `<input/>` and `<textarea/>` elements. The same fix is now applied to the `<select/>` element. [^1]: https://github.com/odoo/odoo/blob/60c7b65f/addons/web/static/src/
Original PR description
This is a regression since 48ef812a. Before, the field's views were rendered directly, getting all the decoration classes on them. Since 48ef812a, they are rendered as a child of a parent `Field` component (a `div`), which gets the decoration classes instead [^1]. The issue was partially fixed by 2f99f7dc, but only for `<input/>` and `<textarea/>` elements. The same fix is now applied to the `<select/>` element. [^1]: https://github.com/odoo/odoo/blob/60c7b65f/addons/web/static/src/views/fields/field.xml#L4-L8 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190763
As creating/obtaining a registry does not set the `dbname` context variable on the current thread, it must be set manually for the standalone tests to run correctly. Forward-Port-Of: odoo/odoo#190330
Original PR description
As creating/obtaining a registry does not set the `dbname` context variable on the current thread, it must be set manually for the standalone tests to run correctly. Forward-Port-Of: odoo/odoo#190330
Have a list or kanban views with more than 10k records such that the count limit is reached, and the pager displays something like "1-80/10000+". Click on "10000+" to compute the real count. Before this commit, the context wasn't given to that call, which could obviously return a wrong result, for instance if the context has the "active_test" key set to false. task~4331708 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is mer
Original PR description
Have a list or kanban views with more than 10k records such that the count limit is reached, and the pager displays something like "1-80/10000+". Click on "10000+" to compute the real count. Before this commit, the context wasn't given to that call, which could obviously return a wrong result, for instance if the context has the "active_test" key set to false. task~4331708 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#190760 Forward-Port-Of: odoo/odoo#190721
Steps to reproduce: - define your language as French/BE - create a bill (facture fournisseur) - edit the vat with '20.13' using the numpad decimal key Issue: the amount is '2013.00' Cause: numpad decimal in belgian layout is a comma `,` which in this is interpreted as a thousands separator. Solution: Use the `useNumpadDecimal` hook opw-4284370 Forward-Port-Of: odoo/odoo#190482 Forward-Port-Of: odoo/odoo#189582
Original PR description
Steps to reproduce: - define your language as French/BE - create a bill (facture fournisseur) - edit the vat with '20.13' using the numpad decimal key Issue: the amount is '2013.00' Cause: numpad decimal in belgian layout is a comma `,` which in this is interpreted as a thousands separator. Solution: Use the `useNumpadDecimal` hook opw-4284370 Forward-Port-Of: odoo/odoo#190482 Forward-Port-Of: odoo/odoo#189582
Steps to reproduce the issue: ============================= - Have 2 p elements where the last one have a link at the end of it - Copy the 2 lines - Paste them - The box around the link is shown which indicates that the cursor is inside the link - Try to add content - The content is added oustide the link Origin of the issue: ==================== When the selection have the p element and inside it there is an a element , currentNode will be the p and not the a, but lastposition
Original PR description
Steps to reproduce the issue: ============================= - Have 2 p elements where the last one have a link at the end of it - Copy the 2 lines - Paste them - The box around the link is shown…
Steps to reproduce the issue: ============================= - Have 2 p elements where the last one have a link at the end of it - Copy the 2 lines - Paste them - The box around the link is shown which indicates that the cursor is inside the link - Try to add content - The content is added oustide the link Origin of the issue: ==================== When the selection have the p element and inside it there is an a element , currentNode will be the p and not the a, but lastposition will have the link node which is not padded with zws yet. So we put the selection without the padding and then it's added which changes the selection to have anchor node on the end of the ufeff charater inside the link (`<a>󾿼ontent[]<a>`) which makes the selection appears as inside the link but adding content will be after the link. Solution: ========= We need to pad the link with zws in case the selection we put is at the edges of the link. ----------------------------------------------- Before: ======= In rtl lang, the cursor gets stuck at the edge of the link using the arrow keys. After: ====== No the cursor moves correctly in rtl lang. We need to make `arrowLeft` as go to next and `arrowRight` as going previous task-4089193 Forward-Port-Of: odoo/odoo#185707
revert the commit as when we fetch archived warehouse's pos type it will raise error for other source or destination loction for newly created stock operation type like even functinally also there is no need to fetch archived warehouse's operation type. ``` quality Control cross Dock, Storage type ``` we got this error during upgrade : ``` File "/home/odoo/src/odoo/saas-17.4/odoo/sql_db.py", line 347, in execute res = self._obj.execute(query, params) psycopg2.errors.NotNullVi
Original PR description
revert the commit as when we fetch archived warehouse's pos type it will raise error for other source or destination loction for newly created stock operation type like even functinally also there is…
revert the commit
as when we fetch archived warehouse's pos type
it will raise error for other source or destination loction for newly created stock operation type like
even functinally also there is no need to fetch
archived warehouse's operation type.
```
quality Control
cross Dock,
Storage type
```
we got this error during upgrade :
```
File "/home/odoo/src/odoo/saas-17.4/odoo/sql_db.py", line 347, in execute
res = self._obj.execute(query, params)
psycopg2.errors.NotNullViolation: null value in column "default_location_src_id" of relation "stock_picking_type" violates not-null constraint
DETAIL: Failing row contains (33, 0, 28, 56, null, null, null, 4, null, null, 1, 1, 1, QC, internal, at_confirm, FBAQC, ask, {"en_US": "Quality Control"}, null, f, f, t, null, f, null, 2024-10-16 05:14:53.18448, 2024-10-16 05:14:53.18448, optional, optional, no, optional, null, null, t, null, null, 2x7xprice, 4x12_lots, pdf, null, null, null, null, null, null, null, null, null, t, null).
```
due to this two fix:
https://github.com/odoo/odoo/pull/151719/commits
https://github.com/odoo/odoo/pull/175838/files
so we need to avoid to fetch archived warehouse's picking type.
ref:
odoo/upgrade#6631
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#185244Since commits [1] and [2], the gradient background colors for headers in the mobile version were not applied. This commit resolves the issue. Steps to reproduce: - Open the Website Editor. - Click on the header. - Change the background color of the header and select a custom gradient. - Exit edit mode. - Click on the mobile icon to view the mobile version. - Click the hamburger icon. - Observe that the gradient background is not applied. opw-4329423 [1]: https://github.com/odoo
Original PR description
Since commits [1] and [2], the gradient background colors for headers in the mobile version were not applied. This commit resolves the issue. Steps to reproduce: - Open the Website Editor. - Click on the header. - Change the background color of the header and select a custom gradient. - Exit edit mode. - Click on the mobile icon to view the mobile version. - Click the hamburger icon. - Observe that the gradient background is not applied. opw-4329423 [1]: https://github.com/odoo/odoo/commit/2dc3b28e570492b0484d185eb656e74df9c59d68 [2]: https://github.com/odoo/odoo/commit/bc13176de8d66bbdc1c536017b1f046c5fd31a86 Forward-Port-Of: odoo/odoo#190200
Improve loop detection and break. Indeed heavy usage of mailgateway on Odoo servers lead us to face email loops. Those lead to email being disabled on our servers due to email limit, and to other issues (spam, never ending notifications, ...) on hosted servers. Three scenarios are fixed with this PR. See individual commits for more details. Those are * having followers using alias email, and using a mail provider that rewrites msg-id: we cannot detect message duplication and this ma
Original PR description
Improve loop detection and break. Indeed heavy usage of mailgateway on Odoo servers lead us to face email loops. Those lead to email being disabled on our servers due to email limit, and to other…
Improve loop detection and break. Indeed heavy usage of mailgateway on Odoo servers lead us to face email loops. Those lead to email being disabled on our servers due to email limit, and to other issues (spam, never ending notifications, ...) on hosted servers. Three scenarios are fixed with this PR. See individual commits for more details. Those are * having followers using alias email, and using a mail provider that rewrites msg-id: we cannot detect message duplication and this may generate loops. Several mail providers rewrite message IDs and that is a pain for us. We therefore add a custom header allowing to keep message ID in envelope; * replying to bounce may create bounce in loops: this is fixed using the loop detection custom reference; * detect loops on record update in addition to record creation: do not limit loops detection on aliases creating records, also check updated records; Task-3895869 OPW-4051539 OPW-4295745 OPW-4302257 Forward-Port-Of: odoo/odoo#190767 Forward-Port-Of: odoo/odoo#187696
When the user tries to reset the password, a traceback will appear. Steps to reproduce the error: - Install ``auth_signup`` - Configure "Outgoing mail server" - Now Log out - Click on Sign in > Reset Password > Enter your email > Click on ``Reset Password`` twice Traceback: ``` InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block File "odoo/http.py", line 2365, in __call__ response = request._serve_db() File "odoo/htt
Original PR description
When the user tries to reset the password, a traceback will appear. Steps to reproduce the error: - Install ``auth_signup`` - Configure "Outgoing mail server" - Now Log out - Click on Sign in > Reset…
When the user tries to reset the password, a traceback will appear.
Steps to reproduce the error:
- Install ``auth_signup``
- Configure "Outgoing mail server"
- Now Log out
- Click on Sign in > Reset Password > Enter your email >
Click on ``Reset Password`` twice
Traceback:
```
InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
File "odoo/http.py", line 2365, in __call__
response = request._serve_db()
File "odoo/http.py", line 1892, in _serve_db
return self._transactioning(
File "odoo/http.py", line 1955, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 137, in retrying
result = func()
File "odoo/http.py", line 1922, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2082, in dispatch
return self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 331, in _dispatch
result.flatten()
File "odoo/http.py", line 1389, in flatten
self.response.append(self.render())
File "odoo/http.py", line 1381, in render
return request.env["ir.ui.view"]._render_template(self.template, self.qcontext)
File "home/odoo/src/enterprise/18.0/web_studio/models/ir_ui_view.py", line 1315, in _render_template
return super(View, self)._render_template(template, values)
File "odoo/addons/base/models/ir_ui_view.py", line 2185, in _render_template
return self.env['ir.qweb']._render(template, values)
File "odoo/tools/profiler.py", line 306, in _tracked_method_render
return method_render(self, template, values, **options)
File "odoo/addons/base/models/ir_qweb.py", line 597, in _render
template_functions, def_name = irQweb._compile(template)
File "odoo/tools/profiler.py", line 314, in _tracked_compile
return method_compile(self, template)
File "odoo/addons/base/models/ir_qweb.py", line 666, in _compile
return self._load_values(base_key_cache, generate_functions)
File "odoo/addons/base/models/ir_qweb.py", line 2524, in _load_values
return get_value()
File "odoo/addons/base/models/ir_qweb.py", line 635, in generate_functions
code, options, def_name = self._generate_code(template)
File "odoo/addons/base/models/ir_qweb.py", line 691, in _generate_code
element, document, ref = self._get_template(template)
File "odoo/addons/base/models/ir_qweb.py", line 822, in _get_template
doc_or_elem, ref = self._load(ref_alias) or (None, None)
File "odoo/addons/base/models/ir_qweb.py", line 859, in _load
view = IrUIView._get(ref)
File "odoo/addons/base/models/ir_ui_view.py", line 2085, in _get
return self.browse(self._get_view_id(view_ref))
File "odoo/addons/base/models/ir_ui_view.py", line 2073, in _get_view_id
view = self.sudo().search([('key', '=', template)], limit=1)
File "odoo/models.py", line 1717, in search
return self.search_fetch(domain, [], offset=offset, limit=limit, order=order)
File "odoo/models.py", line 1749, in search_fetch
return self._fetch_query(query, fields_to_fetch)
File "odoo/models.py", line 4180, in _fetch_query
fetched = self.browse(query)
File "odoo/models.py", line 6154, in browse
if not ids:
File "odoo/tools/query.py", line 261, in __bool__
return bool(self.get_result_ids())
File "odoo/tools/query.py", line 225, in get_result_ids
self._ids = tuple(id_ for id_, in self._env.execute_query(self.select()))
File "odoo/api.py", line 962, in execute_query
self.cr.execute(query)
File "odoo/sql_db.py", line 354, in execute
res = self._obj.execute(query, params)
```
After this commit, user can not click on ``Reset Password`` button multiple times.
sentry-5661309399
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#184862Previously, when no EDI proxy user existed, in some case when the handle_demo ran, it was erronously deducing that the EDI mode was not demo, while it was. This commit fixes and simplifies the deduction of the EDI mode: We check the company in the env, if there is a related Peppol proxy user we take his mode, else we fallback on the dedicated system parameter. task-no Forward-Port-Of: odoo/odoo#190127 Forward-Port-Of: odoo/odoo#190077
Original PR description
Previously, when no EDI proxy user existed, in some case when the handle_demo ran, it was erronously deducing that the EDI mode was not demo, while it was. This commit fixes and simplifies the deduction of the EDI mode: We check the company in the env, if there is a related Peppol proxy user we take his mode, else we fallback on the dedicated system parameter. task-no Forward-Port-Of: odoo/odoo#190127 Forward-Port-Of: odoo/odoo#190077
It's not useful to keep the ZIP label in the calendar popover of tasks if there is no value to show. task-4221324 version-17.2 Forward-Port-Of: odoo/enterprise#73482
Original PR description
It's not useful to keep the ZIP label in the calendar popover of tasks if there is no value to show. task-4221324 version-17.2 Forward-Port-Of: odoo/enterprise#73482
**Issue:** In dark mode, for current day, half days off are displayed with white background in the Field Service Gantt View for the working part.  **Expected:** In dark mode, worked half days should have same background as entire worked day for current date. **Steps to reproduce:** - Activate Time Off and Field Service apps and activate Dark Mode; - In `Time Off / Management / Time Off` create a n
Original PR description
**Issue:** In dark mode, for current day, half days off are displayed with white background in the Field Service Gantt View for the working part.…
**Issue:** In dark mode, for current day, half days off are displayed with white background in the Field Service Gantt View for the working part.  **Expected:** In dark mode, worked half days should have same background as entire worked day for current date. **Steps to reproduce:** - Activate Time Off and Field Service apps and activate Dark Mode; - In `Time Off / Management / Time Off` create a new half day off time for any employee under contract (e.g. Mitchell Admin) for the current day; - Approve and validate; - Move to `Field Service / Planning / By User`; - Remove all search filters and display using Gantt View by week or by month; - *(opt) Create a new task for the chose user if does not appear*; - Look at the current day cell of the user. **Cause:** No dark theme background color is set to override the light theme. **Fix:** Setup background color for dark theme by overriding hard coded light theme color: https://github.com/odoo/enterprise/blob/7778a8e45502da89e27910efab401d3556d8c7f7/web_gantt/static/src/gantt_view.scss#L21   opw-4368966 Forward-Port-Of: odoo/enterprise#75651
### Steps to reproduce: - Create a subscription product with two or more plans and two or more variants - Go to the product's page on eCommerce - Choose another plan than the default one - Add it to the cart - Notice the default plan is the one added to the cart ### Current behavior before PR: This is happening because if the product has variants the pricing select will get re-rendered before we get the selected plan_id https://github.com/odoo/odoo/blob/17.0/addons/website_sale/sta
Original PR description
### Steps to reproduce: - Create a subscription product with two or more plans and two or more variants - Go to the product's page on eCommerce - Choose another plan than the default one - Add it to the cart - Notice the default plan is the one added to the cart ### Current behavior before PR: This is happening because if the product has variants the pricing select will get re-rendered before we get the selected plan_id https://github.com/odoo/odoo/blob/17.0/addons/website_sale/static/src/js/website_sale.js#L444:L456 so when getting the plan_id after this render of the <select> it will be the default plan. **### Desired behavior after PR is merged:** We are passing the selected plan_id to the call of get_combination_info so when re-render the <select> we will set the one that was selected as the default one. opw-4296527 Forward-Port-Of: odoo/enterprise#75484 Forward-Port-Of: odoo/enterprise#74813
Some users need to make invoices with 100% discount lines. If they try then will receive this UCFE error that does not let us to validate the invoice in DGI . > ERROR: CODE 31: Error: El contenido del elemento 'Item' en espacio de nombres 'http://cfe.dgi.gub.uy' está incompleto. Lista esperada de elementos posibles: 'SubDescuento, RecargoPct, RecargoMnt, SubRecargo, RetencPercep, MontoItem' en espacio de nombres 'http://cfe.dgi.gub.uy'. In order to make it work we need to adapt the module
Original PR description
Some users need to make invoices with 100% discount lines. If they try then will receive this UCFE error that does not let us to validate the invoice in DGI . > ERROR: CODE 31: Error: El contenido…
Some users need to make invoices with 100% discount lines. If they try then will receive this UCFE error that does not let us to validate the invoice in DGI . > ERROR: CODE 31: Error: El contenido del elemento 'Item' en espacio de nombres 'http://cfe.dgi.gub.uy' está incompleto. Lista esperada de elementos posibles: 'SubDescuento, RecargoPct, RecargoMnt, SubRecargo, RetencPercep, MontoItem' en espacio de nombres 'http://cfe.dgi.gub.uy'. In order to make it work we need to adapt the module to accept this kind of lines that actually represent an "Entrega Gratuita" (Indicator 5 in Uruguay) - We check if the line is a 100% discount, if it is then we marked as Entrega Gratuita when we are creating XML (Indicator 5) - Now that we can have lines and also invoices with total value 0.0 we need to adapt our XML because if value 0.0 then some tags were not added to the final XML - it was interpreted as False and the result was and invalid XML becasue we were missing a mandatory tag. Now we can tags that have 0.0 value to the final XML. - Now that we can have lines 0.0 total amount, and also invoices 0.0 total amount, if we are using foreign currency then we need to avoid error computing the currency rate (division by zero). Now we detect this cases and use the date rate. Also, the rate is only been computed when actually we are going to use it. LATAM 1296 / ADHOC Ticket 83295 Forward-Port-Of: odoo/enterprise#73956
Reproduce --- - install db in es_ES lang - -i room,website - open Meeting Rooms -> Rooms -> URL - BUG: some strings aren't translated opw-4292414 Forward-Port-Of: odoo/enterprise#74750
Original PR description
Reproduce --- - install db in es_ES lang - -i room,website - open Meeting Rooms -> Rooms -> URL - BUG: some strings aren't translated opw-4292414 Forward-Port-Of: odoo/enterprise#74750
### Steps to reproduce: - Activate developer mode - Install the 'l10n_ec' module and switch to an Ecuadorian company - In Settings > Technical > Database Structure > Decimal Accuracy change the number of decimals for "Product Price" to 4 for example - In Accounting, create a new Customer Invoice - Select 'Instituto Ecuatoriano' as Customer - Add a line with a price with 4 decimals - Select 'Sin utilization del sistema financiero' as Payment Method - Confirm - On the blue popup at the to
Original PR description
### Steps to reproduce: - Activate developer mode - Install the 'l10n_ec' module and switch to an Ecuadorian company - In Settings > Technical > Database Structure > Decimal Accuracy change the…
### Steps to reproduce: - Activate developer mode - Install the 'l10n_ec' module and switch to an Ecuadorian company - In Settings > Technical > Database Structure > Decimal Accuracy change the number of decimals for "Product Price" to 4 for example - In Accounting, create a new Customer Invoice - Select 'Instituto Ecuatoriano' as Customer - Add a line with a price with 4 decimals - Select 'Sin utilization del sistema financiero' as Payment Method - Confirm - On the blue popup at the top of the page, click 'process now' to get the XML in the chatter - In the XML the "precioUnitario" field only has 2 precision digits, it has been rounded - When adding a discount of 100% this field has all precision digits needed ### Cause: The price_unit is calculated differently if the discount is 100%. The "precioUnitario" field should always have the number of precision digits specified in the settings. ### Solution: We need to find the unit price without the discount, but without the included. This value is not computed. As the values computed in the account.move.line are already rounded based on the currency (2 digits) we need to recompute the values using `compute_all` and multiplying by the `price_digits` to not round in `compute_all`. The way the rounding is made here is by taking the decimal precision from the settings and making it a power of 10 in `price_digits` (4 decimals results in price_digits = 10000). Then we compute the taxes with `price_unit * price_digits`. As, per definition, `price_unit` has the number of digits used in the calculation of `price_digits`, we end up with an integer. But after the results of `compute_all` may no longer be an integer. We need an integer to keep the decimal precision. This is why, in the result, there is a call to `round()`. The call to `float_round()` is to make sure there are not more decimals than 6. This is needed as the number displayed in the XML will always be of 6 decimals, so if the client set a number of decimals greater than 6, it will be rounded in the XML but not on the invoice. To ensure that both values are the same, we round the value here. Some tests had "precioUnitario" with strange values that did not match the actual price_unit. It was because the precedent way to calculate this field was not perfect, I guess. opw-4120341 Forward-Port-Of: odoo/enterprise#75152 Forward-Port-Of: odoo/enterprise#68555
This fix is to avoid the an error that occurs when a country does not have the VAT information set. Before this fix, when that situation happened the method get_vat_country returned False as those fields values and therefore the XML could not be processed since it was expected an integer and it got a boolean. After this fix, if a country does not have VAT information, the field will be process as 0 and the XML will be created, so the invoice will be confirmed. We already had this approach in t
Original PR description
This fix is to avoid the an error that occurs when a country does not have the VAT information set. Before this fix, when that situation happened the method get_vat_country returned False as those…
This fix is to avoid the an error that occurs when a country does not have the VAT information set. Before this fix, when that situation happened the method get_vat_country returned False as those fields values and therefore the XML could not be processed since it was expected an integer and it got a boolean. After this fix, if a country does not have VAT information, the field will be process as 0 and the XML will be created, so the invoice will be confirmed. We already had this approach in the past, inside the method wsfex_get_cae_request, but it was lost in a refactor made on the module. So what I did was just to recover that approach. https://github.com/odoo/enterprise/commit/33ea78a5bb34e657c16bcbb704eeb71897ae642d#diff-2459e118c605cf039bb94c62561285ad753b6a27c571f10a25547ee9b01aa318L741. Steps to reproduce the error: - Create a test contact based on Uruguay. - Go to Contacts/Configuration/Localization/Countries and delete all VAT information from Uruguay (Natural Person VAT, Legal Entity VAT, Other VAT) . - Create an invoice for the test client created before, add a product and all needed fields and try to confirm the invoice. - An error will pop up, saying that the server was unable to read request because of an error in the XML document. Forward-Port-Of: odoo/enterprise#75501
### Issue: With commit odoo/enterprise@8a3e03841ac6e609a9fe882c10e547bd039d7fcc, changes were made in `_get_post_fix_tax_amounts_map` to cover more cases and fix cases that broke because of it. In 17.2, with similar code to the fix having no rounding, the tax and base amount are not rounded. This resulted in an issue for cases with multiple taxes, see test case in 18.0: `8% tax` with an amount of `1.196` and `16% tax` with an amount of `1.677`. Addition of both tax amounts is `2.873`, rou
Original PR description
### Issue: With commit odoo/enterprise@8a3e03841ac6e609a9fe882c10e547bd039d7fcc, changes were made in `_get_post_fix_tax_amounts_map` to cover more cases and fix cases that broke because of it. In…
### Issue: With commit odoo/enterprise@8a3e03841ac6e609a9fe882c10e547bd039d7fcc, changes were made in `_get_post_fix_tax_amounts_map` to cover more cases and fix cases that broke because of it. In 17.2, with similar code to the fix having no rounding, the tax and base amount are not rounded. This resulted in an issue for cases with multiple taxes, see test case in 18.0: `8% tax` with an amount of `1.196` and `16% tax` with an amount of `1.677`. Addition of both tax amounts is `2.873`, rounded to `2.87`, but amounts are rounded separately to `1.20` and `1.68`, the sum of which is `2.88`. In 17.0, where base and tax are rounded before being returned, there is no issue with multiple taxes. ### Fix: In the same commit, total calculation was moved to the end of `_get_global_invoice_cfdi_values`, using subtotal and taxes totals after they were calculated. This allows for the calculation of `TotalImpuestosTrasladados` using rounded tax groups totals. opw-4050778 Forward-Port-Of: odoo/enterprise#75370