def test_out_refund_cancel(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_national, self.partner.id) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.action_post() self.assertEqual(invoice.state, "posted") self.assertEqual(1, len(invoice.tbai_invoice_ids)) ( root, signature_value, ) = invoice.sudo( ).tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res) # Create an invoice refund by substitution account_move_reversal = ( self.env["account.move.reversal"].with_context( active_model="account.move", active_ids=[invoice.id]).create( dict( reason="Credit Note for Binovo", date=date.today(), refund_method="cancel", ))) account_move_reversal.with_context( refund_method="cancel").reverse_moves() self.assertEqual(1, len(invoice.reversal_move_id)) refund = invoice.reversal_move_id self.assertEqual("I", refund.tbai_refund_type) self.assertEqual("R1", refund.tbai_refund_key) self.assertEqual(refund.payment_state, "paid") self.assertEqual(1, len(refund.tbai_invoice_ids)) ( r_root, r_signature_value, ) = refund.sudo( ).tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() r_res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, r_root) self.assertTrue(r_res)
def test_out_invoice_cancel(self): invoice = self.create_draft_invoice( self.account_billing.id, self.fiscal_position_national) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.compute_taxes() invoice.action_invoice_open() self.assertEqual(invoice.state, 'open') self.assertEqual(1, len(invoice.tbai_invoice_ids)) root, signature_value = \ invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res) invoice.sudo().tbai_invoice_ids.state = 'sent' invoice.sudo().journal_id.update_posted = True invoice.action_invoice_cancel() self.assertEqual(invoice.state, 'cancel') self.assertEqual(1, len(invoice.tbai_cancellation_ids)) invs = invoice.sudo().tbai_cancellation_ids root, signature_value = invs.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid( self.test_xml_cancellation_schema_doc, root) self.assertTrue(res)
def test_invoice_equivalence_surcharge_taxes(self): invoice = self.create_draft_invoice( self.account_billing.id, self.fiscal_position_surcharge, self.partner.id ) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.action_post() self.assertEqual(invoice.state, "posted") self.assertEqual(1, len(invoice.tbai_invoice_ids)) ( root, signature_value, ) = invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)
def test_out_refund_refund(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_national) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.compute_taxes() invoice.action_invoice_open() self.assertEqual(invoice.state, 'open') self.assertEqual(1, len(invoice.tbai_invoice_ids)) root, signature_value = \ invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res) # Create an invoice refund by differences account_invoice_refund = \ self.env['account.invoice.refund'].with_context( active_id=invoice.id, active_ids=invoice.ids ).create(dict( description='Credit Note for Binovo', date=date.today(), filter_refund='refund' )) account_invoice_refund.invoice_refund() self.assertEqual(1, len(invoice.refund_invoice_ids)) refund = invoice.refund_invoice_ids self.assertEqual('I', refund.tbai_refund_type) self.assertEqual('R1', refund.tbai_refund_key) refund.compute_taxes() refund.action_invoice_open() self.assertEqual(refund.state, 'open') self.assertEqual(1, len(refund.tbai_invoice_ids)) r_root, r_signature_value = \ refund.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() r_res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, r_root) self.assertTrue(r_res)
def test_out_invoice_cancel(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_national, self.partner.id) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.action_post() self.assertEqual(invoice.state, "posted") self.assertEqual(1, len(invoice.tbai_invoice_ids)) ( root, signature_value, ) = invoice.sudo( ).tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res) invoice.sudo().tbai_invoice_ids.state = "sent" invoice.button_cancel() self.assertEqual(invoice.state, "cancel") self.assertEqual(1, len(invoice.tbai_cancellation_ids)) invs = invoice.sudo().tbai_cancellation_ids root, signature_value = invs.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_cancellation_schema_doc, root) self.assertTrue(res)
def test_invoice_foreign_customer_extracommunity(self): invoice = self.create_draft_invoice( self.account_billing.id, self.fiscal_position_e, self.partner_extracommunity.id, ) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() # Artículo 21.- Exenciones en las exportaciones de bienes tax = invoice.invoice_line_ids.filtered(lambda line: any( [t.id == self.tax_iva0_e.id for t in line.tax_ids])).mapped( "tax_ids") fp_tbai_tax = self.env["account.fp.tbai.tax"].search( [("tax_id", "=", tax.id), ("position_id", "=", self.fiscal_position_e.id)], limit=1, ) self.assertEqual( fp_tbai_tax.tbai_vat_exemption_key, self.vat_exemption_E2, ) # Otros tax = invoice.invoice_line_ids.filtered(lambda line: any( [t.id == self.tax_iva0_sp_e.id for t in line.tax_ids])).mapped( "tax_ids") fp_tbai_tax = self.env["account.fp.tbai.tax"].search( [("tax_id", "=", tax.id), ("position_id", "=", self.fiscal_position_e.id)], limit=1, ) self.assertEqual( fp_tbai_tax.tbai_vat_exemption_key, self.vat_exemption_E6, ) invoice.action_post() self.assertEqual(invoice.state, "posted") self.assertEqual(1, len(invoice.tbai_invoice_ids)) ( root, signature_value, ) = invoice.sudo( ).tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)
def test_invoice_foreign_currency(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_national, self.partner) invoice.currency_id = self.env.ref("base.USD") invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.action_post() self.assertEqual(invoice.state, "posted") self.assertEqual(1, len(invoice.tbai_invoice_ids)) ( root, signature_value, ) = invoice.sudo( ).tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)
def test_invoice_ipsi_igic(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_ipsi_igic) for line in invoice.invoice_line_ids: if line.product_id != self.product_service: line.unlink() invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.compute_taxes() self.assertEqual(1, len(invoice.invoice_line_ids)) self.assertEqual('RL', invoice.tax_line_ids.tbai_get_value_causa()) invoice.action_invoice_open() self.assertEqual(invoice.state, 'open') self.assertEqual(1, len(invoice.tbai_invoice_ids)) root, signature_value = \ invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)
def test_invoice_foreign_customer_intracommunity(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_ic) invoice.partner_id = self.partner_intracommunity.id invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.compute_taxes() # Artículo 25.- Exenciones en las entregas de bienes destinados a otro Estado # miembro self.assertTrue( all(tax.tbai_vat_exemption_key == self.vat_exemption_E5 for tax in invoice.tax_line_ids)) invoice.action_invoice_open() self.assertEqual(invoice.state, 'open') self.assertEqual(1, len(invoice.tbai_invoice_ids)) root, signature_value = \ invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)
def test_invoice_lines_protected_data(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_national) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.compute_taxes() self.main_company.tbai_protected_data = True invoice.action_invoice_open() root, signature_value = \ invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res) invoice_line_details = root\ .findall('Factura')[0]\ .findall('DatosFactura')[0]\ .findall('DetallesFactura')[0]\ .findall('IDDetalleFactura') for invoice_line_detail in invoice_line_details: invoice_line_description = invoice_line_detail\ .findall('DescripcionDetalle')[0] self.assertEqual(invoice_line_description.text, self.main_company.tbai_protected_data_txt)
def test_invoice_lines_protected_data(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_national, self.partner.id) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() self.main_company.tbai_protected_data = True invoice.action_post() ( root, signature_value, ) = invoice.sudo( ).tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res) invoice_line_details = ( root.findall("Factura")[0].findall("DatosFactura")[0].findall( "DetallesFactura")[0].findall("IDDetalleFactura")) for invoice_line_detail in invoice_line_details: invoice_line_description = invoice_line_detail.findall( "DescripcionDetalle")[0] self.assertEqual(invoice_line_description.text, self.main_company.tbai_protected_data_txt)
def test_invoice_foreign_customer_extracommunity(self): invoice = self.create_draft_invoice(self.account_billing.id, self.fiscal_position_e) invoice.partner_id = self.partner_extracommunity.id invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.compute_taxes() # Artículo 21.- Exenciones en las exportaciones de bienes self.assertEqual( invoice.tax_line_ids.filtered( lambda tax: tax.tax_id.id == self.tax_iva0_e.id). tbai_vat_exemption_key, self.vat_exemption_E2) # Otros self.assertEqual( invoice.tax_line_ids.filtered( lambda tax: tax.tax_id.id == self.tax_iva0_sp_e.id). tbai_vat_exemption_key, self.vat_exemption_E6) invoice.action_invoice_open() self.assertEqual(invoice.state, 'open') self.assertEqual(1, len(invoice.tbai_invoice_ids)) root, signature_value = \ invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)
def test_invoice_line_iva_exento(self): invoice = self.create_draft_invoice( self.account_billing.id, self.fiscal_position_national, self.partner.id ) product_iva_exento = self.create_product( product_name="Servicio Exento", product_type="service", product_taxes=[self.tax_iva0_exento_sujeto.id], ) invoice.write( { "invoice_line_ids": [ ( 0, 0, { "move_id": invoice.id, "product_id": product_iva_exento.id, "quantity": 1, "price_unit": 100.0, "name": "TBAI Invoice Line Test - service IVA Exento", "account_id": self.account_revenue.id, }, ) ] } ) invoice.onchange_fiscal_position_id_tbai_vat_regime_key() invoice.action_post() self.assertEqual(invoice.state, "posted") self.assertEqual(1, len(invoice.tbai_invoice_ids)) ( root, signature_value, ) = invoice.sudo().tbai_invoice_ids.get_tbai_xml_signed_and_signature_value() res = XMLSchema.xml_is_valid(self.test_xml_invoice_schema_doc, root) self.assertTrue(res)