Merge
This commit is contained in:
commit
9efee5bbf8
|
@ -1,315 +0,0 @@
|
|||
Index: invoice.py
|
||||
===================================================================
|
||||
|
||||
--- a/modules/account_invoice/invoice.py
|
||||
+++ b/modules/account_invoice/invoice.py
|
||||
@@ -916,8 +918,10 @@
|
||||
total = Decimal('0.0')
|
||||
total_currency = Decimal('0.0')
|
||||
for line in move_lines:
|
||||
- total += line['debit'] - line['credit']
|
||||
- total_currency += line['amount_second_currency']
|
||||
+ debit_credit = line['debit'] - line['credit']
|
||||
+ total += debit_credit
|
||||
+ total_currency += line['amount_second_currency'].copy_sign(
|
||||
+ debit_credit)
|
||||
|
||||
term_lines = self.payment_term.compute(total, self.company.currency,
|
||||
self.invoice_date)
|
||||
|
||||
Index: tests/scenario_invoice_alternate_currency.rst
|
||||
===================================================================
|
||||
new file mode 100644
|
||||
|
||||
--- /dev/null
|
||||
+++ b/modules/account_invoice/tests/scenario_invoice_alternate_currency.rst
|
||||
@@ -0,0 +1,272 @@
|
||||
+===================================
|
||||
+Invoice Scenario Alternate Currency
|
||||
+===================================
|
||||
+
|
||||
+Imports::
|
||||
+
|
||||
+ >>> import datetime
|
||||
+ >>> from dateutil.relativedelta import relativedelta
|
||||
+ >>> from decimal import Decimal
|
||||
+ >>> from operator import attrgetter
|
||||
+ >>> from proteus import config, Model, Wizard
|
||||
+ >>> today = datetime.date.today()
|
||||
+
|
||||
+Create database::
|
||||
+
|
||||
+ >>> config = config.set_trytond()
|
||||
+ >>> config.pool.test = True
|
||||
+
|
||||
+Install account_invoice::
|
||||
+
|
||||
+ >>> Module = Model.get('ir.module.module')
|
||||
+ >>> account_invoice_module, = Module.find(
|
||||
+ ... [('name', '=', 'account_invoice')])
|
||||
+ >>> Module.install([account_invoice_module.id], config.context)
|
||||
+ >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
|
||||
+
|
||||
+Create company::
|
||||
+
|
||||
+ >>> Currency = Model.get('currency.currency')
|
||||
+ >>> CurrencyRate = Model.get('currency.currency.rate')
|
||||
+ >>> currencies = Currency.find([('code', '=', 'USD')])
|
||||
+ >>> if not currencies:
|
||||
+ ... currency = Currency(name='US Dollar', symbol=u'$', code='USD',
|
||||
+ ... rounding=Decimal('0.01'), mon_grouping='[]',
|
||||
+ ... mon_decimal_point='.')
|
||||
+ ... currency.save()
|
||||
+ ... CurrencyRate(date=today + relativedelta(month=1, day=1),
|
||||
+ ... rate=Decimal('1.0'), currency=currency).save()
|
||||
+ ... else:
|
||||
+ ... currency, = currencies
|
||||
+ >>> currencies = Currency.find([('code', '=', 'EUR')])
|
||||
+ >>> if not currencies:
|
||||
+ ... eur = Currency(name='Euro', symbol=u'€', code='EUR',
|
||||
+ ... rounding=Decimal('0.01'), mon_grouping='[]',
|
||||
+ ... mon_decimal_point='.')
|
||||
+ ... eur.save()
|
||||
+ ... CurrencyRate(date=today + relativedelta(month=1, day=1),
|
||||
+ ... rate=Decimal('2.0'), currency=eur).save()
|
||||
+ ... else:
|
||||
+ ... eur, = currencies
|
||||
+
|
||||
+ >>> Company = Model.get('company.company')
|
||||
+ >>> Party = Model.get('party.party')
|
||||
+ >>> company_config = Wizard('company.company.config')
|
||||
+ >>> company_config.execute('company')
|
||||
+ >>> company = company_config.form
|
||||
+ >>> party = Party(name='Dunder Mifflin')
|
||||
+ >>> party.save()
|
||||
+ >>> company.party = party
|
||||
+ >>> company.currency = currency
|
||||
+ >>> company_config.execute('add')
|
||||
+ >>> company, = Company.find([])
|
||||
+
|
||||
+Reload the context::
|
||||
+
|
||||
+ >>> User = Model.get('res.user')
|
||||
+ >>> config._context = User.get_preferences(True, config.context)
|
||||
+
|
||||
+Create fiscal year::
|
||||
+
|
||||
+ >>> FiscalYear = Model.get('account.fiscalyear')
|
||||
+ >>> Sequence = Model.get('ir.sequence')
|
||||
+ >>> SequenceStrict = Model.get('ir.sequence.strict')
|
||||
+ >>> fiscalyear = FiscalYear(name=str(today.year))
|
||||
+ >>> fiscalyear.start_date = today + relativedelta(month=1, day=1)
|
||||
+ >>> fiscalyear.end_date = today + relativedelta(month=12, day=31)
|
||||
+ >>> fiscalyear.company = company
|
||||
+ >>> post_move_seq = Sequence(name=str(today.year), code='account.move',
|
||||
+ ... company=company)
|
||||
+ >>> post_move_seq.save()
|
||||
+ >>> fiscalyear.post_move_sequence = post_move_seq
|
||||
+ >>> invoice_seq = SequenceStrict(name=str(today.year),
|
||||
+ ... code='account.invoice', company=company)
|
||||
+ >>> invoice_seq.save()
|
||||
+ >>> fiscalyear.out_invoice_sequence = invoice_seq
|
||||
+ >>> fiscalyear.in_invoice_sequence = invoice_seq
|
||||
+ >>> fiscalyear.out_credit_note_sequence = invoice_seq
|
||||
+ >>> fiscalyear.in_credit_note_sequence = invoice_seq
|
||||
+ >>> fiscalyear.save()
|
||||
+ >>> FiscalYear.create_period([fiscalyear.id], config.context)
|
||||
+
|
||||
+Create chart of accounts::
|
||||
+
|
||||
+ >>> AccountTemplate = Model.get('account.account.template')
|
||||
+ >>> Account = Model.get('account.account')
|
||||
+ >>> account_template, = AccountTemplate.find([('parent', '=', None)])
|
||||
+ >>> create_chart = Wizard('account.create_chart')
|
||||
+ >>> create_chart.execute('account')
|
||||
+ >>> create_chart.form.account_template = account_template
|
||||
+ >>> create_chart.form.company = company
|
||||
+ >>> create_chart.execute('create_account')
|
||||
+ >>> receivable, = Account.find([
|
||||
+ ... ('kind', '=', 'receivable'),
|
||||
+ ... ('company', '=', company.id),
|
||||
+ ... ])
|
||||
+ >>> payable, = Account.find([
|
||||
+ ... ('kind', '=', 'payable'),
|
||||
+ ... ('company', '=', company.id),
|
||||
+ ... ])
|
||||
+ >>> revenue, = Account.find([
|
||||
+ ... ('kind', '=', 'revenue'),
|
||||
+ ... ('company', '=', company.id),
|
||||
+ ... ])
|
||||
+ >>> expense, = Account.find([
|
||||
+ ... ('kind', '=', 'expense'),
|
||||
+ ... ('company', '=', company.id),
|
||||
+ ... ])
|
||||
+ >>> account_tax, = Account.find([
|
||||
+ ... ('kind', '=', 'other'),
|
||||
+ ... ('company', '=', company.id),
|
||||
+ ... ('name', '=', 'Main Tax'),
|
||||
+ ... ])
|
||||
+ >>> create_chart.form.account_receivable = receivable
|
||||
+ >>> create_chart.form.account_payable = payable
|
||||
+ >>> create_chart.execute('create_properties')
|
||||
+
|
||||
+Create tax::
|
||||
+
|
||||
+ >>> TaxCode = Model.get('account.tax.code')
|
||||
+ >>> Tax = Model.get('account.tax')
|
||||
+ >>> tax = Tax()
|
||||
+ >>> tax.name = 'Tax'
|
||||
+ >>> tax.description = 'Tax'
|
||||
+ >>> tax.type = 'percentage'
|
||||
+ >>> tax.rate = Decimal('.10')
|
||||
+ >>> tax.invoice_account = account_tax
|
||||
+ >>> tax.credit_note_account = account_tax
|
||||
+ >>> invoice_base_code = TaxCode(name='invoice base')
|
||||
+ >>> invoice_base_code.save()
|
||||
+ >>> tax.invoice_base_code = invoice_base_code
|
||||
+ >>> invoice_tax_code = TaxCode(name='invoice tax')
|
||||
+ >>> invoice_tax_code.save()
|
||||
+ >>> tax.invoice_tax_code = invoice_tax_code
|
||||
+ >>> credit_note_base_code = TaxCode(name='credit note base')
|
||||
+ >>> credit_note_base_code.save()
|
||||
+ >>> tax.credit_note_base_code = credit_note_base_code
|
||||
+ >>> credit_note_tax_code = TaxCode(name='credit note tax')
|
||||
+ >>> credit_note_tax_code.save()
|
||||
+ >>> tax.credit_note_tax_code = credit_note_tax_code
|
||||
+ >>> tax.save()
|
||||
+
|
||||
+Create party::
|
||||
+
|
||||
+ >>> Party = Model.get('party.party')
|
||||
+ >>> party = Party(name='Party')
|
||||
+ >>> party.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_expense = expense
|
||||
+ >>> template.account_revenue = revenue
|
||||
+ >>> template.customer_taxes.append(tax)
|
||||
+ >>> template.save()
|
||||
+ >>> product.template = template
|
||||
+ >>> product.save()
|
||||
+
|
||||
+Create payment term::
|
||||
+
|
||||
+ >>> PaymentTerm = Model.get('account.invoice.payment_term')
|
||||
+ >>> PaymentTermLine = Model.get('account.invoice.payment_term.line')
|
||||
+ >>> payment_term = PaymentTerm(name='Term')
|
||||
+ >>> payment_term_line = PaymentTermLine(type='percent', days=20,
|
||||
+ ... percentage=Decimal(50))
|
||||
+ >>> payment_term.lines.append(payment_term_line)
|
||||
+ >>> payment_term_line = PaymentTermLine(type='remainder', days=40)
|
||||
+ >>> payment_term.lines.append(payment_term_line)
|
||||
+ >>> payment_term.save()
|
||||
+
|
||||
+Create invoice with alternate currency::
|
||||
+
|
||||
+ >>> Invoice = Model.get('account.invoice')
|
||||
+ >>> invoice = Invoice()
|
||||
+ >>> invoice.party = party
|
||||
+ >>> invoice.payment_term = payment_term
|
||||
+ >>> invoice.currency = eur
|
||||
+ >>> line = invoice.lines.new()
|
||||
+ >>> line.product = product
|
||||
+ >>> line.quantity = 5
|
||||
+ >>> line.amount
|
||||
+ Decimal('400.00')
|
||||
+ >>> line = invoice.lines.new()
|
||||
+ >>> line.account = revenue
|
||||
+ >>> line.description = 'Test'
|
||||
+ >>> line.quantity = 1
|
||||
+ >>> line.unit_price = Decimal(20)
|
||||
+ >>> line.amount == Decimal('20.00')
|
||||
+ True
|
||||
+ >>> invoice.untaxed_amount == Decimal('420.00')
|
||||
+ True
|
||||
+ >>> invoice.tax_amount == Decimal('40.00')
|
||||
+ True
|
||||
+ >>> invoice.total_amount == Decimal('460.00')
|
||||
+ True
|
||||
+ >>> invoice.save()
|
||||
+ >>> Invoice.post([invoice.id], config.context)
|
||||
+ >>> invoice.reload()
|
||||
+ >>> invoice.state
|
||||
+ u'posted'
|
||||
+ >>> invoice.untaxed_amount == Decimal('420.00')
|
||||
+ True
|
||||
+ >>> invoice.tax_amount == Decimal('40.00')
|
||||
+ True
|
||||
+ >>> invoice.total_amount == Decimal('460.00')
|
||||
+ True
|
||||
+
|
||||
+Create negative tax::
|
||||
+
|
||||
+ >>> negative_tax = Tax()
|
||||
+ >>> negative_tax.name = 'Negative Tax'
|
||||
+ >>> negative_tax.description = 'Negative Tax'
|
||||
+ >>> negative_tax.type = 'percentage'
|
||||
+ >>> negative_tax.rate = Decimal('-.10')
|
||||
+ >>> negative_tax.invoice_account = account_tax
|
||||
+ >>> negative_tax.credit_note_account = account_tax
|
||||
+ >>> negative_tax.invoice_base_code = invoice_base_code
|
||||
+ >>> negative_tax.invoice_tax_code = invoice_tax_code
|
||||
+ >>> negative_tax.credit_note_base_code = credit_note_base_code
|
||||
+ >>> negative_tax.credit_note_tax_code = credit_note_tax_code
|
||||
+ >>> negative_tax.save()
|
||||
+
|
||||
+Create invoice with alternate currency and negative taxes::
|
||||
+
|
||||
+ >>> Invoice = Model.get('account.invoice')
|
||||
+ >>> invoice = Invoice()
|
||||
+ >>> invoice.party = party
|
||||
+ >>> invoice.payment_term = payment_term
|
||||
+ >>> invoice.currency = eur
|
||||
+ >>> line = invoice.lines.new()
|
||||
+ >>> line.product = product
|
||||
+ >>> line.quantity = 5
|
||||
+ >>> line.taxes.append(negative_tax)
|
||||
+ >>> line.amount == Decimal('400.00')
|
||||
+ True
|
||||
+ >>> invoice.untaxed_amount == Decimal('400.00')
|
||||
+ True
|
||||
+ >>> invoice.tax_amount == Decimal('0.00')
|
||||
+ True
|
||||
+ >>> invoice.total_amount == Decimal('400.00')
|
||||
+ True
|
||||
+ >>> invoice.save()
|
||||
+ >>> Invoice.post([invoice.id], config.context)
|
||||
+ >>> invoice.reload()
|
||||
+ >>> invoice.state
|
||||
+ u'posted'
|
||||
+ >>> invoice.untaxed_amount == Decimal('400.00')
|
||||
+ True
|
||||
+ >>> invoice.tax_amount == Decimal('0.00')
|
||||
+ True
|
||||
+ >>> invoice.total_amount == Decimal('400.00')
|
||||
+ True
|
||||
+
|
||||
|
||||
Index: tests/test_account_invoice.py
|
||||
===================================================================
|
||||
|
||||
--- a/modules/account_invoice/tests/test_account_invoice.py
|
||||
+++ b/modules/account_invoice/tests/test_account_invoice.py
|
||||
@@ -113,6 +113,9 @@
|
||||
suite.addTests(doctest.DocFileSuite('scenario_invoice_supplier.rst',
|
||||
setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
|
||||
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
|
||||
+ suite.addTests(doctest.DocFileSuite('scenario_invoice_alternate_currency.rst',
|
||||
+ setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
|
||||
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
|
||||
return suite
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
Reference in New Issue