trytondo-optical_equipment/subscription.py

117 lines
3.8 KiB
Python

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 CreateSubscriptionInvoice(Wizard):
"Create Subscription Invoice"
__name__ = 'sale.subscription.create_invoice'
start = StateView(
'sale.subscription.create_invoice.start',
'sale_subscription.create_invoice_start_view_form', [
Button("Cancel", 'end', 'tryton-cancel'),
Button("Create", 'create_', 'tryton-ok', default=True),
])
create_ = StateTransition()
def generate_invoice(self, date=None):
pool = Pool()
Date = pool.get('ir.date')
Configuration = pool.get('account.configuration')
Config = Configuration(1)
Journals = pool.get('account.journal')
Invoice = pool.get('account.invoice')
InvoiceLine = pool.get('account.invoice.line')
subscription = self.records[0]
invoice_lines = []
if date is None:
date = Date.today()
for line in subscription.lines:
invoice_lines.append(
InvoiceLine(
origin=line,
product=line.service,
account=line.service.product.account_revenue_used,
quantity=line.quantity,
unit=line.unit,
unit_price=line.unit_price,
)
)
invoice = Invoice(
type='out',
journal=Journals.search(['type', '=', 'revenue'])[0],
account=Config.default_account_receivable,
party=subscription.party,
invoice_date=date,
invoice_address=subscription.invoice_address,
lines=invoice_lines,
)
invoice.save()
def transition_create_(self):
pool = Pool()
Subscription = pool.get('sale.subscription')
self.generate_invoice(date=self.start.date)
return 'end'
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'