257 lines
7.5 KiB
Python
257 lines
7.5 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# This file is part of facho. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
"""Tests for `facho` package."""
|
|
|
|
import pytest
|
|
# from datetime import datetime
|
|
# import io
|
|
# import zipfile
|
|
|
|
import facho.fe.form as form
|
|
# from facho import fe
|
|
|
|
from fixtures import (
|
|
simple_invoice,
|
|
simple_invoice_without_lines,
|
|
simple_credit_note_without_lines,
|
|
simple_debit_note_without_lines)
|
|
|
|
simple_invoice = simple_invoice
|
|
simple_invoice_without_lines = simple_invoice_without_lines
|
|
simple_credit_note_without_lines = simple_credit_note_without_lines
|
|
simple_debit_note_without_lines = simple_debit_note_without_lines
|
|
|
|
|
|
def test_invoice_legalmonetary():
|
|
inv = form.NationalSalesInvoice()
|
|
inv.add_invoice_line(form.InvoiceLine(
|
|
quantity=form.Quantity(1, '94'),
|
|
description='producto facho',
|
|
item=form.StandardItem(9999),
|
|
price=form.Price(
|
|
amount=form.Amount(100.0),
|
|
type_code='01',
|
|
type='x'
|
|
),
|
|
tax=form.TaxTotal(
|
|
subtotals=[
|
|
form.TaxSubTotal(
|
|
percent=19.0,
|
|
)]),
|
|
withholding=form.WithholdingTaxTotal(
|
|
subtotals=[])
|
|
))
|
|
|
|
inv.calculate()
|
|
assert inv.invoice_legal_monetary_total.line_extension_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == (
|
|
form.Amount(119.0))
|
|
assert inv.invoice_legal_monetary_total.charge_total_amount == (
|
|
form.Amount(0.0))
|
|
|
|
|
|
def test_allowancecharge_as_discount():
|
|
discount = form.AllowanceChargeAsDiscount(amount=form.Amount(1000.0))
|
|
|
|
assert discount.isDiscount()
|
|
|
|
|
|
def test_FAU10():
|
|
inv = form.NationalSalesInvoice()
|
|
inv.add_invoice_line(form.InvoiceLine(
|
|
quantity=form.Quantity(1, '94'),
|
|
description='productofacho',
|
|
item=form.StandardItem(9999),
|
|
price=form.Price(
|
|
amount=form.Amount(100.0),
|
|
type_code='01',
|
|
type='x'
|
|
),
|
|
tax=form.TaxTotal(
|
|
subtotals=[
|
|
form.TaxSubTotal(
|
|
percent=19.0)]),
|
|
withholding=form.WithholdingTaxTotal(
|
|
subtotals=[])
|
|
))
|
|
|
|
inv.add_allowance_charge(form.AllowanceCharge(amount=form.Amount(19.0)))
|
|
|
|
inv.calculate()
|
|
assert inv.invoice_legal_monetary_total.line_extension_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == (
|
|
form.Amount(119.0))
|
|
assert inv.invoice_legal_monetary_total.charge_total_amount == (
|
|
form.Amount(19.0))
|
|
|
|
|
|
def test_FAU14():
|
|
inv = form.NationalSalesInvoice()
|
|
inv.add_invoice_line(form.InvoiceLine(
|
|
quantity=form.Quantity(1, '94'),
|
|
description='productofacho',
|
|
item=form.StandardItem(9999),
|
|
price=form.Price(
|
|
amount=form.Amount(100.0),
|
|
type_code='01',
|
|
type='x'
|
|
),
|
|
tax=form.TaxTotal(
|
|
subtotals=[
|
|
form.TaxSubTotal(
|
|
percent=19.0,
|
|
)]),
|
|
withholding=form.WithholdingTaxTotal(
|
|
subtotals=[])
|
|
))
|
|
inv.add_allowance_charge(form.AllowanceCharge(
|
|
amount=form.Amount(19.0)))
|
|
inv.add_prepaid_payment(form.PrePaidPayment(
|
|
paid_amount=form.Amount(50.0)))
|
|
inv.calculate()
|
|
|
|
wants = form.Amount(119.0 + 19.0 - 50.0)
|
|
|
|
assert inv.invoice_legal_monetary_total.payable_amount == wants, "got %s want %s" % (inv.invoice_legal_monetary_total.payable_amount, wants)
|
|
|
|
|
|
def test_invalid_tipo_operacion_nota_debito():
|
|
reference = form.InvoiceDocumentReference(
|
|
ident='11111',
|
|
uuid='21312312',
|
|
date='2020-05-05'
|
|
)
|
|
inv = form.DebitNote(reference)
|
|
with pytest.raises(ValueError):
|
|
inv.set_operation_type(22)
|
|
|
|
|
|
def test_valid_tipo_operacion_nota_debito():
|
|
reference = form.InvoiceDocumentReference(
|
|
ident='11111',
|
|
uuid='21312312',
|
|
date='2020-05-05'
|
|
)
|
|
inv = form.DebitNote(reference)
|
|
inv.set_operation_type('30')
|
|
|
|
|
|
def test_invalid_tipo_operacion_nota_credito():
|
|
reference = form.InvoiceDocumentReference(
|
|
ident='11111',
|
|
uuid='21312312',
|
|
date='2020-05-05'
|
|
)
|
|
|
|
inv = form.DebitNote(reference)
|
|
with pytest.raises(ValueError):
|
|
inv.set_operation_type('990')
|
|
|
|
|
|
def test_valid_tipo_operacion_nota_credito():
|
|
reference = form.InvoiceDocumentReference(
|
|
ident='11111',
|
|
uuid='21312312',
|
|
date='2020-05-05'
|
|
)
|
|
inv = form.CreditNote(reference)
|
|
inv.set_operation_type('20')
|
|
|
|
|
|
def test_quantity():
|
|
quantity1 = form.Quantity(10, '94')
|
|
assert quantity1 * form.Amount(3) == form.Amount(30)
|
|
|
|
|
|
def test_invoice_line_quantity_without_taxes():
|
|
line = form.InvoiceLine(
|
|
quantity=form.Quantity(10, '94'),
|
|
description='',
|
|
item=form.StandardItem('test', 9999),
|
|
price=form.Price(
|
|
amount=form.Amount(30.00),
|
|
type_code='01',
|
|
type='x'),
|
|
tax=form.TaxTotal(subtotals=[]),
|
|
withholding=form.WithholdingTaxTotal(
|
|
subtotals=[])
|
|
)
|
|
line.calculate()
|
|
assert line.total_amount == form.Amount(300)
|
|
assert line.tax_amount == form.Amount(0)
|
|
|
|
|
|
def test_invoice_legalmonetary_with_taxes():
|
|
inv = form.NationalSalesInvoice()
|
|
inv.add_invoice_line(form.InvoiceLine(
|
|
quantity=form.Quantity(1, '94'),
|
|
description='productofacho',
|
|
item=form.StandardItem(9999),
|
|
price=form.Price(
|
|
amount=form.Amount(100.0),
|
|
type_code='01',
|
|
type='x'
|
|
),
|
|
tax=form.TaxTotal(subtotals=[]),
|
|
withholding=form.WithholdingTaxTotal(
|
|
subtotals=[])
|
|
))
|
|
inv.calculate()
|
|
|
|
assert inv.invoice_legal_monetary_total.line_extension_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == (
|
|
form.Amount(100.0))
|
|
assert inv.invoice_legal_monetary_total.charge_total_amount == (
|
|
form.Amount(0.0))
|
|
assert inv.invoice_legal_monetary_total.payable_amount == (
|
|
form.Amount(100.0))
|
|
|
|
|
|
def test_invoice_ident_prefix_automatic_invalid():
|
|
inv = form.NationalSalesInvoice()
|
|
with pytest.raises(ValueError):
|
|
inv.set_ident('SETPQJQJ1234567')
|
|
|
|
|
|
def test_invoice_ident_prefix_automatic():
|
|
inv = form.NationalSalesInvoice()
|
|
inv.set_ident('SETP1234567')
|
|
assert inv.invoice_ident_prefix == 'SETP'
|
|
inv = form.NationalSalesInvoice()
|
|
inv.set_ident('SET1234567')
|
|
assert inv.invoice_ident_prefix == 'SET'
|
|
inv = form.NationalSalesInvoice()
|
|
inv.set_ident('SE1234567')
|
|
assert inv.invoice_ident_prefix == 'SE'
|
|
inv = form.NationalSalesInvoice()
|
|
inv.set_ident('S1234567')
|
|
assert inv.invoice_ident_prefix == 'S'
|
|
inv = form.NationalSalesInvoice()
|
|
inv.set_ident('1234567')
|
|
assert inv.invoice_ident_prefix == ''
|
|
|
|
|
|
def test_invoice_ident_prefix_manual():
|
|
inv = form.NationalSalesInvoice()
|
|
inv.set_ident('SETP1234567')
|
|
inv.set_ident_prefix('SETA')
|
|
assert inv.invoice_ident_prefix == 'SETA'
|
|
|
|
|
|
def test_invoice_ident_prefix_automatic_debit():
|
|
inv = form.DebitNote(form.BillingReference('', '', ''))
|
|
inv.set_ident('ABCDEF1234567')
|
|
assert inv.invoice_ident_prefix == 'ABCDEF'
|