corrections to relations many2many
This commit is contained in:
parent
d1940a271d
commit
86b6bef61d
298
subscription.py
298
subscription.py
@ -13,7 +13,6 @@ from trytond.modules.product import price_digits
|
||||
|
||||
import datetime
|
||||
|
||||
|
||||
class Contract(ModelSQL, ModelView):
|
||||
'Contracts'
|
||||
__name__ = 'optical_equipment.contract'
|
||||
@ -66,10 +65,10 @@ class Contract(ModelSQL, ModelView):
|
||||
], "State", readonly=True, required=False, sort=False,
|
||||
help="The current state of the subscription.")
|
||||
contract = fields.Many2One('sale.subscription', "Contract", readonly=True)
|
||||
prorogues = fields.Many2Many('sale.subscription-optical_equipment.contract',
|
||||
'contract', 'subscription', 'Prorrogation')
|
||||
equipments = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'equipment',
|
||||
'contract', "Equipments", readonly=True,
|
||||
prorogues = fields.Many2Many('sale.subscription-optical_equipment.contract', 'contract',
|
||||
'subscription', 'Prorrogation')
|
||||
equipments = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'contract', 'equipment',
|
||||
"Equipments", readonly=True,
|
||||
domain=[['OR',
|
||||
('state', '=', 'registred'),
|
||||
('state', '=', 'uncontrated')]
|
||||
@ -83,150 +82,6 @@ class Contract(ModelSQL, ModelView):
|
||||
def default_state():
|
||||
return 'draft'
|
||||
|
||||
|
||||
class CreateNextProrogue(ModelView):
|
||||
'Create Next Prorogue'
|
||||
__name__ = 'optical_equipment_prorogue.next'
|
||||
|
||||
initial_contract = fields.Many2One('optical_equipment.contract', "Initial Contract")
|
||||
party = fields.Many2One('party.party', "Party", required=True,
|
||||
help="The party who subscribes.")
|
||||
contact = fields.Many2One('party.contact_mechanism', "Contact")
|
||||
invoice_address = fields.Many2One('party.address', 'Invoice Address',
|
||||
required=True, domain=[('party', '=', Eval('party'))])
|
||||
invoice_recurrence = fields.Many2One('sale.subscription.recurrence.rule.set', "Invoice Recurrence",
|
||||
required=True)
|
||||
payment_term = fields.Many2One(
|
||||
'account.invoice.payment_term', "Payment Term")
|
||||
start_date = fields.Date("Start Date", required=True,)
|
||||
end_date = fields.Date("End Date", required=True,
|
||||
domain=['OR',
|
||||
('end_date', '>=', If(
|
||||
Bool(Eval('start_date')),
|
||||
Eval('start_date', datetime.date.min),
|
||||
datetime.date.min)),
|
||||
('end_date', '=', None),
|
||||
])
|
||||
invoice_start_date = fields.Date("Invoice Start Date", required=True,
|
||||
help='Billing start date')
|
||||
service = fields.Many2One('sale.subscription.service', "Service", required=True)
|
||||
quantity = fields.Float("Quantity", digits='unit', required=True)
|
||||
unit_price = Monetary("Unit Price", currency='currency',
|
||||
digits=price_digits,required=True
|
||||
)
|
||||
equipments = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'subscription',
|
||||
'equipment', "Equipments", required=True,
|
||||
domain=[['OR',
|
||||
('state', '=', 'registred'),
|
||||
('state', '=', 'uncontrated')]
|
||||
])
|
||||
@fields.depends('initial_contract', 'party', 'contact', 'invoice_address',
|
||||
'invoice_recurrence', 'start_date', 'end_date',
|
||||
'equipments')
|
||||
def on_change_initial_contract(self):
|
||||
if self.initial_contract:
|
||||
contract = self.initial_contract
|
||||
self.party = contract.party.id
|
||||
self.contact = contract.contact.id
|
||||
self.invoice_address = contract.invoice_address.id
|
||||
self.invoice_recurrence = contract.invoice_recurrence.id
|
||||
self.start_date = contract.end_date
|
||||
self.equipments = contract.equipments
|
||||
else:
|
||||
self.party = None
|
||||
self.contact = None
|
||||
self.invoice_address = None
|
||||
self.invoice_recurrence = None
|
||||
self.start_date = None
|
||||
self.equipments = []
|
||||
|
||||
class CreateProrogue(Wizard):
|
||||
'Create Prorogue'
|
||||
__name__ = 'optical_equipment.prorogue'
|
||||
|
||||
start = StateView('optical_equipment_prorogue.next',
|
||||
'optical_equipment.create_prorogue_view_form',
|
||||
[Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Create', 'create_prorogue', 'tryton-ok', default=True),
|
||||
])
|
||||
|
||||
create_prorogue = StateAction('sale_subscription.act_subscription_form')
|
||||
|
||||
done_ = StateView('optical_equipment_prorogue.next',
|
||||
'optical_equipment.create_prorogue_view_form',[
|
||||
Button('Done', 'end', 'tryton-cancel'),
|
||||
])
|
||||
|
||||
@property
|
||||
def _subscription_start(self):
|
||||
return dict(
|
||||
party=self.start.party,
|
||||
contact=self.start.contact,
|
||||
start_date=self.start.start_date,
|
||||
end_date=self.start.end_date,
|
||||
payment_term=self.start.payment_term,
|
||||
invoice_address=self.start.invoice_address,
|
||||
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,
|
||||
equipments=self.start.equipments)
|
||||
|
||||
def do_create_prorogue(self, action):
|
||||
pool = Pool()
|
||||
Subscription = pool.get('sale.subscription')
|
||||
SubscriptionLine = pool.get('sale.subscription.line')
|
||||
|
||||
a = self._subscription_start
|
||||
|
||||
equipments_to_subscription=self.start.equipments
|
||||
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(
|
||||
state='draft',
|
||||
type='prorrogation',
|
||||
party=a['party'],
|
||||
invoice_address=a['invoice_address'],
|
||||
payment_term=a['payment_term'],
|
||||
start_date=a['start_date'],
|
||||
end_date=a['end_date'],
|
||||
invoice_recurrence=a['invoice_recurrence'],
|
||||
invoice_start_date=a['invoice_start_date'],
|
||||
contact=a['contact'],
|
||||
invoice_party=a['party'],
|
||||
lines=subscription_lines,
|
||||
equipments=equipments_to_subscription,
|
||||
)
|
||||
|
||||
subscription.save()
|
||||
|
||||
IdInitialContract = self.start.initial_contract.id
|
||||
pool = Pool()
|
||||
Contract = pool.get('optical_equipment.contract')
|
||||
contract = Contract.search(['id', '=', IdInitialContract])[0]
|
||||
contract.start_date = a['start_date']
|
||||
contract.end_date = a['end_date']
|
||||
contract.invoice_address = a['invoice_address']
|
||||
contract.contact = a['contact']
|
||||
contract.invoice_recurrence = a['invoice_recurrence']
|
||||
contract.state = subscription.state
|
||||
|
||||
contract.prorogues += (contract.id,)
|
||||
|
||||
contract.equipments = equipments_to_subscription
|
||||
contract.save()
|
||||
|
||||
|
||||
|
||||
class CreateInitialContract(ModelView):
|
||||
'Create Initial Contract'
|
||||
__name__ = 'optical_equipment_contract.initial'
|
||||
@ -364,6 +219,149 @@ class CreateContract(Wizard):
|
||||
self._create_contract_base(a, subscription)
|
||||
|
||||
|
||||
|
||||
class CreateNextProrogue(ModelView):
|
||||
'Create Next Prorogue'
|
||||
__name__ = 'optical_equipment_prorogue.next'
|
||||
|
||||
initial_contract = fields.Many2One('optical_equipment.contract', "Initial Contract")
|
||||
party = fields.Many2One('party.party', "Party", required=True,
|
||||
help="The party who subscribes.")
|
||||
contact = fields.Many2One('party.contact_mechanism', "Contact")
|
||||
invoice_address = fields.Many2One('party.address', 'Invoice Address',
|
||||
required=True, domain=[('party', '=', Eval('party'))])
|
||||
invoice_recurrence = fields.Many2One('sale.subscription.recurrence.rule.set', "Invoice Recurrence",
|
||||
required=True)
|
||||
payment_term = fields.Many2One(
|
||||
'account.invoice.payment_term', "Payment Term")
|
||||
start_date = fields.Date("Start Date", required=True,)
|
||||
end_date = fields.Date("End Date", required=True,
|
||||
domain=['OR',
|
||||
('end_date', '>=', If(
|
||||
Bool(Eval('start_date')),
|
||||
Eval('start_date', datetime.date.min),
|
||||
datetime.date.min)),
|
||||
('end_date', '=', None),
|
||||
])
|
||||
invoice_start_date = fields.Date("Invoice Start Date", required=True,
|
||||
help='Billing start date')
|
||||
service = fields.Many2One('sale.subscription.service', "Service", required=True)
|
||||
quantity = fields.Float("Quantity", digits='unit', required=True)
|
||||
unit_price = Monetary("Unit Price", currency='currency',
|
||||
digits=price_digits,required=True
|
||||
)
|
||||
equipments = fields.Many2Many('optical_equipment.contract-optical_equipment.equipment', 'contract',
|
||||
'equipment', "Equipments", required=True,
|
||||
domain=[['OR',
|
||||
('state', '=', 'registred'),
|
||||
('state', '=', 'uncontrated')]
|
||||
])
|
||||
|
||||
@fields.depends('initial_contract', 'party', 'contact', 'invoice_address',
|
||||
'invoice_recurrence', 'start_date', 'end_date',
|
||||
'equipments')
|
||||
def on_change_initial_contract(self):
|
||||
if self.initial_contract:
|
||||
contract = self.initial_contract
|
||||
self.party = contract.party.id
|
||||
self.contact = contract.contact.id
|
||||
self.invoice_address = contract.invoice_address.id
|
||||
self.invoice_recurrence = contract.invoice_recurrence.id
|
||||
self.start_date = contract.end_date
|
||||
self.equipments = contract.equipments
|
||||
else:
|
||||
self.party = None
|
||||
self.contact = None
|
||||
self.invoice_address = None
|
||||
self.invoice_recurrence = None
|
||||
self.start_date = None
|
||||
self.equipments = []
|
||||
|
||||
class CreateProrogue(Wizard):
|
||||
'Create Prorogue'
|
||||
__name__ = 'optical_equipment.prorogue'
|
||||
|
||||
start = StateView('optical_equipment_prorogue.next',
|
||||
'optical_equipment.create_prorogue_view_form',
|
||||
[Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Create', 'create_prorogue', 'tryton-ok', default=True),
|
||||
])
|
||||
|
||||
create_prorogue = StateAction('sale_subscription.act_subscription_form')
|
||||
|
||||
done_ = StateView('optical_equipment_prorogue.next',
|
||||
'optical_equipment.create_prorogue_view_form',[
|
||||
Button('Done', 'end', 'tryton-cancel'),
|
||||
])
|
||||
|
||||
@property
|
||||
def _subscription_start(self):
|
||||
return dict(
|
||||
party=self.start.party,
|
||||
contact=self.start.contact,
|
||||
start_date=self.start.start_date,
|
||||
end_date=self.start.end_date,
|
||||
payment_term=self.start.payment_term,
|
||||
invoice_address=self.start.invoice_address,
|
||||
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,
|
||||
equipments=self.start.equipments)
|
||||
|
||||
def do_create_prorogue(self, action):
|
||||
pool = Pool()
|
||||
Subscription = pool.get('sale.subscription')
|
||||
SubscriptionLine = pool.get('sale.subscription.line')
|
||||
|
||||
a = self._subscription_start
|
||||
|
||||
equipments_to_subscription=self.start.equipments
|
||||
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(
|
||||
state='draft',
|
||||
type='prorrogation',
|
||||
party=a['party'],
|
||||
invoice_address=a['invoice_address'],
|
||||
payment_term=a['payment_term'],
|
||||
start_date=a['start_date'],
|
||||
end_date=a['end_date'],
|
||||
invoice_recurrence=a['invoice_recurrence'],
|
||||
invoice_start_date=a['invoice_start_date'],
|
||||
contact=a['contact'],
|
||||
invoice_party=a['party'],
|
||||
lines=subscription_lines,
|
||||
equipments=equipments_to_subscription,
|
||||
)
|
||||
|
||||
subscription.save()
|
||||
|
||||
IdInitialContract = self.start.initial_contract.id
|
||||
pool = Pool()
|
||||
Contract = pool.get('optical_equipment.contract')
|
||||
contract = Contract.search(['id', '=', IdInitialContract])[0]
|
||||
contract.start_date = a['start_date']
|
||||
contract.end_date = a['end_date']
|
||||
contract.invoice_address = a['invoice_address']
|
||||
contract.contact = a['contact']
|
||||
contract.invoice_recurrence = a['invoice_recurrence']
|
||||
contract.state = subscription.state
|
||||
|
||||
contract.prorogues += (contract.id,)
|
||||
|
||||
contract.equipments = equipments_to_subscription
|
||||
contract.save()
|
||||
|
||||
class Subscription(metaclass=PoolMeta):
|
||||
__name__ = 'sale.subscription'
|
||||
|
||||
@ -377,6 +375,8 @@ class Subscription(metaclass=PoolMeta):
|
||||
),
|
||||
})
|
||||
|
||||
prorogues = fields.Many2Many('sale.subscription-optical_equipment.contract', 'contract','subscription',
|
||||
'Prorrogation')
|
||||
equipments = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'subscription',
|
||||
'equipment', "Equipments",
|
||||
domain=[['OR',
|
||||
|
Loading…
Reference in New Issue
Block a user