def test_payment_term(self): 'Test payment_term' pool = Pool() PaymentTerm = pool.get('account.invoice.payment_term') cu1 = create_currency('cu1') term, = PaymentTerm.create([{ 'name': '30 days, 1 month, 1 month + 15 days', 'lines': [ ('create', [{ 'sequence': 0, 'type': 'percent', 'divisor': 4, 'ratio': Decimal('.25'), 'relativedeltas': [('create', [{ 'days': 30, }, ]), ], }, { 'sequence': 1, 'type': 'percent_on_total', 'divisor': 4, 'ratio': Decimal('.25'), 'relativedeltas': [('create', [{ 'months': 1, }, ]), ], }, { 'sequence': 2, 'type': 'fixed', 'amount': Decimal('396.84'), 'currency': cu1.id, 'relativedeltas': [('create', [{ 'months': 1, 'days': 30, }, ]), ], }, { 'sequence': 3, 'type': 'remainder', 'relativedeltas': [('create', [{ 'months': 2, 'days': 30, 'day': 15, }, ]), ], }])] }]) terms = term.compute(Decimal('1587.35'), cu1, date=datetime.date(2011, 10, 1)) self.assertEqual(terms, [ (datetime.date(2011, 10, 31), Decimal('396.84')), (datetime.date(2011, 11, 1), Decimal('396.84')), (datetime.date(2011, 12, 1), Decimal('396.84')), (datetime.date(2012, 1, 14), Decimal('396.83')), ])
def setup_environment(): pool = Pool() Address = pool.get('party.address') Party = pool.get('party.party') Bank = pool.get('bank') currency = create_currency('EUR') company = create_company(currency=currency) company.party.sepa_creditor_identifier = 'BE68539007547034' company.party.save() bank_party = Party(name='European Bank') bank_party.save() bank = Bank(party=bank_party, bic='BICODEBBXXX') bank.save() customer = Party(name='Customer') address = Address(street='street', streetbis='street bis', zip='1234', city='City') customer.addresses = [address] customer.save() return { 'company': company, 'bank': bank, 'customer': customer, }
def setup_environment(): pool = Pool() Address = pool.get('party.address') Party = pool.get('party.party') Bank = pool.get('bank') Identifier = pool.get('party.identifier') currency = create_currency('EUR') company = create_company(currency=currency) sepa = Identifier(party=company.party, code='ES23ZZZ47690558N', type='sepa') sepa.save() bank_party = Party(name='European Bank') bank_party.save() bank = Bank(party=bank_party, bic='BICODEBBXXX') bank.save() customer = Party(name='Customer') address = Address(street='street', zip='1234', city='City') customer.addresses = [address] customer.save() return { 'company': company, 'bank': bank, 'customer': customer, }
def test_compute_weight_price(self): 'Test compute_weight_price' pool = Pool() Party = pool.get('party.party') Uom = pool.get('product.uom') Template = pool.get('product.template') Product = pool.get('product.product') Category = pool.get('product.category') Carrier = pool.get('carrier') WeightPriceList = pool.get('carrier.weight_price_list') party, = Party.create([{ 'name': 'Carrier', }]) uom, = Uom.search([ ('name', '=', 'Unit'), ]) category, = Category.create([{ 'name': 'Category', }]) template, = Template.create([{ 'name': 'Carrier', 'default_uom': uom.id, 'category': category.id, 'type': 'service', 'list_price': Decimal(0), 'cost_price': Decimal(0), }]) product, = Product.create([{ 'template': template.id, }]) weight_uom, = Uom.search([ ('name', '=', 'Kilogram'), ]) currency = create_currency('cu1') carrier, = Carrier.create([{ 'party': party.id, 'carrier_product': product.id, 'carrier_cost_method': 'weight', 'weight_uom': weight_uom.id, 'weight_currency': currency.id, }]) for i, weight in enumerate(xrange(0, 100, 20)): WeightPriceList.create([{ 'carrier': carrier.id, 'weight': weight, 'price': Decimal(i), }]) self.assertEqual( carrier.compute_weight_price(0), Decimal(0)) for weight, price in [ (1, Decimal(0)), (10, Decimal(0)), (20, Decimal(0)), (21, Decimal(1)), (80, Decimal(3)), (81, Decimal(4)), (100, Decimal(4)), ]: self.assertEqual(carrier.compute_weight_price(weight), price)
def test_payment_term(self): 'Test payment_term' pool = Pool() PaymentTerm = pool.get('account.invoice.payment_term') cu1 = create_currency('cu1') term, = PaymentTerm.create([{ 'name': '30 days, 1 month, 1 month + 15 days', 'lines': [ ('create', [{ 'sequence': 0, 'type': 'percent', 'divisor': 4, 'ratio': Decimal('.25'), 'relativedeltas': [('create', [{ 'days': 30, }, ]), ], }, { 'sequence': 1, 'type': 'percent_on_total', 'divisor': 4, 'ratio': Decimal('.25'), 'relativedeltas': [('create', [{ 'months': 1, }, ]), ], }, { 'sequence': 2, 'type': 'fixed', 'amount': Decimal('396.84'), 'currency': cu1.id, 'relativedeltas': [('create', [{ 'months': 1, 'days': 30, }, ]), ], }, { 'sequence': 3, 'type': 'remainder', 'relativedeltas': [('create', [{ 'months': 2, 'days': 30, 'day': 15, }, ]), ], }])] }]) terms = term.compute(Decimal('1587.35'), cu1, date=datetime.date(2011, 10, 1)) self.assertEqual(terms, [ (datetime.date(2011, 10, 31), Decimal('396.84')), (datetime.date(2011, 11, 01), Decimal('396.84')), (datetime.date(2011, 12, 01), Decimal('396.84')), (datetime.date(2012, 01, 14), Decimal('396.83')), ])
def test_compute_weight_price(self): 'Test compute_weight_price' pool = Pool() Party = pool.get('party.party') Uom = pool.get('product.uom') Template = pool.get('product.template') Product = pool.get('product.product') Carrier = pool.get('carrier') WeightPriceList = pool.get('carrier.weight_price_list') party, = Party.create([{ 'name': 'Carrier', }]) uom, = Uom.search([ ('name', '=', 'Unit'), ]) template, = Template.create([{ 'name': 'Carrier', 'default_uom': uom.id, 'type': 'service', 'list_price': Decimal(0), 'cost_price': Decimal(0), }]) product, = Product.create([{ 'template': template.id, }]) weight_uom, = Uom.search([ ('name', '=', 'Kilogram'), ]) currency = create_currency('cu1') carrier, = Carrier.create([{ 'party': party.id, 'carrier_product': product.id, 'carrier_cost_method': 'weight', 'weight_uom': weight_uom.id, 'weight_currency': currency.id, }]) for i, weight in enumerate(xrange(0, 100, 20)): WeightPriceList.create([{ 'carrier': carrier.id, 'weight': weight, 'price': Decimal(i), }]) self.assertEqual(carrier.compute_weight_price(0), Decimal(0)) for weight, price in [ (1, Decimal(0)), (10, Decimal(0)), (20, Decimal(0)), (21, Decimal(1)), (80, Decimal(3)), (81, Decimal(4)), (100, Decimal(4)), ]: self.assertEqual(carrier.compute_weight_price(weight), price)
def test_account_rec_name_with_currency(self): "Test account record name with currency" pool = Pool() Account = pool.get('bank.account') Number = pool.get('bank.account.number') currency = create_currency("USD") account = Account(numbers=[Number(type='other', number="1234")], currency=currency) account.save() self.assertEqual(account.rec_name, "1234 [USD]")
def create_company(name='Dunder Mifflin', currency=None): pool = Pool() Party = pool.get('party.party') Company = pool.get('company.company') if currency is None: currency = create_currency('usd') add_currency_rate(currency, 1) party, = Party.create([{ 'name': name, 'addresses': [('create', [{}])], }]) company = Company(party=party, currency=currency) company.save() return company
def create_company(name='Dunder Mifflin', currency=None): pool = Pool() Party = pool.get('party.party') Company = pool.get('company.company') if currency is None: currency = create_currency('usd') add_currency_rate(currency, 1) party, = Party.create([{ 'name': name, 'addresses': [('create', [{}])], }]) company = Company(party=party, currency=currency) company.save() return company
def test_payment_term_with_empty_value(self): 'Test payment_term with empty' pool = Pool() PaymentTerm = pool.get('account.invoice.payment_term') cu1 = create_currency('cu1') remainder_term, percent_term = PaymentTerm.create([{ 'name': 'Remainder', 'lines': [ ('create', [{'type': 'remainder', 'relativedeltas': [('create', [{ 'months': 1, }, ]), ], }])] }, { 'name': '25% tomorrow, remainder un month later ', 'lines': [ ('create', [{'type': 'percent', 'divisor': 4, 'ratio': Decimal('.25'), 'relativedeltas': [('create', [{ 'days': 1, }, ]), ], }, {'type': 'remainder', 'relativedeltas': [('create', [{ 'months': 1, }, ]), ], }])] }]) terms = remainder_term.compute(Decimal('0.0'), cu1, date=datetime.date(2016, 5, 17)) self.assertEqual(terms, [ (datetime.date(2016, 5, 17), Decimal('0.0')), ]) terms = percent_term.compute(Decimal('0.0'), cu1, date=datetime.date(2016, 5, 17)) self.assertEqual(terms, [ (datetime.date(2016, 5, 17), Decimal('0.0')), ])
def test_compute_percentage(self): 'Test compute_percentage' pool = Pool() Party = pool.get('party.party') Uom = pool.get('product.uom') Template = pool.get('product.template') Product = pool.get('product.product') Category = pool.get('product.category') Carrier = pool.get('carrier') party, = Party.create([{ 'name': 'Carrier', }]) uom, = Uom.search([ ('name', '=', 'Unit'), ]) category, = Category.create([{ 'name': 'Category', }]) template, = Template.create([{ 'name': 'Carrier', 'default_uom': uom.id, 'category': category.id, 'type': 'service', 'list_price': Decimal(0), 'cost_price': Decimal(0), }]) product, = Product.create([{ 'template': template.id, }]) currency = create_currency('cu1') carrier, = Carrier.create([{ 'party': party.id, 'carrier_product': product.id, 'carrier_cost_method': 'percentage', 'percentage': Decimal(15), }]) for amount, price in [ (Decimal(0), Decimal(0)), (Decimal(100), Decimal('15.00')), (Decimal(150), Decimal('22.50')), ]: self.assertEqual( carrier.compute_percentage(amount, currency.id), (price, currency.id))
def test_payment_term_with_empty_value(self): 'Test payment_term with empty' pool = Pool() PaymentTerm = pool.get('account.invoice.payment_term') cu1 = create_currency('cu1') remainder_term, percent_term = PaymentTerm.create([{ 'name': 'Remainder', 'lines': [ ('create', [{'type': 'remainder', 'relativedeltas': [('create', [{ 'months': 1, }, ]), ], }])] }, { 'name': '25% tomorrow, remainder un month later ', 'lines': [ ('create', [{'type': 'percent', 'divisor': 4, 'ratio': Decimal('.25'), 'relativedeltas': [('create', [{ 'days': 1, }, ]), ], }, {'type': 'remainder', 'relativedeltas': [('create', [{ 'months': 1, }, ]), ], }])] }]) terms = remainder_term.compute(Decimal('0.0'), cu1, date=datetime.date(2016, 5, 17)) self.assertEqual(terms, [ (datetime.date(2016, 5, 17), Decimal('0.0')), ]) terms = percent_term.compute(Decimal('0.0'), cu1, date=datetime.date(2016, 5, 17)) self.assertEqual(terms, [ (datetime.date(2016, 5, 17), Decimal('0.0')), ])
def test_account_distribute(self): "Test account distribute" pool = Pool() Account = pool.get('analytic_account.account') Distribution = pool.get('analytic_account.account.distribution') currency = create_currency('usd') account1 = Account(type='normal', currency=currency) account2 = Account(type='normal', currency=currency) account = Account(type='distribution', currency=currency) account.distributions = [ Distribution(account=account1, ratio=Decimal('0.7')), Distribution(account=account2, ratio=Decimal('0.3')), ] self.assertListEqual(account.distribute(Decimal('100.03')), [(account1, Decimal('70.02')), (account2, Decimal('30.01'))])
def test_account_distribute_remainder(self): "Test account distribute remainder" pool = Pool() Account = pool.get('analytic_account.account') Distribution = pool.get('analytic_account.account.distribution') currency = create_currency('usd') account1 = Account(type='normal', currency=currency) account2 = Account(type='normal', currency=currency) account3 = Account(type='normal', currency=currency) account = Account(type='distribution', currency=currency) account.distributions = [ Distribution(account=account1, ratio=Decimal('0.5')), Distribution(account=account2, ratio=Decimal('0.375')), Distribution(account=account3, ratio=Decimal('0.125')), ] self.assertListEqual(account.distribute(Decimal('65.35')), [(account1, Decimal('32.67')), (account2, Decimal('24.51')), (account3, Decimal('8.17'))])
def test_compute_percentage(self): 'Test compute_percentage' pool = Pool() Party = pool.get('party.party') Uom = pool.get('product.uom') Template = pool.get('product.template') Product = pool.get('product.product') Carrier = pool.get('carrier') party, = Party.create([{ 'name': 'Carrier', }]) uom, = Uom.search([ ('name', '=', 'Unit'), ]) template, = Template.create([{ 'name': 'Carrier', 'default_uom': uom.id, 'type': 'service', 'list_price': Decimal(0), 'cost_price': Decimal(0), }]) product, = Product.create([{ 'template': template.id, }]) currency = create_currency('cu1') carrier, = Carrier.create([{ 'party': party.id, 'carrier_product': product.id, 'carrier_cost_method': 'percentage', 'percentage': Decimal(15), }]) for amount, price in [ (Decimal(0), Decimal(0)), (Decimal(100), Decimal('15.00')), (Decimal(150), Decimal('22.50')), ]: self.assertEqual( carrier.compute_percentage(amount, currency.id), (price, currency.id))
def setup_environment(): pool = Pool() Address = pool.get('party.address') Party = pool.get('party.party') Bank = pool.get('bank') currency = create_currency('EUR') company = create_company(currency=currency) company.party.sepa_creditor_identifier = 'BE68539007547034' company.party.save() bank_party = Party(name='European Bank') bank_party.save() bank = Bank(party=bank_party, bic='BICODEBBXXX') bank.save() customer = Party(name='Customer') address = Address(street='street', streetbis='street bis', zip='1234', city='City') customer.addresses = [address] customer.save() return { 'company': company, 'bank': bank, 'customer': customer, }
def test_account_debit_credit(self): 'Test account debit/credit' pool = Pool() Party = pool.get('party.party') FiscalYear = pool.get('account.fiscalyear') Journal = pool.get('account.journal') Account = pool.get('account.account') Move = pool.get('account.move') party = Party(name='Party') party.save() company = create_company() with set_company(company): fiscalyear = get_fiscalyear(company) fiscalyear.save() FiscalYear.create_period([fiscalyear]) period = fiscalyear.periods[0] create_chart(company) sec_cur = create_currency('sec') journal_revenue, = Journal.search([ ('code', '=', 'REV'), ]) journal_expense, = Journal.search([ ('code', '=', 'EXP'), ]) revenue, = Account.search([ ('kind', '=', 'revenue'), ]) receivable, = Account.search([ ('kind', '=', 'receivable'), ]) expense, = Account.search([ ('kind', '=', 'expense'), ]) payable, = Account.search([ ('kind', '=', 'payable'), ]) cash, = Account.search([ ('kind', '=', 'other'), ('name', '=', 'Main Cash'), ]) cash_cur, = Account.copy([cash], default={ 'second_currency': sec_cur.id, }) # Create some moves vlist = [ { 'period': period.id, 'journal': journal_revenue.id, 'date': period.start_date, 'lines': [ ('create', [{ 'account': revenue.id, 'credit': Decimal(100), }, { 'account': receivable.id, 'debit': Decimal(100), 'party': party.id, }]), ], }, { 'period': period.id, 'journal': journal_revenue.id, 'date': period.start_date, 'lines': [ ('create', [{ 'account': receivable.id, 'credit': Decimal(80), 'second_currency': sec_cur.id, 'amount_second_currency': -Decimal(50), 'party': party.id, }, { 'account': cash_cur.id, 'debit': Decimal(80), 'second_currency': sec_cur.id, 'amount_second_currency': Decimal(50), }]), ], }, { 'period': period.id, 'journal': journal_expense.id, 'date': period.start_date, 'lines': [ ('create', [{ 'account': expense.id, 'debit': Decimal(30), }, { 'account': payable.id, 'credit': Decimal(30), 'party': party.id, }]), ], }, ] Move.create(vlist) # Test debit/credit self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(100))) self.assertEqual(revenue.balance, Decimal(-100)) self.assertEqual((cash_cur.debit, cash_cur.credit), (Decimal(80), Decimal(0))) self.assertEqual( cash_cur.amount_second_currency, Decimal(50)) # Use next fiscalyear today = datetime.date.today() next_fiscalyear = get_fiscalyear(company, today=today.replace(year=today.year + 1)) next_fiscalyear.save() FiscalYear.create_period([next_fiscalyear]) # Test debit/credit for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(0))) self.assertEqual(revenue.balance, Decimal(-100)) cash_cur = Account(cash_cur.id) self.assertEqual( cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit cumulate for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id, cumulate=True): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(100))) self.assertEqual(revenue.balance, Decimal(-100)) cash_cur = Account(cash_cur.id) self.assertEqual( cash_cur.amount_second_currency, Decimal(50)) close_fiscalyear(fiscalyear) # Check deferral self.assertEqual(revenue.deferrals, ()) deferral_receivable, = receivable.deferrals self.assertEqual( (deferral_receivable.debit, deferral_receivable.credit), (Decimal(100), Decimal(80))) self.assertEqual(deferral_receivable.fiscalyear, fiscalyear) cash_cur = Account(cash_cur.id) deferral_cash_cur, = cash_cur.deferrals self.assertEqual( deferral_cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit with Transaction().set_context(fiscalyear=fiscalyear.id): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(100), Decimal(100))) self.assertEqual(revenue.balance, Decimal(0)) receivable = Account(receivable.id) self.assertEqual((receivable.debit, receivable.credit), (Decimal(100), Decimal(80))) self.assertEqual(receivable.balance, Decimal(20)) cash_cur = Account(cash_cur.id) self.assertEqual( cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(0))) self.assertEqual(revenue.balance, Decimal(0)) receivable = Account(receivable.id) self.assertEqual((receivable.debit, receivable.credit), (Decimal(0), Decimal(0))) self.assertEqual(receivable.balance, Decimal(20)) cash_cur = Account(cash_cur.id) self.assertEqual( cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit cumulate for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id, cumulate=True): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(0))) self.assertEqual(revenue.balance, Decimal(0)) receivable = Account(receivable.id) self.assertEqual((receivable.debit, receivable.credit), (Decimal(100), Decimal(80))) self.assertEqual(receivable.balance, Decimal(20)) cash_cur = Account(cash_cur.id) self.assertEqual( cash_cur.amount_second_currency, Decimal(50))
def test_invoice_generation(self): 'Test invoice generation' pool = Pool() Account = pool.get('account.account') FiscalYear = pool.get('account.fiscalyear') Invoice = pool.get('account.invoice') InvoiceLine = pool.get('account.invoice.line') Party = pool.get('party.party') PaymentTerm = pool.get('account.invoice.payment_term') ProductUom = pool.get('product.uom') ProductCategory = pool.get('product.category') ProductTemplate = pool.get('product.template') Product = pool.get('product.product') Tax = pool.get('account.tax') Address = pool.get('party.address') PartyIdentifier = pool.get('party.identifier') Country = pool.get('country.country') Subdivision = pool.get('country.subdivision') PaymentType = pool.get('account.payment.type') country = Country(name='Country', code='ES', code3='ESP') country.save() subdivision = Subdivision(name='Subdivision', country=country, code='SUB', type='province') subdivision.save() company = create_company() currency = create_currency('EUR') add_currency_rate(currency, 1.0) tax_identifier = PartyIdentifier() tax_identifier.type = 'eu_vat' tax_identifier.code = 'BE0897290877' company.header = 'Report Header' company.party.name = 'Seller' company.party.identifiers = [tax_identifier] company.party.facturae_person_type = 'J' company.party.facturae_residence_type = 'R' company.party.save() company.save() # Save certificate into company with open(os.path.join(CURRENT_PATH, 'certificate.pfx'), 'rb') as cert_file: company.facturae_certificate = cert_file.read() payment_term, = PaymentTerm.create([{ 'name': '20 days, 40 days', 'lines': [('create', [{ 'sequence': 0, 'type': 'percent', 'divisor': 2, 'ratio': Decimal('.5'), 'relativedeltas': [ ('create', [ { 'days': 20, }, ]), ], }, { 'sequence': 1, 'type': 'remainder', 'relativedeltas': [ ('create', [ { 'days': 40, }, ]), ], }])] }]) with set_company(company): create_chart(company, tax=True) fiscalyear = set_invoice_sequences(get_fiscalyear(company)) fiscalyear.save() FiscalYear.create_period([fiscalyear]) payment_receivable, = PaymentType.create([{ 'name': 'Payment Receivable', 'kind': 'receivable', 'company': company.id, 'facturae_type': '01', }]) revenue, = Account.search([('type.revenue', '=', True)]) expense, = Account.search([('type.expense', '=', True)]) tax_account, = Account.search([ ('name', '=', 'Main Tax'), ]) with Transaction().set_user(0): vat21 = Tax() vat21.name = vat21.description = '21% VAT' vat21.type = 'percentage' vat21.rate = Decimal('0.21') vat21.invoice_account = tax_account vat21.report_type = '05' vat21.credit_note_account = tax_account vat21.save() company_address, = company.party.addresses company_address.street = 'street' company_address.zip = '08201' company_address.city = 'City' company_address.subdivision = subdivision company_address.country = country company_address.save() party = Party(name='Buyer') party.facturae_person_type = 'J' party.facturae_residence_type = 'R' tax_identifier = PartyIdentifier() tax_identifier.type = 'eu_vat' tax_identifier.code = 'BE0897290877' party.identifiers = [tax_identifier] party.save() address_dict = { 'party': party.id, 'street': 'St sample, 15', 'city': 'City', 'zip': '08201', 'subdivision': subdivision.id, 'country': country.id, } address, = Address.create([address_dict]) term, = PaymentTerm.create([{ 'name': 'Payment term', 'lines': [('create', [{ 'type': 'remainder', 'relativedeltas': [('create', [{ 'sequence': 0, 'days': 0, 'months': 0, 'weeks': 0, }])], }])], }]) account_category = ProductCategory() account_category.name = 'Account Category' account_category.accounting = True account_category.account_expense = expense account_category.account_revenue = revenue account_category.customer_taxes = [vat21] account_category.save() unit, = ProductUom.search([('name', '=', 'Unit')]) 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 = Product() product.template = template product.save() currency = create_currency('Eur') add_currency_rate(currency, 1) with Transaction().set_user(0): invoice = Invoice() invoice.type = 'out' invoice.on_change_type() invoice.party = party invoice.on_change_party() invoice.payment_type = payment_receivable invoice.payment_term = term invoice.currency = currency invoice.company = company invoice.payment_term = invoice.on_change_with_payment_term() invoice.account = invoice.on_change_with_account() line1 = InvoiceLine() line1.product = product line1.on_change_product() line1.on_change_account() line1.quantity = 5 line1.unit_price = Decimal('40') line2 = InvoiceLine() line2.account = revenue line2.on_change_account() line2.product = product line2.on_change_product() line2.description = 'Test' line2.quantity = 1 line2.unit_price = Decimal(20) invoice.lines = [line1, line2] invoice.on_change_lines() invoice.save() Invoice.post([invoice]) Invoice.generate_facturae_default([invoice], 'privatepassword')
def test_account_debit_credit(self): 'Test account debit/credit' pool = Pool() Party = pool.get('party.party') FiscalYear = pool.get('account.fiscalyear') Journal = pool.get('account.journal') Account = pool.get('account.account') Move = pool.get('account.move') party = Party(name='Party') party.save() company = create_company() with set_company(company): fiscalyear = get_fiscalyear(company) fiscalyear.save() FiscalYear.create_period([fiscalyear]) period = fiscalyear.periods[0] create_chart(company) sec_cur = create_currency('sec') journal_revenue, = Journal.search([ ('code', '=', 'REV'), ]) journal_expense, = Journal.search([ ('code', '=', 'EXP'), ]) revenue, = Account.search([ ('kind', '=', 'revenue'), ]) receivable, = Account.search([ ('kind', '=', 'receivable'), ]) expense, = Account.search([ ('kind', '=', 'expense'), ]) payable, = Account.search([ ('kind', '=', 'payable'), ]) cash, = Account.search([ ('kind', '=', 'other'), ('name', '=', 'Main Cash'), ]) cash_cur, = Account.copy([cash], default={ 'second_currency': sec_cur.id, }) # Create some moves vlist = [ { 'period': period.id, 'journal': journal_revenue.id, 'date': period.start_date, 'lines': [ ('create', [{ 'account': revenue.id, 'credit': Decimal(100), }, { 'account': receivable.id, 'debit': Decimal(100), 'party': party.id, }]), ], }, { 'period': period.id, 'journal': journal_revenue.id, 'date': period.start_date, 'lines': [ ('create', [{ 'account': receivable.id, 'credit': Decimal(80), 'second_currency': sec_cur.id, 'amount_second_currency': -Decimal(50), 'party': party.id, }, { 'account': cash_cur.id, 'debit': Decimal(80), 'second_currency': sec_cur.id, 'amount_second_currency': Decimal(50), }]), ], }, { 'period': period.id, 'journal': journal_expense.id, 'date': period.start_date, 'lines': [ ('create', [{ 'account': expense.id, 'debit': Decimal(30), }, { 'account': payable.id, 'credit': Decimal(30), 'party': party.id, }]), ], }, ] Move.create(vlist) # Test debit/credit self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(100))) self.assertEqual(revenue.balance, Decimal(-100)) self.assertEqual((cash_cur.debit, cash_cur.credit), (Decimal(80), Decimal(0))) self.assertEqual(cash_cur.amount_second_currency, Decimal(50)) # Use next fiscalyear today = datetime.date.today() next_fiscalyear = get_fiscalyear( company, today=today.replace(year=today.year + 1)) next_fiscalyear.save() FiscalYear.create_period([next_fiscalyear]) # Test debit/credit for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(0))) self.assertEqual(revenue.balance, Decimal(-100)) cash_cur = Account(cash_cur.id) self.assertEqual(cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit cumulate for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id, cumulate=True): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(100))) self.assertEqual(revenue.balance, Decimal(-100)) cash_cur = Account(cash_cur.id) self.assertEqual(cash_cur.amount_second_currency, Decimal(50)) close_fiscalyear(fiscalyear) # Check deferral self.assertEqual(revenue.deferrals, ()) deferral_receivable, = receivable.deferrals self.assertEqual( (deferral_receivable.debit, deferral_receivable.credit), (Decimal(100), Decimal(80))) self.assertEqual(deferral_receivable.fiscalyear, fiscalyear) cash_cur = Account(cash_cur.id) deferral_cash_cur, = cash_cur.deferrals self.assertEqual(deferral_cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit with Transaction().set_context(fiscalyear=fiscalyear.id): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(100), Decimal(100))) self.assertEqual(revenue.balance, Decimal(0)) receivable = Account(receivable.id) self.assertEqual((receivable.debit, receivable.credit), (Decimal(100), Decimal(80))) self.assertEqual(receivable.balance, Decimal(20)) cash_cur = Account(cash_cur.id) self.assertEqual(cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(0))) self.assertEqual(revenue.balance, Decimal(0)) receivable = Account(receivable.id) self.assertEqual((receivable.debit, receivable.credit), (Decimal(0), Decimal(0))) self.assertEqual(receivable.balance, Decimal(20)) cash_cur = Account(cash_cur.id) self.assertEqual(cash_cur.amount_second_currency, Decimal(50)) # Test debit/credit cumulate for next year with Transaction().set_context(fiscalyear=next_fiscalyear.id, cumulate=True): revenue = Account(revenue.id) self.assertEqual((revenue.debit, revenue.credit), (Decimal(0), Decimal(0))) self.assertEqual(revenue.balance, Decimal(0)) receivable = Account(receivable.id) self.assertEqual((receivable.debit, receivable.credit), (Decimal(100), Decimal(80))) self.assertEqual(receivable.balance, Decimal(20)) cash_cur = Account(cash_cur.id) self.assertEqual(cash_cur.amount_second_currency, Decimal(50))