diff --git a/subscription.py b/subscription.py index a79df5b..88dd526 100644 --- a/subscription.py +++ b/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' @@ -362,8 +217,151 @@ class CreateContract(Wizard): andes = str(antes) + str(despues) #raise UserError(str(andes)) 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' @@ -376,7 +374,9 @@ class Subscription(metaclass=PoolMeta): | Eval('context', {}).get('type') ), }) - + + prorogues = fields.Many2Many('sale.subscription-optical_equipment.contract', 'contract','subscription', + 'Prorrogation') equipments = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'subscription', 'equipment', "Equipments", domain=[['OR',