=========================
Renew Fiscalyear Scenario
=========================

Imports::

    >>> import datetime as dt

    >>> from proteus import Model, Wizard
    >>> from trytond.modules.account.tests.tools import create_fiscalyear
    >>> from trytond.modules.account_invoice.tests.tools import (
    ...     set_fiscalyear_invoice_sequences)
    >>> from trytond.modules.company.tests.tools import create_company
    >>> from trytond.tests.tools import activate_modules, assertEqual

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

Activate modules::

    >>> config = activate_modules('account_invoice', create_company)

Create fiscal year::

    >>> InvoiceSequence = Model.get('account.fiscalyear.invoice_sequence')
    >>> fiscalyear = create_fiscalyear(today=today)
    >>> fiscalyear = set_fiscalyear_invoice_sequences(fiscalyear)
    >>> fiscalyear.click('create_period')
    >>> inv_seq, = fiscalyear.invoice_sequences
    >>> seq = inv_seq.out_invoice_sequence
    >>> for period in fiscalyear.periods:
    ...     seq, = seq.duplicate()
    ...     _ = inv_seq.duplicate(default={
    ...             'period': period.id,
    ...             'out_invoice_sequence': seq.id,
    ...             'in_invoice_sequence': seq.id,
    ...             'out_credit_note_sequence': seq.id,
    ...             'in_credit_note_sequence': seq.id,
    ...             })
    >>> period = fiscalyear.periods.new()
    >>> period.name = 'Adjustment'
    >>> period.start_date = fiscalyear.end_date
    >>> period.end_date = fiscalyear.end_date
    >>> period.type = 'adjustment'
    >>> fiscalyear.save()

Set the sequence number::

    >>> sequence = fiscalyear.move_sequence
    >>> sequence.number_next = 10
    >>> sequence.save()

    >>> for i, seq in enumerate(fiscalyear.invoice_sequences):
    ...     seq.out_invoice_sequence.number_next = i
    ...     seq.out_invoice_sequence.save()

Renew fiscal year using the wizard::

    >>> renew_fiscalyear = Wizard('account.fiscalyear.renew')
    >>> renew_fiscalyear.form.reset_sequences = False
    >>> renew_fiscalyear.execute('create_')
    >>> new_fiscalyear, = renew_fiscalyear.actions[0]
    >>> len(new_fiscalyear.periods)
    12
    >>> int(new_fiscalyear.move_sequence.number_next)
    10
    >>> [int(seq.out_invoice_sequence.number_next)
    ...     for seq in fiscalyear.invoice_sequences]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Renew fiscal year resetting sequences::

    >>> renew_fiscalyear = Wizard('account.fiscalyear.renew')
    >>> renew_fiscalyear.form.reset_sequences = True
    >>> renew_fiscalyear.execute('create_')
    >>> new_fiscalyear, = renew_fiscalyear.actions[0]
    >>> int(new_fiscalyear.move_sequence.number_next)
    1
    >>> [int(seq.out_invoice_sequence.number_next)
    ...     for seq in new_fiscalyear.invoice_sequences]
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]


Set the sequence name::

    >>> for seq in new_fiscalyear.invoice_sequences:
    ...     seq.out_invoice_sequence.name = ('Sequence %s' %
    ...         new_fiscalyear.name)
    ...     seq.out_invoice_sequence.save()

Renew fiscalyear and test sequence name is updated::

    >>> renew_fiscalyear = Wizard('account.fiscalyear.renew')
    >>> renew_fiscalyear.form.reset_sequences = True
    >>> renew_fiscalyear.execute('create_')
    >>> new_fiscalyear, = renew_fiscalyear.actions[0]
    >>> for sequence in new_fiscalyear.invoice_sequences:
    ...     assertEqual(
    ...         sequence.out_invoice_sequence.name,
    ...         'Sequence %s' % new_fiscalyear.name)
