========================== Analytic Purchase Scenario ========================== Imports:: >>> from decimal import Decimal >>> from proteus import Model >>> from trytond.modules.account.tests.tools import ( ... create_chart, create_fiscalyear, get_accounts) >>> from trytond.modules.account_invoice.tests.tools import ( ... create_payment_term, set_fiscalyear_invoice_sequences) >>> from trytond.modules.company.tests.tools import create_company >>> from trytond.tests.tools import activate_modules, assertEqual Activate modules:: >>> config = activate_modules('analytic_purchase', create_company, create_chart) Create fiscal year:: >>> fiscalyear = set_fiscalyear_invoice_sequences( ... create_fiscalyear()) >>> fiscalyear.click('create_period') Get accounts:: >>> accounts = get_accounts() >>> revenue = accounts['revenue'] >>> expense = accounts['expense'] Create analytic accounts:: >>> AnalyticAccount = Model.get('analytic_account.account') >>> root = AnalyticAccount(type='root', name='Root') >>> root.save() >>> analytic_account = AnalyticAccount(root=root, parent=root, ... name='Analytic') >>> analytic_account.save() Create parties:: >>> Party = Model.get('party.party') >>> supplier = Party(name='Supplier') >>> supplier.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.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 = 'goods' >>> template.purchasable = True >>> template.list_price = Decimal('10') >>> template.account_category = account_category >>> template.save() >>> product, = template.products Create payment term:: >>> payment_term = create_payment_term() >>> payment_term.save() Purchase with analytic accounts:: >>> Purchase = Model.get('purchase.purchase') >>> purchase = Purchase() >>> purchase.party = supplier >>> purchase.payment_term = payment_term >>> purchase.invoice_method = 'order' >>> purchase_line = purchase.lines.new() >>> entry, = purchase_line.analytic_accounts >>> assertEqual(entry.root, root) >>> entry.account = analytic_account >>> purchase_line.product = product >>> purchase_line.quantity = 5 >>> purchase_line.unit_price = Decimal('5.0000') >>> purchase.click('quote') >>> purchase.click('confirm') >>> purchase.state 'processing' Check invoice analytic accounts:: >>> Invoice = Model.get('account.invoice') >>> invoice = Invoice(purchase.invoices[0].id) >>> invoice_line, = invoice.lines >>> entry, = invoice_line.analytic_accounts >>> assertEqual(entry.account, analytic_account) Purchase with an empty analytic account:: >>> Purchase = Model.get('purchase.purchase') >>> purchase = Purchase() >>> purchase.party = supplier >>> purchase.payment_term = payment_term >>> purchase.invoice_method = 'order' >>> purchase_line = purchase.lines.new() >>> entry, = purchase_line.analytic_accounts >>> purchase_line.product = product >>> purchase_line.quantity = 5 >>> purchase_line.unit_price = Decimal('5.0000') >>> purchase.click('quote') >>> purchase.click('confirm') >>> purchase.state 'processing' Check invoice analytic accounts:: >>> Invoice = Model.get('account.invoice') >>> invoice = Invoice(purchase.invoices[0].id) >>> invoice_line, = invoice.lines >>> entry, = invoice_line.analytic_accounts >>> entry.account