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
|
2015-10-13 15:05:46 +02:00
|
|
|
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
|
|
|
|
|
|
|
|
2018-08-18 10:50:49 +02:00
|
|
|
class InvoiceLine(metaclass=PoolMeta):
|
2015-02-02 15:00:27 +01:00
|
|
|
__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),
|
|
|
|
])
|
2016-04-14 02:07:35 +02:00
|
|
|
create_invoices = StateAction('account_invoice.act_invoice_form')
|
2015-03-24 15:29:38 +01:00
|
|
|
|
|
|
|
def do_create_invoices(self, action):
|
|
|
|
pool = Pool()
|
|
|
|
Consumptions = pool.get('contract.consumption')
|
|
|
|
consumptions = Consumptions.search(
|
|
|
|
[('invoice_date', '<=', self.start.date)])
|
2015-03-25 10:11:13 +01:00
|
|
|
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
|
2015-10-13 15:05:46 +02:00
|
|
|
|
|
|
|
|
2018-08-18 10:50:49 +02:00
|
|
|
class CreditInvoiceStart(metaclass=PoolMeta):
|
2015-10-13 15:05:46 +02:00
|
|
|
__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.'))
|
|
|
|
|
2015-12-10 22:47:07 +01:00
|
|
|
@classmethod
|
|
|
|
def view_attributes(cls):
|
|
|
|
states = {'invisible': ~Bool(Eval('from_contract'))}
|
2021-03-15 10:40:31 +01:00
|
|
|
return super().view_attributes() + [
|
2015-12-10 22:47:07 +01:00
|
|
|
('/form//label[@id="credit_contract"]', 'states', states),
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2018-08-18 10:50:49 +02:00
|
|
|
class CreditInvoice(metaclass=PoolMeta):
|
2015-10-13 15:05:46 +02:00
|
|
|
__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')
|
2015-12-30 14:03:16 +01:00
|
|
|
transaction = Transaction()
|
2015-10-13 15:05:46 +02:00
|
|
|
|
|
|
|
action, data = super(CreditInvoice, self).do_credit(action)
|
2015-12-30 14:03:16 +01:00
|
|
|
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))
|
2015-10-13 15:05:46 +02:00
|
|
|
return action, data
|