================= AEAT SII Scenario ================= Imports:: >>> import datetime >>> from dateutil.relativedelta import relativedelta >>> from decimal import Decimal >>> from operator import attrgetter >>> from proteus import config, Model, Wizard >>> from trytond.tests.tools import activate_modules >>> from trytond.modules.company.tests.tools import create_company, \ ... get_company >>> from trytond.modules.account.tests.tools import create_fiscalyear, \ ... create_chart, get_accounts, create_tax, create_tax_code >>> from trytond.modules.account_invoice.tests.tools import \ ... set_fiscalyear_invoice_sequences >>> today = datetime.date.today() Install account_sii:: >>> config = activate_modules('aeat_sii') Create company:: >>> _ = create_company() >>> company = get_company() Create fiscal year:: >>> fiscalyear = set_fiscalyear_invoice_sequences( ... create_fiscalyear(company)) >>> fiscalyear.click('create_period') >>> Period = Model.get('account.period') >>> period, = Period.find([ ... ('start_date', '>=', today.replace(day=1)), ... ('end_date', '<=', today.replace(day=1) + relativedelta(months=+1)), ... ], limit=1) Create chart of accounts:: >>> _ = create_chart(company) >>> accounts = get_accounts(company) >>> receivable = accounts['receivable'] >>> revenue = accounts['revenue'] >>> expense = accounts['expense'] >>> account_tax = accounts['tax'] Create tax:: >>> TaxCode = Model.get('account.tax.code') >>> tax = create_tax(Decimal('.10')) >>> tax.sii_book_key = 'E' >>> tax.sii_issued_key = '01' >>> tax.sii_subjected_key = 'S1' >>> tax.tax_used = True >>> tax.save() >>> invoice_base_code = create_tax_code(tax, 'base', 'invoice') >>> invoice_base_code.save() >>> invoice_tax_code = create_tax_code(tax, 'tax', 'invoice') >>> invoice_tax_code.save() >>> credit_note_base_code = create_tax_code(tax, 'base', 'credit') >>> credit_note_base_code.save() >>> credit_note_tax_code = create_tax_code(tax, 'tax', 'credit') >>> credit_note_tax_code.save() Create party:: >>> Party = Model.get('party.party') >>> party = Party(name='Party') >>> party.save() Create account category:: >>> ProductCategory = Model.get('product.category') >>> account_category = ProductCategory(name="Account Category") >>> account_category.accounting = True >>> account_category.account_expense = expense >>> account_category.account_revenue = revenue >>> account_category.customer_taxes.append(tax) >>> account_category.save() Create product:: >>> ProductUom = Model.get('product.uom') >>> unit, = ProductUom.find([('name', '=', 'Unit')]) >>> ProductTemplate = Model.get('product.template') >>> Product = Model.get('product.product') >>> product = Product() >>> template = ProductTemplate() >>> template.name = 'product' >>> template.default_uom = unit >>> template.type = 'service' >>> template.list_price = Decimal('40') >>> template.cost_price = Decimal('25') >>> template.account_category = account_category >>> template.save() >>> product, = template.products >>> product.save() Create payment term:: >>> PaymentTerm = Model.get('account.invoice.payment_term') >>> payment_term = PaymentTerm(name='Term') >>> line = payment_term.lines.new(type='percent', ratio=Decimal('.5')) >>> delta = line.relativedeltas.new(days=20) >>> line = payment_term.lines.new(type='remainder') >>> delta = line.relativedeltas.new(days=40) >>> payment_term.save() Create invoice:: >>> Invoice = Model.get('account.invoice') >>> InvoiceLine = Model.get('account.invoice.line') >>> invoice = Invoice() >>> invoice.party = party >>> invoice.payment_term = payment_term >>> line = InvoiceLine() >>> invoice.lines.append(line) >>> line.product = product >>> line.quantity = 5 >>> line.unit_price = Decimal('40') >>> line = InvoiceLine() >>> invoice.lines.append(line) >>> line.account = revenue >>> line.description = 'Test' >>> line.quantity = 1 >>> line.unit_price = Decimal(20) >>> invoice.save() >>> invoice.sii_book_key 'E' >>> invoice.sii_operation_key 'F1' >>> invoice.sii_issued_key '01' >>> invoice.sii_book_key = 'I' >>> invoice.sii_operation_key = 'F2' >>> invoice.sii_issued_key = '02' >>> invoice.save() >>> invoice.reload() >>> invoice.sii_book_key == 'I' True >>> invoice.click('reset_sii_keys') >>> invoice.reload() >>> invoice.sii_book_key == 'E' True >>> invoice.sii_operation_key == 'F1' True >>> invoice.click('post') >>> invoice.state 'posted' Create Credit invoice:: >>> invoice = Invoice() >>> invoice.party = party >>> invoice.payment_term = payment_term >>> line = InvoiceLine() >>> invoice.lines.append(line) >>> line.product = product >>> line.quantity = -5 >>> line.unit_price = Decimal('40') >>> line = InvoiceLine() >>> invoice.lines.append(line) >>> line.account = revenue >>> line.description = 'Test' >>> line.quantity = -1 >>> line.unit_price = Decimal(20) >>> invoice.sii_operation_key = 'R1' >>> invoice.save() >>> invoice.sii_book_key 'E' >>> invoice.sii_operation_key 'R1' >>> invoice.sii_issued_key '01' >>> invoice.sii_book_key = 'I' >>> invoice.sii_operation_key = 'F2' >>> invoice.sii_issued_key = '02' >>> invoice.save() >>> invoice.reload() >>> invoice.click('reset_sii_keys') >>> invoice.reload() >>> invoice.sii_book_key == 'E' True >>> invoice.sii_operation_key == 'R1' True >>> invoice.click('post') >>> invoice.state 'posted' Create AEAT Report:: >>> AEATReport = Model.get('aeat.sii.report') >>> report = AEATReport() >>> report.fiscalyear = fiscalyear >>> report.period = period >>> report.operation_type = 'A0' >>> report.book = 'E' >>> report.save() >>> report.state 'draft' >>> report.click('load_invoices') >>> len(report.lines) 2 Credit invoice with refund:: >>> credit = Wizard('account.invoice.credit', [invoice]) >>> credit.form.with_refund = True >>> credit.execute('credit') >>> invoice.reload() >>> invoice.state 'paid' >>> credit, = Invoice.find([('total_amount', '<', 0)]) >>> credit.sii_operation_key 'R1'