==================== Credit Note Scenario ==================== Imports:: >>> from decimal import Decimal >>> from proteus import Model >>> from trytond.modules.account.tests.tools import ( ... create_chart, create_fiscalyear, create_tax, 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') Get accounts:: >>> accounts = get_accounts() >>> receivable = accounts['receivable'] >>> revenue = accounts['revenue'] >>> expense = accounts['expense'] >>> account_cash = accounts['cash'] Create tax:: >>> TaxCode = Model.get('account.tax.code') >>> tax = create_tax(Decimal('.10')) >>> tax.save() Create payment method:: >>> Journal = Model.get('account.journal') >>> PaymentMethod = Model.get('account.invoice.payment.method') >>> Sequence = Model.get('ir.sequence') >>> journal_cash, = Journal.find([('type', '=', 'cash')]) >>> payment_method = PaymentMethod() >>> payment_method.name = 'Cash' >>> payment_method.journal = journal_cash >>> payment_method.credit_account = account_cash >>> payment_method.debit_account = account_cash >>> payment_method.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') >>> template = ProductTemplate() >>> template.name = 'product' >>> template.default_uom = unit >>> template.type = 'service' >>> template.list_price = Decimal('40') >>> template.account_category = account_category >>> template.save() >>> product, = template.products Create credit note:: >>> Invoice = Model.get('account.invoice') >>> invoice = Invoice() >>> invoice.party = party >>> line = invoice.lines.new() >>> line.product = product >>> line.quantity = -5 >>> line.unit_price = Decimal('40') >>> invoice.total_amount Decimal('-220.00') >>> invoice.save() Post credit note:: >>> invoice.click('post') >>> invoice.state 'posted' Pay credit note:: >>> pay = invoice.click('pay') >>> pay.form.amount Decimal('-220.00') >>> pay.form.amount = Decimal('-120.00') >>> pay.form.payment_method = payment_method >>> pay.execute('choice') >>> pay.form.type = 'partial' >>> pay.form.amount Decimal('-120.00') >>> len(pay.form.lines_to_pay) 1 >>> len(pay.form.payment_lines) 0 >>> len(pay.form.lines) 1 >>> pay.form.amount_writeoff Decimal('-100.00') >>> pay.execute('pay') >>> pay.state 'end' >>> pay = invoice.click('pay') >>> pay.form.amount Decimal('-100.00') >>> pay.form.amount = Decimal('-100.00') >>> pay.form.payment_method = payment_method >>> pay.execute('choice') >>> invoice.state 'paid' >>> sorted(l.debit for l in invoice.reconciliation_lines) [Decimal('100.00'), Decimal('120.00')]