From b1c3b21a9c038b6446f2205c030528acf2ba6253 Mon Sep 17 00:00:00 2001 From: camilogs Date: Sun, 28 Jan 2024 16:36:34 -0500 Subject: [PATCH] =?UTF-8?q?feat(Asignaci=C3=B3n=20de=20prospectos):=20Auto?= =?UTF-8?q?-asignar=20prospectos=20al=20operador=20que=20lo=20cre=C3=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/Prospect/models/prospect.py | 27 ++++++++---- core/Role/models/user.py | 1 + tests/scenario_assign_prospect_to_me.rst | 52 +++++++++++------------- view/user_form.xml | 8 ++-- 4 files changed, 49 insertions(+), 39 deletions(-) diff --git a/core/Prospect/models/prospect.py b/core/Prospect/models/prospect.py index c1f5eb6..947ef18 100644 --- a/core/Prospect/models/prospect.py +++ b/core/Prospect/models/prospect.py @@ -3,6 +3,9 @@ from trytond.model import ModelSQL, ModelView, fields, DeactivableMixin from trytond.pyson import Eval, If +from trytond.transaction import Transaction +from trytond.pool import Pool +from core.Prospect.wizards.assign_operator import GenericAssign class Prospect(ModelSQL, ModelView, DeactivableMixin): @@ -60,12 +63,20 @@ class Prospect(ModelSQL, ModelView, DeactivableMixin): if self.city: self.department = self.city.parent - # TODO assign to current user if is operator - # @classmethod - # def create(cls, values): - # records = super().create(values) - # Transaction.atexit( - # lambda: cls.try_assign_to_current_operator(records)) + @classmethod + def create(cls, values): + user_id = Transaction().user + records = super().create(values) - # @classmethod - # def try_assign_to_current_operator(cls, prospect, user) + cls.try_assign_to_current_operator(records, user_id) + # Transaction().atexit( + # lambda: cls.try_assign_to_current_operator(prospects, user_id)) + return records + + @classmethod + def try_assign_to_current_operator(cls, prospects, user_id): + User = Pool().get('res.user') + user, = User.search([('id', '=', user_id)]) + + if user.is_operator: + GenericAssign.assign_prospects_to_operator(prospects, user) diff --git a/core/Role/models/user.py b/core/Role/models/user.py index 5b87e28..8a9ea0f 100644 --- a/core/Role/models/user.py +++ b/core/Role/models/user.py @@ -10,6 +10,7 @@ class User(metaclass=PoolMeta): __name__ = 'res.user' user_admin = fields.Boolean('Is Admin') + is_operator = fields.Boolean('Is Operator') @classmethod def __setup__(cls): diff --git a/tests/scenario_assign_prospect_to_me.rst b/tests/scenario_assign_prospect_to_me.rst index 12afc0c..8cc2260 100644 --- a/tests/scenario_assign_prospect_to_me.rst +++ b/tests/scenario_assign_prospect_to_me.rst @@ -1,39 +1,35 @@ -.. Importaciones:: +Importaciones:: -.. >>> from proteus import Model, Wizard -.. >>> from trytond.tests.tools import activate_modules + >>> from proteus import Model, Wizard + >>> from trytond.transaction import Transaction + >>> from trytond.tests.tools import activate_modules, set_user -.. Activar módulos:: +Activar módulos:: -.. >>> config = activate_modules('sale_opportunity_management') + >>> config = activate_modules('sale_opportunity_management') -.. Crear operario:: -.. >>> User = Model.get('res.user') -.. >>> operator = User(name="Operario", login="operario") +Crear operario:: + >>> User = Model.get('res.user') + >>> operator, = User.find([('name', '=', 'Administrator')]) + >>> operator.is_operator = True + >>> operator.save() + >>> set_user(operator.id) -.. Crear prospecto:: +Crear prospecto:: -.. >>> Prospect = Model.get('sale.prospect') -.. >>> prospect = Prospect() + >>> Prospect = Model.get('sale.prospect') + >>> prospect = Prospect() -.. >>> prospect.name = 'Assignable To Me S.A.S' -.. >>> contact_method = prospect.contact_methods.new(value='123123123', name='Ricardo', job='Infraestructura') -.. >>> prospect.business_unit = 'brigade' -.. >>> prospect.save() - -.. .. Opción 1: -.. .. [ Se abre una ventana preguntandole al usuario si quiere asignarse a sí mismo el prospecto recién creado ] -.. .. >>> assign_to_me_wizard = Wizard('sale.prospect.assign_to_me', [prospect]) -.. .. >>> assign_to_me_wizard.form.assign_to_me = True -.. .. >>> assign_to_me_wizard.execute('assign_to_me') + >>> prospect.name = 'Assignable To Me S.A.S' + >>> contact_method = prospect.contact_methods.new(value='123123123', name='Ricardo', job='Infraestructura') + >>> prospect.business_unit = 'brigade' + >>> prospect.save() -.. ..Opcion2: -.. .. [Se evalua si el usuario actual es operador, de ser el caso se le asigna este prospecto] -.. [ Se inició seguimiento, asignado al operador que lo creó ] -.. >>> ProspectTrace = Model.get('sale.prospect_trace') -.. >>> prospect_trace, = ProspectTrace.find([('prospect', '=', prospect)]) -.. >>> prospect_trace.prospect_assigned_operator.id -.. operator.id + [ Se inició seguimiento, asignado al operador que lo creó ] + >>> ProspectTrace = Model.get('sale.prospect_trace') + >>> prospect_trace, = ProspectTrace.find([('prospect', '=', prospect)]) + >>> assigned_operator_id = prospect_trace.prospect_assigned_operator.id + >>> assert operator.id == assigned_operator_id diff --git a/view/user_form.xml b/view/user_form.xml index 78c20c5..a066f97 100644 --- a/view/user_form.xml +++ b/view/user_form.xml @@ -3,7 +3,9 @@ this repository contains the full copyright notices and license terms. --> - - + \ No newline at end of file