changes de state and propietary of equipment

This commit is contained in:
sinergia 2022-08-03 13:14:15 -05:00
parent 3c3e38e7fa
commit 5c857d8a9e
7 changed files with 174 additions and 116 deletions

View File

@ -11,6 +11,7 @@ def register():
product.Product,
purchase.Purchase,
purchase.Line,
sale.Sale,
sale.SaleLine,
sale.CreateSubscriptionStart,
equipment.OpticalEquipment,

View File

@ -18,7 +18,13 @@
<field name="act_window" ref="act_optical_equipment_configuration_form"/>
</record>
<menuitem
name="Configuration"
parent="menu_equipment"
sequence="0"
id="menu_equipment_configuration"
icon="tryton-settings"/>
<menuitem
parent="menu_equipment_configuration"
action="act_optical_equipment_configuration_form"
sequence="10"
id="menu_optical_equipment_configuration"

View File

@ -108,8 +108,8 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView):
('uncontrated', 'contrated'),
})
cls._buttons.update({
'draft': {
'invisible': Eval('state') == 'draft'},
# 'draft': {
# 'invisible': Eval('state') == 'draft'},
'registred': {
'invisible': Eval('state').in_(['registred', 'contrated'])}}
)
@ -204,20 +204,19 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView):
self.health_register=None
self.software_version=None
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, equipments):
pass
# @classmethod
# @ModelView.button
# @Workflow.transition('draft')
# def draft(cls, equipments):
# pass
@classmethod
@ModelView.button
@Workflow.transition('registred')
def registred(cls, equipments):
#raise UserError(str(equipments[0].serial))
for i in equipments:
if i.serial == None:
raise UserError(str(i.serial))
raise UserError(str("El Equipo no cuenta con un Serial"))
else:
cls.set_code(equipments)

View File

@ -83,14 +83,17 @@
<field name="domain"></field>
<field name="act_window" ref="act_optical_equipment_form"/>
</record>
<!--
<record model="ir.model.button" id="draft_equipment_button">
<field name="name">draft</field>
<field name="string">Draft</field>
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
</record>
</record>
-->
<record model="ir.model.button" id="registred_equipment_button">
<field name="name">registred</field>
<field name="string">Registred</field>
<field name="confirm">Are you sure you want to registred these equipments?</field>
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
</record>
<menuitem parent="menu_equipment"

230
sale.py
View File

