trytond-contract-back/invoice.py

117 lines
3.9 KiB
Python
Raw Normal View History

2015-03-06 19:05:49 +01:00
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
2015-03-24 15:29:38 +01:00
from trytond.model import ModelView, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval
from trytond.transaction import Transaction
2015-03-24 15:29:38 +01:00
from trytond.wizard import Wizard, StateView, StateAction, Button
2015-02-02 15:00:27 +01:00
__all__ = ['InvoiceLine', 'CreateInvoicesStart', 'CreateInvoices',
'CreditInvoiceStart', 'CreditInvoice']
2015-02-02 15:00:27 +01:00
__metaclass__ = PoolMeta
class InvoiceLine:
__name__ = 'account.invoice.line'
@classmethod
def _get_origin(cls):
models = super(InvoiceLine, cls)._get_origin()
2015-03-24 15:29:38 +01:00
models.append('contract.consumption')
2015-02-02 15:00:27 +01:00
return models
2015-03-24 15:29:38 +01:00
class CreateInvoicesStart(ModelView):
'Create Invoices Start'
__name__ = 'contract.create_invoices.start'
date = fields.Date('Date')
@staticmethod
def default_date():
Date = Pool().get('ir.date')
return Date.today()
class CreateInvoices(Wizard):
'Create Invoices'
__name__ = 'contract.create_invoices'
start = StateView('contract.create_invoices.start',
'contract.create_invoices_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('OK', 'create_invoices', 'tryton-ok', True),
])
create_invoices = StateAction(
'account_invoice.act_invoice_out_invoice_form')
def do_create_invoices(self, action):
pool = Pool()
Consumptions = pool.get('contract.consumption')
consumptions = Consumptions.search(
[('invoice_date', '<=', self.start.date)])
invoices = Consumptions._invoice(consumptions)
2015-03-24 15:29:38 +01:00
data = {'res_id': [c.id for c in invoices]}
if len(invoices) == 1:
action['views'].reverse()
return action, data
class CreditInvoiceStart:
__name__ = 'account.invoice.credit.start'
from_contract = fields.Boolean('From Contract', readonly=True)
reinvoice_contract = fields.Boolean('Reinvoice Contract',
states={
'invisible': ~Bool(Eval('from_contract')),
},
depends=['from_contract'],
help=('If true, the consumption that generated this line will be '
'reinvoiced.'))
@classmethod
def view_attributes(cls):
states = {'invisible': ~Bool(Eval('from_contract'))}
return [
('/form//image[@name="tryton-dialog-warning"]', 'states', states),
('/form//label[@id="credit_contract"]', 'states', states),
]
class CreditInvoice:
__name__ = 'account.invoice.credit'
def default_start(self, fields):
pool = Pool()
Invoice = pool.get('account.invoice')
Consumption = pool.get('contract.consumption')
default = super(CreditInvoice, self).default_start(fields)
default.update({
'from_contract': False,
'reinvoice_contract': False,
})
for invoice in Invoice.browse(Transaction().context['active_ids']):
for line in invoice.lines:
if isinstance(line.origin, Consumption):
default['from_contract'] = True
break
return default
def do_credit(self, action):
pool = Pool()
Invoice = pool.get('account.invoice')
Consumption = pool.get('contract.consumption')
transaction = Transaction()
action, data = super(CreditInvoice, self).do_credit(action)
if self.start.reinvoice_contract:
consumptions = set([])
for invoice in Invoice.browse(transaction.context['active_ids']):
for line in invoice.lines:
if isinstance(line.origin, Consumption):
consumptions.add(line.origin)
with transaction.set_context(force_reinvoice=True):
Consumption.invoice(list(consumptions))
return action, data