============================ Invoice with credit Scenario ============================ Imports:: >>> from decimal import Decimal >>> from proteus import Model >>> from trytond.modules.account.tests.tools import ( ... create_chart, create_fiscalyear, create_tax, create_tax_code, get_accounts) >>> from trytond.modules.account_invoice.tests.tools import ( ... set_fiscalyear_invoice_sequences) >>> from trytond.modules.company.tests.tools import create_company >>> from trytond.tests.tools import activate_modules Activate modules:: >>> config = activate_modules('account_invoice', create_company, create_chart) Create fiscal year:: >>> fiscalyear = set_fiscalyear_invoice_sequences( ... create_fiscalyear()) >>> fiscalyear.click('create_period') >>> period_ids = [p.id for p in fiscalyear.periods] Get accounts:: >>> accounts = get_accounts() Create tax:: >>> TaxCode = Model.get('account.tax.code') >>> Tax = Model.get('account.tax') >>> tax = create_tax(Decimal('.10')) >>> 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 invoice:: >>> Invoice = Model.get('account.invoice') >>> invoice = Invoice() >>> invoice.party = party >>> line = invoice.lines.new() >>> line.account = accounts['revenue'] >>> line.quantity = 5 >>> line.unit_price = Decimal('10.0000') >>> line.taxes.append(Tax(tax.id)) >>> line = invoice.lines.new() >>> line.account = accounts['revenue'] >>> line.quantity = -2 >>> line.unit_price = Decimal('5.0000') >>> line.taxes.append(Tax(tax.id)) >>> invoice.invoice_date = fiscalyear.start_date >>> invoice.click('post') >>> invoice.untaxed_amount Decimal('40.00') >>> invoice.tax_amount Decimal('4.00') >>> invoice.total_amount Decimal('44.00') Test taxes:: >>> len(invoice.taxes) 2 >>> accounts['tax'].reload() >>> accounts['tax'].debit, accounts['tax'].credit (Decimal('1.00'), Decimal('5.00')) >>> with config.set_context(periods=period_ids): ... invoice_base_code = TaxCode(invoice_base_code.id) ... invoice_base_code.amount Decimal('50.00') >>> with config.set_context(periods=period_ids): ... invoice_tax_code = TaxCode(invoice_tax_code.id) ... invoice_tax_code.amount Decimal('5.00') >>> with config.set_context(periods=period_ids): ... credit_note_base_code = TaxCode(credit_note_base_code.id) ... credit_note_base_code.amount Decimal('10.00') >>> with config.set_context(periods=period_ids): ... credit_note_tax_code = TaxCode(credit_note_tax_code.id) ... credit_note_tax_code.amount Decimal('1.00')