109 lines
3.4 KiB
Python
109 lines
3.4 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
|
|
from trytond.wizard import Wizard, StateView, Button, StateTransition
|
|
from trytond.model import ModelView, fields
|
|
from trytond.pyson import Eval
|
|
from trytond.pool import Pool
|
|
|
|
from source.models.prospect_trace import ProspectTrace
|
|
|
|
|
|
class AssignOperator(Wizard):
|
|
'Asignar operador a prospecto'
|
|
__name__ = 'sale.prospect.assign'
|
|
|
|
start = StateView(
|
|
'sale.prospect.assign.start',
|
|
'sale_opportunity_management.assign_start_view_form', [
|
|
Button("Cancel", 'end', 'tryton-cancel'),
|
|
Button("Assign", 'assign', 'tryton-ok', default=True)])
|
|
|
|
assign = StateTransition()
|
|
|
|
def transition_assign(self):
|
|
_prospects = self.start.prospects
|
|
_operator = self.start.operator
|
|
|
|
GenericAssign.assign_prospects_to_operator(_prospects, _operator)
|
|
|
|
return 'end'
|
|
|
|
|
|
class AssignOperatorStart(ModelView):
|
|
'Inicio de asignación de operador'
|
|
__name__ = 'sale.prospect.assign.start'
|
|
|
|
prospects_chunk = fields.Integer(
|
|
'Prospects chunk', required=True,
|
|
states={
|
|
'readonly': ~Eval('business_unit', False)})
|
|
|
|
operator = fields.Many2One('res.user', 'Operator', required=True)
|
|
prospects = fields.One2Many(
|
|
'sale.prospect', None, 'Prospects', readonly=True)
|
|
|
|
business_unit = fields.Selection(
|
|
[('brigade', 'Brigade'),
|
|
('optics', 'Optics'),
|
|
('equipment', 'Equipment')],
|
|
'Business unit',
|
|
states={
|
|
'readonly': Eval('prospects_chunk', False)}
|
|
)
|
|
|
|
@classmethod
|
|
def default_prospects_chunk(cls):
|
|
return 0
|
|
|
|
@fields.depends('prospects_chunk', 'prospects', 'business_unit')
|
|
def on_change_prospects_chunk(self):
|
|
pool = Pool()
|
|
Prospect = pool.get('sale.prospect')
|
|
|
|
if self.prospects_chunk >= 1:
|
|
self.prospects = []
|
|
self.prospects = Prospect.search(
|
|
[('state', '=', 'unassigned'),
|
|
('business_unit', '=', self.business_unit)],
|
|
limit=self.prospects_chunk)
|
|
|
|
|
|
class GenericAssign():
|
|
@classmethod
|
|
def assign_prospects_to_operator(cls, prospects, operator):
|
|
for prospect in prospects:
|
|
prospect.assigned_operator = operator
|
|
prospect.state = 'assigned'
|
|
prospect.prospect_trace = cls._get_prosp_trace(prospect, operator)
|
|
prospect.save()
|
|
|
|
@classmethod
|
|
def _get_prosp_trace(cls, prospect, operator):
|
|
ProspectTrace = Pool().get('sale.prospect_trace')
|
|
|
|
prospect_trace = ProspectTrace.search([('prospect', '=', prospect)])
|
|
|
|
if not prospect_trace:
|
|
created_trace = cls._create_base_prospect_trace(prospect, operator)
|
|
prospect_trace.append(created_trace)
|
|
|
|
prospect_trace, = prospect_trace
|
|
prospect_trace.prospect_assigned_operator = operator
|
|
prospect_trace.save()
|
|
return prospect_trace
|
|
|
|
@staticmethod
|
|
def _create_base_prospect_trace(prospect, operator) -> ProspectTrace:
|
|
ProspectTrace = Pool().get('sale.prospect_trace')
|
|
|
|
prospect_trace = ProspectTrace(
|
|
prospect=prospect,
|
|
prospect_city=prospect.city,
|
|
prospect_business_unit=prospect.business_unit,
|
|
prospect_contacts=prospect.contact_methods
|
|
)
|
|
|
|
return prospect_trace
|