Friday, November 15, 2024
24 changes · saas-17.4
Miscellaneous changes
Product images are lazy-loaded on the cart page, causing them to be displayed later than the rest of the page. As a result, some parts of the page were shifted once the image was loaded (since the image had no size before loading). This change wraps the image in a fixed-size container to avoid the layout shift. Incidentally, this change also fixes some alignment issues when the cart contains images with various aspect ratios. opw-4029017 Forward-Port-Of: odoo/odoo#187297
Original PR description
Product images are lazy-loaded on the cart page, causing them to be displayed later than the rest of the page. As a result, some parts of the page were shifted once the image was loaded (since the image had no size before loading). This change wraps the image in a fixed-size container to avoid the layout shift. Incidentally, this change also fixes some alignment issues when the cart contains images with various aspect ratios. opw-4029017 Forward-Port-Of: odoo/odoo#187297
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#186913 Forward-Port-Of: odoo/odoo#186755
Original PR description
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#186913 Forward-Port-Of: odoo/odoo#186755
When we try to print multiple invoice who have multiple pages and have H2 title in the comments, the system treats the document as separate files, resulting in error: `AttributeError: 'NoneType' object has no attribute 'getValue'`. Steps to reproduce: - Create an invoice without any attachment. - Create another invoice, ensuring that its printout spans multiple pages, and add an H2 title in the comments (narration). - In the list view, attempt to print both invoices. - Ensure that the r
Original PR description
When we try to print multiple invoice who have multiple pages and have H2 title in the comments, the system treats the document as separate files, resulting in error: `AttributeError: 'NoneType' object has no attribute 'getValue'`. Steps to reproduce: - Create an invoice without any attachment. - Create another invoice, ensuring that its printout spans multiple pages, and add an H2 title in the comments (narration). - In the list view, attempt to print both invoices. - Ensure that the report being printed contains a value in the "Save as attachment prefix" field. The issue arises because the presence of multiple H2 headings causes the system to treat the document as separate files. Consequently, the condition `if has_same_number_of_outlines and has_top_level_heading:` is not satisfied, which results in a stream to be None. opw-4247013 Forward-Port-Of: odoo/odoo#183881
To reproduce: Go to Accounting/Invoicing, Customers and create a new Customer. Delete it. You get an error talking about audit trail while you don't have it activated. The issue is that we block based on customer/supplier rank when there is no company on the partner. We now check if we should block the deletion of a message of a partner if this partner has at least one journal entry with a company that has audit trail activated. --- I confirm I have signed the CLA and read the
Original PR description
To reproduce: Go to Accounting/Invoicing, Customers and create a new Customer. Delete it. You get an error talking about audit trail while you don't have it activated. The issue is that we block based on customer/supplier rank when there is no company on the partner. We now check if we should block the deletion of a message of a partner if this partner has at least one journal entry with a company that has audit trail activated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#181891
The issue: When a manufacturing order has a quantity to produce whose decimal accuracy has several digits, in Done status, the fields qty_producing and product_qty overlap. How to reproduce the issue: -Enable debug mode -navigate to Settings > Technical > Database Structure > Decimal Accuracy: Select Stock Weight and set '8' to Digits -Create a product whose UOM is g, add a weight in Logistics and select manufacturing in Routes -Create a Manufacturing Order, select the product, confirm the
Original PR description
The issue: When a manufacturing order has a quantity to produce whose decimal accuracy has several digits, in Done status, the fields qty_producing and product_qty overlap. How to reproduce the issue: -Enable debug mode -navigate to Settings > Technical > Database Structure > Decimal Accuracy: Select Stock Weight and set '8' to Digits -Create a product whose UOM is g, add a weight in Logistics and select manufacturing in Routes -Create a Manufacturing Order, select the product, confirm the Mo, and click on Produce all opw-4237620 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183072
Steps to reproduce the issue: ============================= - Set the company of the website to one that uses (euro) currency. - Open the website editor - Drag a banner block and a products carousel block under it - Set the last template to the products block (last one in the list) - Try to edit the title of the banner block - One of two keystrokes are reverted Origin of the issue: ==================== When we added content, we do historyStep which calls sanitize on the target (the
Original PR description
Steps to reproduce the issue: ============================= - Set the company of the website to one that uses (euro) currency. - Open the website editor - Drag a banner block and a products carousel block under it - Set the last template to the products block (last one in the list) - Try to edit the title of the banner block - One of two keystrokes are reverted Origin of the issue: ==================== When we added content, we do historyStep which calls sanitize on the target (the editable), which will sanitize the non editable elements inside it and have `oe_unremovable`. observerApply now will mark this._toRollback as true so in the next keystroke it will revert the changes and so on... Solution: ========= We should not unwrap content for `oe_currency_value` spans opw-4252743 Forward-Port-Of: odoo/odoo#185995
Steps to reproduce: - Enable Analytic Accounting and Anglo-Saxon Accounting in the settings - Create a storable product - Set inventory valuation to Automated on the product's category - Add a cost to the product - Create an invoice with the product and add an analytic distribution - When the invoice is confirmed, the distribution is also applied to the CoGS line. For example, in an invoice where the product’s sale price equals its cost, the account plan will show a balance
Original PR description
Steps to reproduce:
- Enable Analytic Accounting and Anglo-Saxon Accounting in the settings
- Create a storable product
- Set inventory valuation to Automated on the product's category
- Add a cost to the product
- Create an invoice with the product and add an analytic distribution
- When the invoice is confirmed, the distribution is also applied to the CoGS line.
For example, in an invoice where the product’s sale price equals its cost, the account plan will show a balance of 0 (debit = credit).
After this fix, the account plan will show a balance of 10.
Task 2008567 led to the commit https://github.com/odoo/odoo/commit/3590efa47849be09e694e7755ec640f41cb14313, which removed the analytic distribution from the stock interim account. However, the expense line was not modified accordingly.
opw-4177695
Forward-Port-Of: odoo/odoo#183066### Steps to reproduce: - Install "l10n_ch" and switch to the Swiss company - In the Accounting settings activate the QRcodes on invoices - Change the name of the Swiss company - Create an invoice - The old company name is still displayed next to the QR code ### Cause: The field displayed is the field `account_holder_name` which is not updated when changing the company name. Solution: As the field `account_holder_name` is not supposed to be shown anymore in 18.0, we can display dire
Original PR description
### Steps to reproduce: - Install "l10n_ch" and switch to the Swiss company - In the Accounting settings activate the QRcodes on invoices - Change the name of the Swiss company - Create an invoice - The old company name is still displayed next to the QR code ### Cause: The field displayed is the field `account_holder_name` which is not updated when changing the company name. Solution: As the field `account_holder_name` is not supposed to be shown anymore in 18.0, we can display directly the partner name. opw-4273688 Forward-Port-Of: odoo/odoo#186479
Description of the issue/feature this PR addresses: Updated the code to make sure that the context object includes the current context. This change makes it easier to use all the relevant context-specific info in the process. Current behavior before PR: Currently, it only adds the warehouse information to the context variable. Desired behavior after PR is merged: The context object will include the warehouse information and the current context, ensuring that all necessary context
Original PR description
Description of the issue/feature this PR addresses: Updated the code to make sure that the context object includes the current context. This change makes it easier to use all the relevant context-specific info in the process. Current behavior before PR: Currently, it only adds the warehouse information to the context variable. Desired behavior after PR is merged: The context object will include the warehouse information and the current context, ensuring that all necessary context data is properly included when making the call. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186990 Forward-Port-Of: odoo/odoo#178546
Some users are using custom domains in their loyalty programs. This include using fields that are not loaded in the PoS. This will fix the specific usecase of one client. But this could be improved and fields should be loaded dynamically based on the needed fields. opw-4262960 Forward-Port-Of: odoo/odoo#186840 Forward-Port-Of: odoo/odoo#186804
Original PR description
Some users are using custom domains in their loyalty programs. This include using fields that are not loaded in the PoS. This will fix the specific usecase of one client. But this could be improved and fields should be loaded dynamically based on the needed fields. opw-4262960 Forward-Port-Of: odoo/odoo#186840 Forward-Port-Of: odoo/odoo#186804
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186968
Original PR description
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186968
Steps: - Create a dynamic attribute with some attribute Lines - Create a product with attributes set to the new attribute - Change cost price and save - Reload the webpage Issue: - Cost price changes back to 0 Cause: - `_compute_template_field_from_variant_field` is called on `_compute_standard_price` which sets the value of field to default (false) for variant_count=0 Fix: - Cost price will be invisible for variant_count=0 (only on saved records, to allow products with non-dynam
Original PR description
Steps: - Create a dynamic attribute with some attribute Lines - Create a product with attributes set to the new attribute - Change cost price and save - Reload the webpage Issue: - Cost price changes back to 0 Cause: - `_compute_template_field_from_variant_field` is called on `_compute_standard_price` which sets the value of field to default (false) for variant_count=0 Fix: - Cost price will be invisible for variant_count=0 (only on saved records, to allow products with non-dynamic attributes to still be configured directly on creation). opw-4054647 Forward-Port-Of: odoo/odoo#181836
When reversing a move of type 'in/out refund', we create a move of type 'entry' instead of 'in/out invoice' opw-4247643 Forward-Port-Of: odoo/odoo#184909
Original PR description
When reversing a move of type 'in/out refund', we create a move of type 'entry' instead of 'in/out invoice' opw-4247643 Forward-Port-Of: odoo/odoo#184909
When a user visits a product page, the product gets marked as "recently viewed" after 8 seconds. This delay is too long, as a user can realistically view the product and navigate away before the 8 seconds have passed (in which case the product isn't marked as recently viewed). In particular, this is problematic when the website contains a "recently viewed products" carousel, where the user expects to see all products they recently viewed (even if they didn't stay on the product page f
Original PR description
When a user visits a product page, the product gets marked as "recently viewed" after 8 seconds. This delay is too long, as a user can realistically view the product and navigate away before the 8 seconds have passed (in which case the product isn't marked as recently viewed). In particular, this is problematic when the website contains a "recently viewed products" carousel, where the user expects to see all products they recently viewed (even if they didn't stay on the product page for 8 seconds). We decided to reduce the delay to 0.5 seconds, which is long enough to prevent the product from being marked as "recently viewed" if the user visits a product page by mistake and immediately navigates away, but short enough to prevent problematic behaviors such as the one mentioned above. opw-4114364 Forward-Port-Of: odoo/odoo#187025
We only need to shown MX EDI fields for move/invoices related to a company where fiscal country is Mexico, hide it for other companies. Forward-Port-Of: odoo/enterprise#73848 Forward-Port-Of: odoo/enterprise#73623
Original PR description
We only need to shown MX EDI fields for move/invoices related to a company where fiscal country is Mexico, hide it for other companies. Forward-Port-Of: odoo/enterprise#73848 Forward-Port-Of: odoo/enterprise#73623
### Steps to reproduce: - Create a delivery order for 5 units of a product - Scan 1 unit and click on the pencil icon to edit the record further - On the digipad access the backend (for instance by clicking the external link arrow next to the location). - Come back to the record #### > The line now displayed a 1/1 but does not records what remains: 0/4. ### Cause of the Issue: Setting a quantity of 1 on the move line will trigger a write call on the related stock move line to update
Original PR description
### Steps to reproduce: - Create a delivery order for 5 units of a product - Scan 1 unit and click on the pencil icon to edit the record further - On the digipad access the backend (for instance by…
### Steps to reproduce: - Create a delivery order for 5 units of a product - Scan 1 unit and click on the pencil icon to edit the record further - On the digipad access the backend (for instance by clicking the external link arrow next to the location). - Come back to the record #### > The line now displayed a 1/1 but does not records what remains: 0/4. ### Cause of the Issue: Setting a quantity of 1 on the move line will trigger a write call on the related stock move line to update its quantity. However, when you leave the barcode, even thought it will save these change, it will not split the move in 2 for the barcode app to be able to rely on the backend data to generate a correct sate of the record. Threfore, when you come back to the record, the main component will be regenerated from the backend values of the `get_barcode_data`: https://github.com/odoo/enterprise/blob/7b28f4bbd3c20559e529c3134e5b65b089b78806/stock_barcode/static/src/components/main.js#L76-L80 And will onlydisplay the "1/1" line that was reported fromt he back end. ### Fix: The `split_uncompleted_moves` method taking care of splitting the moves for barcode data compatibility: https://github.com/odoo/enterprise/blob/7b28f4bbd3c20559e529c3134e5b65b089b78806/stock_barcode/models/stock_move.py#L9-L11 is already called when you exit the barcode via the exit button: https://github.com/odoo/enterprise/blob/7b28f4bbd3c20559e529c3134e5b65b089b78806/stock_barcode/static/src/components/main.js#L228-L231 https://github.com/odoo/enterprise/blob/7b28f4bbd3c20559e529c3134e5b65b089b78806/stock_barcode/static/src/models/barcode_picking_model.js#L762-L765 These were added by commit 2eb6465e4f18c701efdf28ea4b8f95f3119d3db8 However, it should IMO be called every time you leave the app that is just before destroying the component. Furthermore, note that it will only split the moves if a save happend (which is the expacted behavior). opw-4232106 --- Forward-Port-Of: odoo/enterprise#73450 Forward-Port-Of: odoo/enterprise#72453
**Description of the issue/feature this PR addresses**: Argentinean Localization: Electronic customer invoice Factura B for a customer "Consumidor Final" without country, with "DNI" identification type, with vat and "Consumidor final" afip responsibility type must report to afip the customer vat when the invoice has an amount higher than $344487 is validated but because the vat is not reported to afip then it is not allowed to validate the invoice. The bug was introduced on this pr: https:
Original PR description
**Description of the issue/feature this PR addresses**: Argentinean Localization: Electronic customer invoice Factura B for a customer "Consumidor Final" without country, with "DNI" identification…
**Description of the issue/feature this PR addresses**: Argentinean Localization: Electronic customer invoice Factura B for a customer "Consumidor Final" without country, with "DNI" identification type, with vat and "Consumidor final" afip responsibility type must report to afip the customer vat when the invoice has an amount higher than $344487 is validated but because the vat is not reported to afip then it is not allowed to validate the invoice. The bug was introduced on this pr: https://github.com/odoo/enterprise/pull/71562 --> The goal of this pr was to be able to create Factura B for a foreign customer. But prior to this pr the user was allowed to validate an invoice Factura B to a customer "Consumidor Final" without a country set on that customer, with "DNI" identification type, with a vat and "Consumidor final" afip responsibility type when the invoice has an amount higher than $344487 **Video explaining the bug**: https://drive.google.com/file/d/1Qb2oUtT26twjCI-pB6oMGMC9gZ6_EBSz/view **Steps to reproduce**: 1) Log ing with admin user on runbot odoo enterprise 16 or 17 instance, activate developer mode and install l10n_ar_edi module. 2) Take position on company "Responsable Inscripto". 3) Create an electronic invoice "Factura B" for customer "Consumidor Final Anónimo" with an invoice line with quantity 1 and price 500000. Select electronic journal. The Partner doesn`t have country and has "dni" identification type, dni and "Consumidor final" afip responsibility type.   4) Validate the invoice and then you will receive this message:  **Current behavior before PR**: It is not allowed to validate Electronic customer invoice Factura B for a customer "Consumidor Final" without country, with "DNI" identification type, with vat and "Consumidor final" afip responsibility type when the invoice has an amount higher than $344487. **Desired behavior after PR is merged**: It is allowed to validate Electronic customer invoice Factura B for a customer "Consumidor Final" without country, with "DNI" identification type, with vat and "Consumidor final" afip responsibility type when the invoice has an amount higher than $344487. Ticket Adhoc side: 82498 Task latam side: 1283 Forward-Port-Of: odoo/enterprise#73200
1. Set up Avatax on the current company 2. In Settings > Sales > Quotations& Orders active 'Lock Confirmed Sales' 3. Create a SO with fiscal position 'Automatic Tax Mapping (AvaTax)' 4. Add a partner and product having avatax category defined 5. Compute taxes 6. Confirm order, it will be automatically locked 7. Click "Send by Email" Issue: Action will be blocked by User Error ``` It is forbidden to modify the following fields in a locked order ``` This occurs because when sending
Original PR description
1. Set up Avatax on the current company 2. In Settings > Sales > Quotations& Orders active 'Lock Confirmed Sales' 3. Create a SO with fiscal position 'Automatic Tax Mapping (AvaTax)' 4. Add a partner and product having avatax category defined 5. Compute taxes 6. Confirm order, it will be automatically locked 7. Click "Send by Email" Issue: Action will be blocked by User Error ``` It is forbidden to modify the following fields in a locked order ``` This occurs because when sending by email we recompute external taxes, but it should not be the case for locked orders It also occurs on the web shop when finalizing the payment opw-4261396 Forward-Port-Of: odoo/enterprise#73505
[FIX] documents{_sign}: fix access error applying sign action How to reproduce: - Install documents_sign and log as admin - In documents, create an action (Workspace: Finance, Create: PDF to Sign) - Then upload a pdf in the workspace Finance - Log as Marc Demo - In documents, select the PDF uploaded as admin - Click on the action created You get the error: "Sorry, you are not allowed to access this document." while the expected behavior is that users who have access to the document a
Original PR description
[FIX] documents{_sign}: fix access error applying sign action How to reproduce: - Install documents_sign and log as admin - In documents, create an action (Workspace: Finance, Create: PDF to Sign) -…
[FIX] documents{_sign}: fix access error applying sign action
How to reproduce:
- Install documents_sign and log as admin
- In documents, create an action (Workspace: Finance, Create: PDF to Sign)
- Then upload a pdf in the workspace Finance
- Log as Marc Demo
- In documents, select the PDF uploaded as admin
- Click on the action created
You get the error: "Sorry, you are not allowed to access this document." while the expected behavior is that users who have access to the document and to Sign should be able to use the action. We solve that in this commit.
We also add a test checking that applying an action to sign a pdf document not owned by the user that perform the action, doesn't duplicate the attachment if the attachment is owned by the document (res_id and res_model pointing to the document; the ownership is transferred to the sign.template created) and duplicate it otherwise.
Technical note: the error was caused by the trick used in the override of sign_template.create in documents_sign which was setting the res_model to False and res_id to 0 for attachment linked to document to allow the super method to link that attachment to the created sign_template (by releasing the ownership of the attachment from the document). But as ir_attachment prevents to link an attachment with res_id = 0 to a record if it is not done by the owner of that
attachment, there was an error. We remove that tricks by defining a method that determine if sign_template can take the ownership of the attachment or not which we override in document_sign and make it return True when the attachment is owned by a document.
Task-4000988
Forward-Port-Of: odoo/enterprise#73338
Forward-Port-Of: odoo/enterprise#65206Context: Every Behavior in Knowledge was a new App based on the config of the main Odoo App. Among shared resources are registries and services. In particular, the `main_components` registry is used to mount components, and, for the purpose of the following example that registry is used by the `popover_service`. Another thing to note is that the template compilation involves a reference to the App, and all ComponentNode have an app property which is the app that was used to compile i
Original PR description
Context: Every Behavior in Knowledge was a new App based on the config of the main Odoo App. Among shared resources are registries and services. In particular, the `main_components` registry is used…
Context: Every Behavior in Knowledge was a new App based on the config of the main Odoo App. Among shared resources are registries and services. In particular, the `main_components` registry is used to mount components, and, for the purpose of the following example that registry is used by the `popover_service`. Another thing to note is that the template compilation involves a reference to the App, and all ComponentNode have an app property which is the app that was used to compile its template. Issue: Now all pieces together in a problematic example case: Creating a new popover from a Behavior App involves the `main_components` registry: - Create a PopoverController (position logic (wrapper)). It is created within the main App through the registry, and its lifecycle is managed by the main App Scheduler. - Fill it with a Custom Component (business logic). It is created within the Embedded Component App, and its lifecycle is managed by the Embedded Component App Scheduler. Both schedulers lifecycle handling are not synchronized, and at some indeterministic point one of the Apps will crash during the manipulation of that popover. Solution: Use the new "subroots" OWL feature instead of using sub-apps, so that all templates are created from the same App, and the scheduler is the same for all components. This also has the advantage of not having to re-compile all templates for every Behavior. task-4300215 Forward-Port-Of: odoo/enterprise#73775 Forward-Port-Of: odoo/enterprise#73224
Before this commit, the buttons "Add By-Product" and "Validate" are both visible when the user is in a by-product move line form view from the Barcode app. This should not happen. Forward-Port-Of: odoo/enterprise#73242
Original PR description
Before this commit, the buttons "Add By-Product" and "Validate" are both visible when the user is in a by-product move line form view from the Barcode app. This should not happen. Forward-Port-Of: odoo/enterprise#73242
### Steps to reproduce: - Set a main currency and a second one. - Upload a document in the expense module for the second currency - Refresh ### Cause: In the for loop there are more than one possible currency detected so `vals['currency_id']` does not exist but the if statement tries to read this value causing an error. ### Solution: Check if the currency_id is in the vals dictionary. If not, the default currency value will be in the Expense. opw-4307845 Forward-Port-Of: odoo/ente
Original PR description
### Steps to reproduce: - Set a main currency and a second one. - Upload a document in the expense module for the second currency - Refresh ### Cause: In the for loop there are more than one possible currency detected so `vals['currency_id']` does not exist but the if statement tries to read this value causing an error. ### Solution: Check if the currency_id is in the vals dictionary. If not, the default currency value will be in the Expense. opw-4307845 Forward-Port-Of: odoo/enterprise#73660
**Steps to reproduce:** - Install l10n_mx_reports - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to "Accounting / Configuration / Accounting / Chart of Accounts" - Create an account: * Account Name: [any] * Code: 123456789 * Type: Bank and Cash - Go to "Accounting / Reporting / Audit Reports / Trial Balance" - Download "COA SAT (XML)" - Validate the XML on an online SAT document validator (e.g. https://ceportalvalidacionprod.clouda.sat.gob.mx) **Issue:** The
Original PR description
**Steps to reproduce:** - Install l10n_mx_reports - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to "Accounting / Configuration / Accounting / Chart of Accounts" - Create an account:…
**Steps to reproduce:** - Install l10n_mx_reports - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to "Accounting / Configuration / Accounting / Chart of Accounts" - Create an account: * Account Name: [any] * Code: 123456789 * Type: Bank and Cash - Go to "Accounting / Reporting / Audit Reports / Trial Balance" - Download "COA SAT (XML)" - Validate the XML on an online SAT document validator (e.g. https://ceportalvalidacionprod.clouda.sat.gob.mx) **Issue:** The validation fails because the XML contains lines with incorrect or missing value for "CodAgrup" attribute. **Cause:** The "CodAgrup" in the "COA SAT (XML)" refers to the code of the account groups. The accepted values are defined in the "Catálogo de Códigos Agrupadores" XSD file. https://github.com/odoo/enterprise/blob/ecce698637dc2ef13dfdb27dfde303a7f1191aaf/l10n_mx_xml_polizas/data/xsd/1.3/CatalogosParaEsqContE.xsd#L4-L1086 The created account [123456789] is put in the root account group with code "1" and a line is added in the "COA SAT (XML)" with this value. However, it is not an accepted value. **Solution:** From the account groups created automatically by MX localization, only the root account groups (i.e. with code "1", "2", "3",...) do not have a valid code for the "COA SAT (XML)". These ones can be ignored. This solution is not perfect as it is still possible to create an account group with an invalid code that is not a root account group. However, handling this use case would require to check that each code is included in the set of valid codes (there is more than a thousand). opw-4209089 Forward-Port-Of: odoo/enterprise#73647
Before, we relied on just _l10n_br_get_error_from_response() which checks for the presence of an "error" key in the response. Unfortunately that only seems to catch errors directly raised by Avalara. The government can reject the cancellation for a myriad of reasons [1]. We could hardcode all successful status codes (24 codes), but to be more robust in case the codes change we just look if any XML is returned. The lack of XML response should reliably indicate that the cancellation failed. [1
Original PR description
Before, we relied on just _l10n_br_get_error_from_response() which checks for the presence of an "error" key in the response. Unfortunately that only seems to catch errors directly raised by Avalara. The government can reject the cancellation for a myriad of reasons [1]. We could hardcode all successful status codes (24 codes), but to be more robust in case the codes change we just look if any XML is returned. The lack of XML response should reliably indicate that the cancellation failed. [1] 4.4. Lista das Regras de Validação in https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=J%20I%20v4eN00E= Forward-Port-Of: odoo/enterprise#73342