=================================================
Invoice Scenario Alternate Currency with Exchange
=================================================

Imports::

    >>> import datetime as dt
    >>> 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 (
    ...     set_fiscalyear_invoice_sequences)
    >>> from trytond.modules.company.tests.tools import create_company
    >>> from trytond.modules.currency.tests.tools import get_currency
    >>> from trytond.tests.tools import activate_modules

    >>> today = dt.date.today()

Activate modules::

    >>> config = activate_modules('account_invoice')

    >>> Configuration = Model.get('account.configuration')
    >>> Invoice = Model.get('account.invoice')
    >>> Party = Model.get('party.party')
    >>> PaymentTerm = Model.get('account.invoice.payment_term')

Create company::

    >>> currency = get_currency('USD')
    >>> eur = get_currency('EUR')
    >>> _ = create_company(currency=currency)

Set alternate currency rates::

    >>> rate, = eur.rates
    >>> rate.rate = Decimal('0.3')
    >>> eur.save()

Create fiscal years::

    >>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
    >>> fiscalyear.click('create_period')

Create chart of accounts::

    >>> _ = create_chart()
    >>> accounts = get_accounts()

Configure currency exchange::

    >>> currency_exchange_account, = (
    ...     accounts['revenue'].duplicate(
    ...         default={'name': "Currency Exchange"}))
    >>> configuration = Configuration(1)
    >>> configuration.currency_exchange_credit_account = (
    ...     currency_exchange_account)
    >>> configuration.save()

Create payment term::

    >>> payment_term = PaymentTerm(name="Payment Term")
    >>> line = payment_term.lines.new(type='percent', ratio=Decimal('.5'))
    >>> line = payment_term.lines.new(type='remainder')
    >>> payment_term.save()

Create party::

    >>> party = Party(name="Party")
    >>> party.save()

Create invoice::

    >>> invoice = Invoice(party=party)
    >>> invoice.currency = eur
    >>> invoice.payment_term = payment_term
    >>> line = invoice.lines.new()
    >>> line.account = accounts['revenue']
    >>> line.quantity = 1
    >>> line.unit_price = Decimal('100.0000')
    >>> invoice.invoice_date = today
    >>> invoice.click('post')
    >>> invoice.state
    'posted'
    >>> invoice.total_amount
    Decimal('100.00')

Check accounts::

    >>> accounts['receivable'].reload()
    >>> accounts['receivable'].balance
    Decimal('333.34')
    >>> accounts['receivable'].amount_second_currency
    Decimal('100.00')

    >>> currency_exchange_account.reload()
    >>> currency_exchange_account.balance
    Decimal('-0.01')