@ -5,119 +5,55 @@ from trytond.pyson import Eval, Bool, If
from decimal import Decimal
from trytond.modules.product import price_digits
from trytond.transaction import Transaction
from trytond.model import Workflow
from trytond.modules.company.model import (
employee_field, set_employee, reset_employee)
from trytond.exceptions import UserError
from trytond.wizard import (
Button, StateAction, StateTransition, StateView, Wizard)
class Sale(metaclass=PoolMeta):
'Sale'
__name__ = 'sale.sale'
class CreateSubscriptionStart(ModelView):
'Create Subscription Start'
__name__ = 'sale.create.subscription.start'
@classmethod
@ModelView.button
@Workflow.transition('confirmed')
@set_employee('confirmed_by')
def confirm(cls, sales):
pool = Pool()
Configuration = pool.get('sale.configuration')
cls.set_sale_date(sales)
cls.store_cache(sales)
config = Configuration(1)
start_date = fields.Date("Start Date", required=True)
end_date = fields.Date("End Date", required=True)
invoice_recurrence = fields.Many2One('sale.subscription.recurrence.rule.set',
"Invoice Recurrence",required=True)
invoice_start_date = fields.Date("Invoice Start Date",
help='Billing start date')
service = fields.Many2One('sale.subscription.service', "Service")
quantity = fields.Float("Quantity", digits='unit')
unit_price = Monetary("Unit Price", currency='currency',
digits=price_digits,
)
pool = Pool()
Equipments = pool.get('optical_equipment.equipment')
for sale in sales:
for line in sale.lines:
if line.equipment:
equipment=line.equipment
equipment.propietary=sale.party.id
equipment.propietary_address=sale.shipment_address.id
equipment.state="uncontrated"
equipment.save()
with Transaction().set_context(
queue_name='sale',
queue_scheduled_at=config.sale_process_after):
cls.__queue__.process(sales)
@classmethod
def default_start_date(cls):
pool = Pool()
Date = pool.get('ir.date')
return Date.today()
@classmethod
@fields.depends(methods=['default_start_date'])
def default_invoice_start_date(self):
invoice_start_date = self.default_start_date()
return invoice_start_date
class CreateSubscription(Wizard):
'Create Subscription'
__name__ = 'sale.create.subscription'
start = StateView('sale.create.subscription.start',
'optical_equipment.create_subscription_view_form',[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Create', 'create_subscription', 'tryton-ok', default=True),
])
create_subscription = StateAction('sale_subscription.act_subscription_form')
done_ = StateView('sale.create.subscription.start',
'optical_equipment.create_subscription_view_form',[
Button('Done', 'end', 'tryton-cancel'),
])
@property
def _subscription_start(self):
return dict(start_date=self.start.start_date,
end_date=self.start.end_date,
invoice_recurrence=self.start.invoice_recurrence,
invoice_start_date=self.start.invoice_start_date,
service=self.start.service,
quantity=self.start.quantity,
unit_price=self.start.unit_price)
def _equipments_to_subscription(self):
sale = self.records[0]
equipments_to_subscription = []
for line in sale.lines:
if line.product_equipment:
equipments_to_subscription.append(line.equipment)
return equipments_to_subscription
def do_create_subscription(self, action):
pool = Pool()
Subscription = pool.get('sale.subscription')
SubscriptionLine = pool.get('sale.subscription.line')
sale = self.records[0]
a = self._subscription_start
equipments_to_subscription=self._equipments_to_subscription()
subscription_lines = [SubscriptionLine(
start_date=a['start_date'],
end_date=a['end_date'],
consumption_recurrence=a['invoice_recurrence'],
service=a['service'],
unit=a['service'].product.default_uom,
quantity=a['quantity'],
unit_price=a['unit_price']
)]
subscription = Subscription(
start_date=a['start_date'],
end_date=a['end_date'],
invoice_recurrence=a['invoice_recurrence'],
invoice_start_date=a['invoice_start_date'],
party=sale.party.id,
contact=sale.contact.id if sale.contact else None,
invoice_party=sale.invoice_party.id if sale.invoice_party else None,
invoice_address=sale.invoice_address.id,
payment_term=sale.payment_term.id if sale.payment_term else None,
lines=subscription_lines,
equipments=equipments_to_subscription,
)
subscription.save()
return 'done_'
class SaleLine(metaclass=PoolMeta):
'SaleLine'
__name__ = 'sale.line'
product_equipment = fields.Boolean("Product Equipment")
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
domain=[('state', '=', 'registred'),
(Eval('product'), '=', Eval('_parent_sale.line.product'))],
domain=[('state', '=', 'registred')],
states={'invisible': If(~Eval('product_equipment'), True)},)
address_equipment = fields.Many2One('party.address', "Direccion")
unit_digits = fields.Function(fields.Integer('Unit Digits'),
@ -218,3 +154,101 @@ class SaleLine(metaclass=PoolMeta):
('//page[@id="equipment"]', 'states', {
'invisible': ~Eval('product_equipment', True),
})]
class CreateSubscriptionStart(ModelView):
'Create Subscription Start'
__name__ = 'sale.create.subscription.start'
start_date = fields.Date("Start Date", required=True)
end_date = fields.Date("End Date", required=True)
invoice_recurrence = fields.Many2One('sale.subscription.recurrence.rule.set',
"Invoice Recurrence",required=True)
invoice_start_date = fields.Date("Invoice Start Date",
help='Billing start date')
service = fields.Many2One('sale.subscription.service', "Service")
quantity = fields.Float("Quantity", digits='unit')
unit_price = Monetary("Unit Price", currency='currency',
digits=price_digits,
)
@classmethod
def default_start_date(cls):
pool = Pool()
Date = pool.get('ir.date')
return Date.today()
@classmethod
@fields.depends(methods=['default_start_date'])
def default_invoice_start_date(self):
invoice_start_date = self.default_start_date()
return invoice_start_date
class CreateSubscription(Wizard):
'Create Subscription'
__name__ = 'sale.create.subscription'
start = StateView('sale.create.subscription.start',
'optical_equipment.create_subscription_view_form',[
Button('Cancel', 'end', 'tryton-cancel'),
Button('Create', 'create_subscription', 'tryton-ok', default=True),
])
create_subscription = StateAction('sale_subscription.act_subscription_form')
done_ = StateView('sale.create.subscription.start',
'optical_equipment.create_subscription_view_form',[
Button('Done', 'end', 'tryton-cancel'),
])
@property
def _subscription_start(self):
return dict(start_date=self.start.start_date,
end_date=self.start.end_date,
invoice_recurrence=self.start.invoice_recurrence,
invoice_start_date=self.start.invoice_start_date,
service=self.start.service,
quantity=self.start.quantity,
unit_price=self.start.unit_price)
def _equipments_to_subscription(self):
sale = self.records[0]
equipments_to_subscription = []
for line in sale.lines:
if line.product_equipment:
equipments_to_subscription.append(line.equipment)
return equipments_to_subscription
def do_create_subscription(self, action):
pool = Pool()
Subscription = pool.get('sale.subscription')
SubscriptionLine = pool.get('sale.subscription.line')
sale = self.records[0]
a = self._subscription_start
equipments_to_subscription=self._equipments_to_subscription()
subscription_lines = [SubscriptionLine(
start_date=a['start_date'],
end_date=a['end_date'],
consumption_recurrence=a['invoice_recurrence'],
service=a['service'],
unit=a['service'].product.default_uom,
quantity=a['quantity'],
unit_price=a['unit_price']
)]
subscription = Subscription(
start_date=a['start_date'],
end_date=a['end_date'],
invoice_recurrence=a['invoice_recurrence'],
invoice_start_date=a['invoice_start_date'],
party=sale.party.id,
contact=sale.contact.id if sale.contact else None,
invoice_party=sale.invoice_party.id if sale.invoice_party else None,
invoice_address=sale.invoice_address.id,
payment_term=sale.payment_term.id if sale.payment_term else None,
lines=subscription_lines,
equipments=equipments_to_subscription,
)
subscription.save()

View File

@ -10,27 +10,41 @@ class Subscription(metaclass=PoolMeta):
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()
Equipment = pool.get('optical_equipment.equipment')
Line = pool.get('sale.subscription.line')
lines = []
subscription = subscriptions[0]
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 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,
domain=[('state', '=', 'registred'),
('state', '=', 'uncontrated')],
depends=['state'])
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True)
class Line(metaclass=PoolMeta):
__name__ = 'sale.subscriptioin.line'

View File

@ -57,8 +57,9 @@
<field name="maintenance_history"/>
</page>
</notebook>
<group col="2" colspan="2" id="button">
<button name="draft"/>
<!--<button name="draft"/> -->
<button name="registred"/>
</group>
<label name="state"/>