changes de state and propietary of equipment
This commit is contained in:
parent
3c3e38e7fa
commit
5c857d8a9e
@ -11,6 +11,7 @@ def register():
|
|||||||
product.Product,
|
product.Product,
|
||||||
purchase.Purchase,
|
purchase.Purchase,
|
||||||
purchase.Line,
|
purchase.Line,
|
||||||
|
sale.Sale,
|
||||||
sale.SaleLine,
|
sale.SaleLine,
|
||||||
sale.CreateSubscriptionStart,
|
sale.CreateSubscriptionStart,
|
||||||
equipment.OpticalEquipment,
|
equipment.OpticalEquipment,
|
||||||
|
@ -18,7 +18,13 @@
|
|||||||
<field name="act_window" ref="act_optical_equipment_configuration_form"/>
|
<field name="act_window" ref="act_optical_equipment_configuration_form"/>
|
||||||
</record>
|
</record>
|
||||||
<menuitem
|
<menuitem
|
||||||
|
name="Configuration"
|
||||||
parent="menu_equipment"
|
parent="menu_equipment"
|
||||||
|
sequence="0"
|
||||||
|
id="menu_equipment_configuration"
|
||||||
|
icon="tryton-settings"/>
|
||||||
|
<menuitem
|
||||||
|
parent="menu_equipment_configuration"
|
||||||
action="act_optical_equipment_configuration_form"
|
action="act_optical_equipment_configuration_form"
|
||||||
sequence="10"
|
sequence="10"
|
||||||
id="menu_optical_equipment_configuration"
|
id="menu_optical_equipment_configuration"
|
||||||
|
17
equipment.py
17
equipment.py
@ -108,8 +108,8 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView):
|
|||||||
('uncontrated', 'contrated'),
|
('uncontrated', 'contrated'),
|
||||||
})
|
})
|
||||||
cls._buttons.update({
|
cls._buttons.update({
|
||||||
'draft': {
|
# 'draft': {
|
||||||
'invisible': Eval('state') == 'draft'},
|
# 'invisible': Eval('state') == 'draft'},
|
||||||
'registred': {
|
'registred': {
|
||||||
'invisible': Eval('state').in_(['registred', 'contrated'])}}
|
'invisible': Eval('state').in_(['registred', 'contrated'])}}
|
||||||
)
|
)
|
||||||
@ -204,20 +204,19 @@ class OpticalEquipment(Workflow, ModelSQL, ModelView):
|
|||||||
self.health_register=None
|
self.health_register=None
|
||||||
self.software_version=None
|
self.software_version=None
|
||||||
|
|
||||||
@classmethod
|
# @classmethod
|
||||||
@ModelView.button
|
# @ModelView.button
|
||||||
@Workflow.transition('draft')
|
# @Workflow.transition('draft')
|
||||||
def draft(cls, equipments):
|
# def draft(cls, equipments):
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ModelView.button
|
@ModelView.button
|
||||||
@Workflow.transition('registred')
|
@Workflow.transition('registred')
|
||||||
def registred(cls, equipments):
|
def registred(cls, equipments):
|
||||||
#raise UserError(str(equipments[0].serial))
|
|
||||||
for i in equipments:
|
for i in equipments:
|
||||||
if i.serial == None:
|
if i.serial == None:
|
||||||
raise UserError(str(i.serial))
|
raise UserError(str("El Equipo no cuenta con un Serial"))
|
||||||
else:
|
else:
|
||||||
cls.set_code(equipments)
|
cls.set_code(equipments)
|
||||||
|
|
||||||
|
@ -83,14 +83,17 @@
|
|||||||
<field name="domain"></field>
|
<field name="domain"></field>
|
||||||
<field name="act_window" ref="act_optical_equipment_form"/>
|
<field name="act_window" ref="act_optical_equipment_form"/>
|
||||||
</record>
|
</record>
|
||||||
|
<!--
|
||||||
<record model="ir.model.button" id="draft_equipment_button">
|
<record model="ir.model.button" id="draft_equipment_button">
|
||||||
<field name="name">draft</field>
|
<field name="name">draft</field>
|
||||||
<field name="string">Draft</field>
|
<field name="string">Draft</field>
|
||||||
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
|
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
|
||||||
</record>
|
</record>
|
||||||
|
-->
|
||||||
<record model="ir.model.button" id="registred_equipment_button">
|
<record model="ir.model.button" id="registred_equipment_button">
|
||||||
<field name="name">registred</field>
|
<field name="name">registred</field>
|
||||||
<field name="string">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')]"/>
|
<field name="model" search="[('model', '=', 'optical_equipment.equipment')]"/>
|
||||||
</record>
|
</record>
|
||||||
<menuitem parent="menu_equipment"
|
<menuitem parent="menu_equipment"
|
||||||
|
220
sale.py
220
sale.py
@ -5,110 +5,47 @@ from trytond.pyson import Eval, Bool, If
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from trytond.modules.product import price_digits
|
from trytond.modules.product import price_digits
|
||||||
from trytond.transaction import Transaction
|
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.exceptions import UserError
|
||||||
|
|
||||||
from trytond.wizard import (
|
from trytond.wizard import (
|
||||||
Button, StateAction, StateTransition, StateView, Wizard)
|
Button, StateAction, StateTransition, StateView, Wizard)
|
||||||
|
|
||||||
|
class Sale(metaclass=PoolMeta):
|
||||||
class CreateSubscriptionStart(ModelView):
|
'Sale'
|
||||||
'Create Subscription Start'
|
__name__ = 'sale.sale'
|
||||||
__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
|
@classmethod
|
||||||
def default_start_date(cls):
|
@ModelView.button
|
||||||
|
@Workflow.transition('confirmed')
|
||||||
|
@set_employee('confirmed_by')
|
||||||
|
def confirm(cls, sales):
|
||||||
pool = Pool()
|
pool = Pool()
|
||||||
Date = pool.get('ir.date')
|
Configuration = pool.get('sale.configuration')
|
||||||
return Date.today()
|
cls.set_sale_date(sales)
|
||||||
|
cls.store_cache(sales)
|
||||||
|
config = Configuration(1)
|
||||||
|
|
||||||
@classmethod
|
pool = Pool()
|
||||||
@fields.depends(methods=['default_start_date'])
|
Equipments = pool.get('optical_equipment.equipment')
|
||||||
def default_invoice_start_date(self):
|
|
||||||
invoice_start_date = self.default_start_date()
|
|
||||||
|
|
||||||
return invoice_start_date
|
for sale in sales:
|
||||||
|
|
||||||
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:
|
for line in sale.lines:
|
||||||
if line.product_equipment:
|
if line.equipment:
|
||||||
equipments_to_subscription.append(line.equipment)
|
equipment=line.equipment
|
||||||
|
equipment.propietary=sale.party.id
|
||||||
|
equipment.propietary_address=sale.shipment_address.id
|
||||||
|
equipment.state="uncontrated"
|
||||||
|
equipment.save()
|
||||||
|
|
||||||
return equipments_to_subscription
|
with Transaction().set_context(
|
||||||
|
queue_name='sale',
|
||||||
|
queue_scheduled_at=config.sale_process_after):
|
||||||
|
cls.__queue__.process(sales)
|
||||||
|
|
||||||
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):
|
class SaleLine(metaclass=PoolMeta):
|
||||||
'SaleLine'
|
'SaleLine'
|
||||||
@ -116,8 +53,7 @@ class SaleLine(metaclass=PoolMeta):
|
|||||||
|
|
||||||
product_equipment = fields.Boolean("Product Equipment")
|
product_equipment = fields.Boolean("Product Equipment")
|
||||||
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
|
equipment = fields.Many2One('optical_equipment.equipment', "Equipment",
|
||||||
domain=[('state', '=', 'registred'),
|
domain=[('state', '=', 'registred')],
|
||||||
(Eval('product'), '=', Eval('_parent_sale.line.product'))],
|
|
||||||
states={'invisible': If(~Eval('product_equipment'), True)},)
|
states={'invisible': If(~Eval('product_equipment'), True)},)
|
||||||
address_equipment = fields.Many2One('party.address', "Direccion")
|
address_equipment = fields.Many2One('party.address', "Direccion")
|
||||||
unit_digits = fields.Function(fields.Integer('Unit Digits'),
|
unit_digits = fields.Function(fields.Integer('Unit Digits'),
|
||||||
@ -218,3 +154,101 @@ class SaleLine(metaclass=PoolMeta):
|
|||||||
('//page[@id="equipment"]', 'states', {
|
('//page[@id="equipment"]', 'states', {
|
||||||
'invisible': ~Eval('product_equipment', True),
|
'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()
|
||||||
|
@ -10,27 +10,41 @@ class Subscription(metaclass=PoolMeta):
|
|||||||
|
|
||||||
equipments = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'subscription',
|
equipments = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'subscription',
|
||||||
'equipment', "Equipments")
|
'equipment', "Equipments")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ModelView.button
|
@ModelView.button
|
||||||
@Workflow.transition('running')
|
@Workflow.transition('running')
|
||||||
@set_employee('run_by')
|
@set_employee('run_by')
|
||||||
def run(cls, subscriptions):
|
def run(cls, subscriptions):
|
||||||
pool = Pool()
|
pool = Pool()
|
||||||
Equipment = pool.get('optical_equipment.equipment')
|
|
||||||
Line = pool.get('sale.subscription.line')
|
Line = pool.get('sale.subscription.line')
|
||||||
lines = []
|
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):
|
class SubscriptionEquipment(ModelSQL):
|
||||||
'Optical Equipment - Subscription'
|
'Optical Equipment - Subscription'
|
||||||
__name__ = 'sale.subscription-optical_equipment.equipment'
|
__name__ = 'sale.subscription-optical_equipment.equipment'
|
||||||
|
|
||||||
subscription = fields.Many2One('sale.subscription', 'Subscription', select=True)
|
subscription = fields.Many2One('sale.subscription', 'Subscription', select=True)
|
||||||
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True,
|
equipment = fields.Many2One('optical_equipment.equipment', 'Equipment', select=True)
|
||||||
domain=[('state', '=', 'registred'),
|
|
||||||
('state', '=', 'uncontrated')],
|
|
||||||
depends=['state'])
|
|
||||||
|
|
||||||
|
|
||||||
class Line(metaclass=PoolMeta):
|
class Line(metaclass=PoolMeta):
|
||||||
__name__ = 'sale.subscriptioin.line'
|
__name__ = 'sale.subscriptioin.line'
|
||||||
|
@ -57,8 +57,9 @@
|
|||||||
<field name="maintenance_history"/>
|
<field name="maintenance_history"/>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
|
|
||||||
<group col="2" colspan="2" id="button">
|
<group col="2" colspan="2" id="button">
|
||||||
<button name="draft"/>
|
<!--<button name="draft"/> -->
|
||||||
<button name="registred"/>
|
<button name="registred"/>
|
||||||
</group>
|
</group>
|
||||||
<label name="state"/>
|
<label name="state"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user