Skip to content

Commit

Permalink
[FIX] l10n_it_fatturapa_out: add check on invoice
Browse files Browse the repository at this point in the history
Add various checks to preventive_checks()
  • Loading branch information
TheMule71 committed Jan 28, 2022
1 parent 90fbad2 commit 3e9ae1e
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 0 deletions.
36 changes: 36 additions & 0 deletions l10n_it_fatturapa_out/models/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,26 @@ def _compute_fatturapa_state(self):

def preventive_checks(self):
for invoice in self:
if invoice.state != "posted":
raise UserError(
_("Impossible to generate XML: invoice not posted: %s")
% invoice.name
)

if not invoice.is_sale_document():
raise UserError(
_("Impossible to generate XML: not a customer invoice: %s")
% invoice.name
)

if not invoice.fiscal_document_type_id:
raise UserError(
_(
"Invoice %s fiscal document type must be set",
invoice.name,
)
)

if (
invoice.invoice_payment_term_id
and invoice.invoice_payment_term_id.fatturapa_pt_id.code is False
Expand All @@ -81,6 +95,28 @@ def preventive_checks(self):
)
)

if not invoice.partner_id.city:
raise UserError(_("Invoice %s partner city must be set", invoice.name))

if not invoice.company_id.partner_id.city:
raise UserError(
_(
"Invoice %s city in our company's partner must be set",
invoice.name,
)
)

if (
invoice.company_id.fatturapa_stabile_organizzazione
and not invoice.company_id.fatturapa_stabile_organizzazione.city
):
raise UserError(
_(
"Invoice %s city in our company's Stabile Organizzazione must be set",
invoice.name,
)
)

if not all(
aml.tax_ids for aml in invoice.invoice_line_ids if aml.product_id
):
Expand Down
108 changes: 108 additions & 0 deletions l10n_it_fatturapa_out/tests/test_fatturapa_xml_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -924,3 +924,111 @@ def test_max_invoice_in_xml(self):
res = self.run_wizard(invoices.ids)
attachments = self.attach_model.browse(res["res_id"])
self.assertEqual(len(attachments), 1)

def test_preventive_checks(self):
invoice_form = Form(
self.env["account.move"].with_context({"default_move_type": "in_invoice"})
)
invoice_form.partner_id = self.res_partner_fatturapa_0
invoice_form.invoice_date = fields.Date.today()
with invoice_form.line_ids.new() as line_form:
line_form.product_id = self.product_product_10
line_form.account_id = self.a_sale
line_form.tax_ids.clear()
line_form.tax_ids.add(self.tax_22)
invoice = invoice_form.save()

with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn("invoice not posted", ue.exception.args[0])

invoice.action_post()

with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn("not a customer invoice", ue.exception.args[0])

invoice_form = Form(
self.env["account.move"].with_context({"default_move_type": "out_invoice"})
)
invoice_form.partner_id = self.res_partner_fatturapa_0
invoice_form.invoice_payment_term_id = self.account_payment_term
with invoice_form.line_ids.new() as line_form:
line_form.product_id = self.product_product_10
line_form.account_id = self.a_sale
line_form.tax_ids.clear()
line_form.tax_ids.add(self.tax_22)
invoice = invoice_form.save()

fiscal_document_type_id = invoice.fiscal_document_type_id
invoice.fiscal_document_type_id = False
invoice.action_post()
with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn("fiscal document type must be set", ue.exception.args[0])
invoice.fiscal_document_type_id = fiscal_document_type_id

invoice = invoice.copy()
pt_id = invoice.invoice_payment_term_id.fatturapa_pt_id
invoice.invoice_payment_term_id.fatturapa_pt_id = False
invoice.action_post()
with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn(
"fiscal payment term must be set for the selected payment term",
ue.exception.args[0],
)
invoice.invoice_payment_term_id.fatturapa_pt_id = pt_id

invoice = invoice.copy()
pm_id = invoice.invoice_payment_term_id.fatturapa_pm_id
invoice.invoice_payment_term_id.fatturapa_pm_id = False
invoice.action_post()
with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn(
"fiscal payment method must be set for the selected payment term",
ue.exception.args[0],
)
invoice.invoice_payment_term_id.fatturapa_pm_id = pm_id

invoice = invoice.copy()
city = invoice.partner_id.city
invoice.partner_id.city = False
invoice.action_post()
with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn("city must be set", ue.exception.args[0])
invoice.partner_id.city = city

invoice = invoice.copy()
city = invoice.company_id.partner_id.city
invoice.company_id.partner_id.city = False
invoice.action_post()
with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn("city in our company's partner must be set", ue.exception.args[0])
invoice.company_id.partner_id.city = city

invoice = invoice.copy()
invoice.company_id.fatturapa_stabile_organizzazione = (
invoice.company_id.partner_id.copy()
)
city = invoice.company_id.fatturapa_stabile_organizzazione.city
invoice.company_id.fatturapa_stabile_organizzazione.city = False
invoice.action_post()
with self.assertRaises(UserError) as ue:
self.run_wizard(invoice.id)
self.assertIn(invoice.name, ue.exception.args[0])
self.assertIn(
"city in our company's Stabile Organizzazione must be set",
ue.exception.args[0],
)
invoice.company_id.fatturapa_stabile_organizzazione.city = city

0 comments on commit 3e9ae1e

Please sign in to comment.