This commit is contained in:
Sergi Almacellas Abellana 2014-04-08 10:37:15 +02:00
commit 9efee5bbf8
2 changed files with 0 additions and 316 deletions

View File

@ -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__':

1
series
View File

@ -14,7 +14,6 @@ issue2311002_40001.diff
issue2341002_1_10001.diff
issue3111002_1.diff
issue134_399.diff
issue237_627.diff
issue4091002_40001.diff
issue239_630.diff
issue240_631.diff