From 42859bed9c8832db5774d88ca241fecf24eb0ea0 Mon Sep 17 00:00:00 2001 From: arsi Date: Wed, 23 Nov 2022 15:02:27 +0000 Subject: [PATCH] [FIX] account_taxcloud: change display_type filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traceback when computing taxes using TaxCloud. Steps to reproduce: -Activate TaxCloud in accounting settings, with valids "API ID" and "API KEY". -Create an invoice for a USA customer with an invoice line and "Fiscal Position" set to "Automatic Tax Mapping (TaxCloud)" (in the "Other Info" tab). -Confirm -->Traceback Traceback: File "/src/enterprise/16.0/account_taxcloud/models/taxcloud_request.py", line 136, in get_all_taxes_values for item in response.CartItemsResponse.CartItemResponse: AttributeError: 'NoneType' object has no attribute 'CartItemResponse Explanation: -There's a traceback when CartItem is empty (like if there are no move lines). -It is empty because of the filter in the function '_process_lines(self, lines)'. --> 'lines.filtered(lambda l: not l.display_type)'. -The goal is to take only move lines that are not Notes or Sections. -This worked in v15 because display_type was defined as: display_type = fields.Selection([ ('line_section', 'Section'), ('line_note', 'Note'), ], default=False, help="Technical field for UX purpose.") -But now in v16 it is defined as: display_type = fields.Selection( selection=[ ('product', 'Product'), ('cogs', 'Cost of Goods Sold'), ('tax', 'Tax'), ('rounding', "Rounding"), ('payment_term', 'Payment Term'), ('line_section', 'Section'), ('line_note', 'Note'), ('epd', 'Early Payment Discount'), ], compute='_compute_display_type', store=True, readonly=False, precompute=True, required=True, ) -The display_type=False does not corresponds anymore to move lines that are not Sections or Notes, but it corresponds to no move lines at all. The fix: Will filter move lines that are not of type 'line_section' or 'line_note'. Discussion: Do I fix the traceback that we get when there a no move lines? This 'issue' is present since at least v14 and it seems like nobody ever complained. +: I've applied the similar change to some lines in the code that also check if 'display_type' is False for some 'account.move.line' records. ++: The fix revealed an other issue in the function '_inter_company_create_invoices' of the file enterprise/account_inter_company_rules/models/account_move.py: There's a call on a function that doesn't exist anymore 'line._set_price_and_tax_after_fpos()'. I've deleted the line. opw-3064174 closes odoo/odoo#106452 X-original-commit: 8bfca5832adaf9e147f2443d0bf56cf921f9ff0c Related: odoo/enterprise#34352 Signed-off-by: William André (wan) --- addons/l10n_id_efaktur/models/account_move.py | 2 +- addons/l10n_ph/wizard/generate_2307_wizard.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_id_efaktur/models/account_move.py b/addons/l10n_id_efaktur/models/account_move.py index 0523e4585b4..c88f972d5c2 100644 --- a/addons/l10n_id_efaktur/models/account_move.py +++ b/addons/l10n_id_efaktur/models/account_move.py @@ -178,7 +178,7 @@ class AccountMove(models.Model): eTax['REFERENSI'] = number_ref eTax['KODE_DOKUMEN_PENDUKUNG'] = '0' - lines = move.line_ids.filtered(lambda x: x.move_id._is_downpayment() and x.price_unit < 0 and not x.display_type) + lines = move.line_ids.filtered(lambda x: x.move_id._is_downpayment() and x.price_unit < 0 and x.display_type == 'product') eTax['FG_UANG_MUKA'] = 0 eTax['UANG_MUKA_DPP'] = int(abs(sum(lines.mapped(lambda l: float_round(l.price_subtotal, 0))))) eTax['UANG_MUKA_PPN'] = int(abs(sum(lines.mapped(lambda l: float_round(l.price_total - l.price_subtotal, 0))))) diff --git a/addons/l10n_ph/wizard/generate_2307_wizard.py b/addons/l10n_ph/wizard/generate_2307_wizard.py index f76e97e4200..264ec0bf86d 100644 --- a/addons/l10n_ph/wizard/generate_2307_wizard.py +++ b/addons/l10n_ph/wizard/generate_2307_wizard.py @@ -55,7 +55,7 @@ class Generate2307Wizard(models.TransientModel): 'last_name': partner.last_name or '', 'address': ', '.join([val for val in partner_address_info if val]) } - for invoice_line in move.invoice_line_ids.filtered(lambda l: not l.display_type): + for invoice_line in move.invoice_line_ids.filtered(lambda l: l.display_type not in ('line_note', 'line_section')): for tax in invoice_line.tax_ids.filtered(lambda x: x.l10n_ph_atc): values['product_name'] = re.sub(r'[\(\)]', '', invoice_line.product_id.name) values['atc'] = tax.l10n_ph_atc