diff --git a/l10n_br_account/models/account_move.py b/l10n_br_account/models/account_move.py index b294fd438d6d..7871962a6342 100644 --- a/l10n_br_account/models/account_move.py +++ b/l10n_br_account/models/account_move.py @@ -357,6 +357,22 @@ def _compute_needed_terms(self): amount_currency = ( invoice.amount_total - invoice.amount_ipi_value ) * sign + + # Embora seja improvável que haja um caso real disso, + # estou convertendo os valores para a moeda da empresa, + # caso seja diferente da moeda da fatura, para manter a + # consistência. Os montantes brasileiros acima estão na + # moeda da fatura. Assim, o amount_currency fica na moeda + # da empresa, conforme o comportamento nativo. + amount_currency = invoice.currency_id._convert( + from_amount=amount_currency, + to_currency=invoice.company_currency_id, + company=invoice.company_id, + date=invoice.invoice_date or invoice.date, + ) + amount_currency = invoice.company_id.currency_id.round( + amount_currency + ) untaxed_amount_currency = amount_currency * sign untaxed_amount = amount_currency * sign diff --git a/l10n_br_account/models/account_move_line.py b/l10n_br_account/models/account_move_line.py index 315b2f21dbf6..7d03d9b0a20f 100644 --- a/l10n_br_account/models/account_move_line.py +++ b/l10n_br_account/models/account_move_line.py @@ -325,6 +325,19 @@ def changed(fname): if line.currency_id == line.company_id.currency_id: line.balance = amount_currency + # Os totais nas linhas foram atualizadas, mas o total da fatura + # não foi recalculado automaticamente, já que o método compute_amount + # não foi acionado após as alterações nas linhas. + # Por esse motivo, estou adicionando manualmente os campos no + # add_to_compute do account_move. + # Questão: Por que o compute_amount não foi acionado automaticamente? + # Isso ocorre apenas quando os valores são diretamente informados + # no create? Realizar um teste isolado para confirmar esse + # comportamento. + move_id = line.move_id + self.env.add_to_compute(move_id._fields["amount_total"], move_id) + self.env.add_to_compute(move_id._fields["amount_untaxed"], move_id) + after = existing() for line in after: if ( @@ -536,4 +549,4 @@ def _onchange_fiscal_tax_ids(self): user_type=user_type, fiscal_operation=self.fiscal_operation_id ) - return result + return result # diff --git a/l10n_br_sale_stock/tests/test_sale_stock.py b/l10n_br_sale_stock/tests/test_sale_stock.py index 78ad6aa9b89b..d1173cbdf37b 100644 --- a/l10n_br_sale_stock/tests/test_sale_stock.py +++ b/l10n_br_sale_stock/tests/test_sale_stock.py @@ -217,6 +217,12 @@ def test_picking_sale_order_product_and_service(self): # a copia entre os objetos é testada tanto no stock.move acima # quanto na account.move.line abaixo "uom_id", + # O campo 'display_type' difere entre 'sale.order.line' e + # 'account.move.line' para produtos: é False em 'sale.order.line' e + # "product" em 'account.move.line' + "display_type", + "sequence", + "analytic_precision", # verificar se tem importancia # Ao chamar o _onchange_product_id_fiscal no stock.move o # partner_id usado no mapeamento é o do objeto, nesse teste # 'Akretion Aluminio - SP' por ser o Endereço de Entrega @@ -245,6 +251,14 @@ def test_picking_sale_order_product_and_service(self): "Field %s failed to transfer from " "sale.order.line to account.move.line" % field, ) + # Assert específico para 'display_type' + if sale_order_line.display_type is False: + self.assertEqual( + invoice_lines.display_type, + "product", + "Esperado 'display_type' como 'product' em account.move.line quando" + "é False em sale.order.line", + ) for inv_line in invoice_lines: if inv_line.product_id == sale_order_line.product_id: @@ -340,7 +354,6 @@ def test_ungrouping_pickings_partner_shipping_different(self): picking and 3 moves per picking, the 3 has the same Partner to Invoice but one has Partner to Shipping so shouldn't be grouping. """ - sale_order_1 = self.env.ref("l10n_br_sale_stock.main_so_l10n_br_sale_stock_1") sale_order_1.action_confirm() picking = sale_order_1.picking_ids