Skip to content
This repository has been archived by the owner on Jan 7, 2023. It is now read-only.

Latest commit

 

History

History
154 lines (118 loc) · 4.02 KB

scenario_account_payment_invoice.rst

File metadata and controls

154 lines (118 loc) · 4.02 KB

Invoice Payment Scenario

Imports::
>>> import datetime
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
>>> from trytond.tests.tools import activate_modules
>>> from trytond.modules.company.tests.tools import create_company, \
...     get_company
>>> from trytond.modules.account.tests.tools import create_fiscalyear, \
...     create_chart, get_accounts
>>> from trytond.modules.account_invoice.tests.tools import \
...     set_fiscalyear_invoice_sequences

Activate modules:

>>> config = activate_modules(['account_payment', 'account_invoice'])

Create company:

>>> _ = create_company()
>>> company = get_company()

Create fiscal year:

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

Create chart of accounts:

>>> _ = create_chart(company)
>>> accounts = get_accounts(company)
>>> payable = accounts['payable']
>>> receivable = accounts['receivable']
>>> revenue = accounts['revenue']

>>> Journal = Model.get('account.journal')
>>> expense, = Journal.find([('code', '=', 'EXP')])

Create payment journal:

>>> PaymentJournal = Model.get('account.payment.journal')
>>> payment_journal = PaymentJournal(name='Manual',
...     process_method='manual')
>>> payment_journal.save()

Create party:

>>> Party = Model.get('party.party')
>>> party = Party(name='Party')
>>> party.save()

Create invoice:

>>> Invoice = Model.get('account.invoice')
>>> invoice = Invoice()
>>> invoice.party = party
>>> line = invoice.lines.new()
>>> line.description = 'Description'
>>> line.account = revenue
>>> line.quantity = 1
>>> line.unit_price = Decimal('100')
>>> invoice.click('post')
>>> invoice.state
'posted'
>>> invoice.amount_to_pay
Decimal('100.00')
>>> line_to_pay, = invoice.lines_to_pay
>>> bool(line_to_pay.payment_direct_debit)
False

Partially pay line:

>>> Payment = Model.get('account.payment')
>>> pay_line = Wizard('account.move.line.pay', [line_to_pay])
>>> pay_line.execute('next_')
>>> pay_line.execute('next_')
>>> payment, = Payment.find()
>>> payment.amount = Decimal('20')
>>> payment.click('submit')

Check amount to pay:

>>> invoice.reload()
>>> invoice.amount_to_pay
Decimal('80.00')

Process the payment:

>>> process_payment = Wizard('account.payment.process', [payment])
>>> process_payment.execute('process')

Check amount to pay:

>>> invoice.reload()
>>> invoice.amount_to_pay
Decimal('80.00')

Fail the payment:

>>> payment.click('fail')

Check amount to pay:

>>> invoice.reload()
>>> invoice.amount_to_pay
Decimal('100.00')

Create multiple valid payments for one line:

>>> line_to_pay, = invoice.lines_to_pay
>>> pay_line = Wizard('account.move.line.pay', [line_to_pay])
>>> pay_line.execute('next_')
>>> pay_line.execute('next_')
>>> pay_line = Wizard('account.move.line.pay', [line_to_pay])
>>> pay_line.execute('next_')
>>> pay_line.execute('next_')
>>> payments = Payment.find([('state', '=', 'draft')])
>>> for payment in payments:
...     payment.amount = Decimal('30')
>>> Payment.click(payments, 'submit')

Check amount to pay:

>>> invoice.reload()
>>> invoice.amount_to_pay
Decimal('40.00')

Set party as direct debit:

>>> party.payment_direct_debit = True
>>> party.save()

Create invoice:

>>> Invoice = Model.get('account.invoice')
>>> invoice = Invoice()
>>> invoice.party = party
>>> bool(invoice.payment_direct_debit)
True
>>> line = invoice.lines.new()
>>> line.description = 'Description'
>>> line.account = revenue
>>> line.quantity = 1
>>> line.unit_price = Decimal('50')
>>> invoice.click('post')
>>> invoice.state
'posted'
>>> line_to_pay, = invoice.lines_to_pay
>>> bool(line_to_pay.payment_direct_debit)
True