Refactor(Asignación de prospectos): Se generaliza método para implementarlo en reassign_by_operator

This commit is contained in:
Camilo Gonzalez 2024-01-28 15:01:16 -05:00
parent 950b9350cc
commit 99de45dd32
2 changed files with 26 additions and 26 deletions

View File

@ -6,7 +6,6 @@ from trytond.wizard import Wizard, StateView, Button, StateTransition
from trytond.model import ModelView, fields from trytond.model import ModelView, fields
from trytond.pyson import Eval from trytond.pyson import Eval
from trytond.pool import Pool from trytond.pool import Pool
from core.Prospect.models.prospect import Prospect
from core.ProspectTrace.models.prospect_trace import ProspectTrace from core.ProspectTrace.models.prospect_trace import ProspectTrace
@ -27,7 +26,7 @@ class AssignOperator(Wizard):
_prospects = self.start.prospects _prospects = self.start.prospects
_operator = self.start.operator _operator = self.start.operator
Assign.assign_operator(_prospects, _operator) GenericAssign.assign_prospects_to_operator(_prospects, _operator)
return 'end' return 'end'
@ -71,30 +70,39 @@ class AssignOperatorStart(ModelView):
limit=self.prospects_chunk) limit=self.prospects_chunk)
class Assign(): class GenericAssign():
@classmethod @classmethod
def assign_operator(cls, prospects, operator): def assign_prospects_to_operator(cls, prospects, operator):
for prospect in prospects: for prospect in prospects:
prospect.assigned_operator = operator prospect.assigned_operator = operator
prospect.state = 'assigned' prospect.state = 'assigned'
prospect.prospect_trace = cls._get_prosp_trace(prospect, operator)
prospect_trace = cls._create_trace_to_prospect(prospect)
prospect.prospect_trace = prospect_trace
prospect.save() 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 @staticmethod
def _create_trace_to_prospect(prospect: Prospect) -> ProspectTrace: def _create_base_prospect_trace(prospect, operator) -> ProspectTrace:
pool = Pool() ProspectTrace = Pool().get('sale.prospect_trace')
ProspectTrace = pool.get('sale.prospect_trace')
prospect_trace = ProspectTrace( prospect_trace = ProspectTrace(
prospect=prospect, prospect=prospect,
prospect_city=prospect.city, prospect_city=prospect.city,
prospect_business_unit=prospect.business_unit, prospect_business_unit=prospect.business_unit,
prospect_assigned_operator=prospect.assigned_operator,
prospect_contacts=prospect.contact_methods prospect_contacts=prospect.contact_methods
) )
prospect_trace.save()
return prospect_trace return prospect_trace

View File

@ -6,6 +6,8 @@ from trytond.wizard import Wizard, StateView, Button, StateTransition
from trytond.model import ModelView, fields from trytond.model import ModelView, fields
from trytond.pool import Pool from trytond.pool import Pool
from core.Prospect.wizards.assign_operator import GenericAssign
class ReassignProspectByOperatorStart(ModelView): class ReassignProspectByOperatorStart(ModelView):
'Inicio de reasignación de prospecto por operario' 'Inicio de reasignación de prospecto por operario'
@ -43,19 +45,9 @@ class ReassignProspectByOperator(Wizard):
reassign_by_operator = StateTransition() reassign_by_operator = StateTransition()
def transition_reassign_by_operator(self): def transition_reassign_by_operator(self):
pool = Pool() _prospects = self.start.prospects
ProspectTrace = pool.get('sale.prospect_trace') _operator = self.start.new_operator
for prospect in self.start.prospects: GenericAssign.assign_prospects_to_operator(_prospects, _operator)
prospect.assigned_operator = self.start.new_operator
if prospect.prospect_trace:
prospect_trace, = ProspectTrace.search(
[('prospect', '=', prospect)])
prospect_trace.prospect_assigned_operator =\
self.start.new_operator
prospect_trace.save()
prospect.save()
return 'end' return 'end'