from trytond.pool import Pool, PoolMeta from trytond.model import ( ModelSQL, ModelView, Workflow, fields) from trytond.modules.company.model import set_employee from trytond.exceptions import UserError from trytond.wizard import ( Button, StateAction, StateTransition, StateView, Wizard) class Subscription(metaclass=PoolMeta): __name__ = 'sale.subscription' equipments = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'subscription', 'equipment', "Equipments") @classmethod @ModelView.button @Workflow.transition('running') @set_employee('run_by') def run(cls, subscriptions): pool = Pool() Line = pool.get('sale.subscription.line') lines = [] pool = Pool() Equipments = pool.get('optical_equipment.equipment') for subscription in subscriptions: if not subscription.next_invoice_date: subscription.next_invoice_date = ( subscription.compute_next_invoice_date()) for line in subscription.lines: if (line.next_consumption_date is None and not line.consumed_until): line.next_consumption_date = ( line.compute_next_consumption_date()) lines.extend(subscription.lines) for equipment in subscription.equipments: equipment.state = "contrated" equipment.save() Line.save(lines) cls.save(subscriptions) class CreateContractInvoice(Wizard): "Create Contract Invoice" __name__ = 'sale.subscription.create_invoice_contract' start = StateView( 'sale.subscription.create_invoice_contract.start', 'optical_equipment.create_invoice_contract_start_view_form',[ Button("Cancel", 'end', 'tryton-cancel'), Button("Create", 'create_invoice', 'tryton-ok', default=True), ]) create_invoice = StateAction('account_invoice.act_invoice_form') def do_create_invoice(self, action): 'Create and return an invoice' raise UserError(str(dir(action))) invoice_lines = [] for line in self.lines: invoice_lines.append(line.get_invoice_line()) invoice_lines = list(chain(*invoice_lines)) if not invoice_lines: return invoice = self._get_invoice_sale() if getattr(invoice, 'lines', None): invoice_lines = list(invoice.lines) + invoice_lines invoice.lines = invoice_lines return invoice class CreateContractInvoiceStart(ModelView): "Create Subscription Invoice" __name__ = 'sale.subscription.create_invoice_contract.start' date = fields.Date("Date") @classmethod def default_date(cls): pool = Pool() Date = pool.get('ir.date') return Date.today() class SubscriptionEquipment(ModelSQL): 'Optical Equipment - Subscription' __name__ = 'sale.subscription-optical_equipment.equipment' subscription = fields.Many2One('sale.subscription', 'Subscription', select=True) equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True) class Line(metaclass=PoolMeta): __name__ = 'sale.subscriptioin.line'