feat(Asignación de prospectos): Auto-asignar prospectos al operador que lo creó

This commit is contained in:
Camilo Gonzalez 2024-01-28 16:36:34 -05:00
parent 99de45dd32
commit b1c3b21a9c
4 changed files with 49 additions and 39 deletions

View File

@ -3,6 +3,9 @@
from trytond.model import ModelSQL, ModelView, fields, DeactivableMixin from trytond.model import ModelSQL, ModelView, fields, DeactivableMixin
from trytond.pyson import Eval, If 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): class Prospect(ModelSQL, ModelView, DeactivableMixin):
@ -60,12 +63,20 @@ class Prospect(ModelSQL, ModelView, DeactivableMixin):
if self.city: if self.city:
self.department = self.city.parent self.department = self.city.parent
# TODO assign to current user if is operator @classmethod
# @classmethod def create(cls, values):
# def create(cls, values): user_id = Transaction().user
# records = super().create(values) records = super().create(values)
# Transaction.atexit(
# lambda: cls.try_assign_to_current_operator(records))
# @classmethod cls.try_assign_to_current_operator(records, user_id)
# def try_assign_to_current_operator(cls, prospect, user) # 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)

View File

@ -10,6 +10,7 @@ class User(metaclass=PoolMeta):
__name__ = 'res.user' __name__ = 'res.user'
user_admin = fields.Boolean('Is Admin') user_admin = fields.Boolean('Is Admin')
is_operator = fields.Boolean('Is Operator')
@classmethod @classmethod
def __setup__(cls): def __setup__(cls):

View File

@ -1,39 +1,35 @@
.. Importaciones:: Importaciones::
.. >>> from proteus import Model, Wizard >>> from proteus import Model, Wizard
.. >>> from trytond.tests.tools import activate_modules >>> 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:: Crear operario::
.. >>> User = Model.get('res.user') >>> User = Model.get('res.user')
.. >>> operator = User(name="Operario", login="operario") >>> 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 = Model.get('sale.prospect')
.. >>> prospect = Prospect() >>> prospect = Prospect()
.. >>> prospect.name = 'Assignable To Me S.A.S' >>> prospect.name = 'Assignable To Me S.A.S'
.. >>> contact_method = prospect.contact_methods.new(value='123123123', name='Ricardo', job='Infraestructura') >>> contact_method = prospect.contact_methods.new(value='123123123', name='Ricardo', job='Infraestructura')
.. >>> prospect.business_unit = 'brigade' >>> prospect.business_unit = 'brigade'
.. >>> prospect.save() >>> 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')
.. ..Opcion2: [ Se inició seguimiento, asignado al operador que lo creó ]
.. .. [Se evalua si el usuario actual es operador, de ser el caso se le asigna este prospecto] >>> ProspectTrace = Model.get('sale.prospect_trace')
.. [ Se inició seguimiento, asignado al operador que lo creó ] >>> prospect_trace, = ProspectTrace.find([('prospect', '=', prospect)])
.. >>> ProspectTrace = Model.get('sale.prospect_trace') >>> assigned_operator_id = prospect_trace.prospect_assigned_operator.id
.. >>> prospect_trace, = ProspectTrace.find([('prospect', '=', prospect)]) >>> assert operator.id == assigned_operator_id
.. >>> prospect_trace.prospect_assigned_operator.id
.. operator.id

View File

@ -3,7 +3,9 @@
this repository contains the full copyright notices and license terms. --> this repository contains the full copyright notices and license terms. -->
<data> <data>
<xpath expr="//field[@name='name']" position="after"> <xpath expr="//field[@name='name']" position="after">
<label name="user_admin"/> <label name="user_admin" />
<field name="user_admin"/> <field name="user_admin" />
<label name="is_operator" />
<field name="is_operator" />
</xpath> </xpath>
</data> </data>