diff --git a/__init__.py b/__init__.py
index f5066d6..d6b1a60 100644
--- a/__init__.py
+++ b/__init__.py
@@ -28,6 +28,7 @@ def register():
prospect_trace.MakeCallAskTask,
prospect.ReassignProspectByOperatorStart,
prospect.ReassignProspectByProspectStart,
+ call.PendingTask_ContactMethod,
module='sale_opportunity_management', type_='model')
Pool.register(
prospect_trace.ScheduleCall,
diff --git a/call.py b/call.py
index f8f36f7..162970f 100644
--- a/call.py
+++ b/call.py
@@ -67,12 +67,18 @@ class PendingTask(ModelSQL, ModelView):
'sale.prospect_trace', 'Prospect trace',
required=True, readonly=True)
+ contacts = fields.Many2Many(
+ 'sale.pendingtask_contactmethod',
+ 'pending_task_id', 'contact_method_id',
+ 'Contact Methods')
+
@classmethod
def __setup__(cls):
super(PendingTask, cls).__setup__()
cls._buttons.update({
'close_task': {
- 'invisible': Eval('state') == 'done'
+ 'invisible': Eval('state') == 'done',
+ 'depends': ['state'],
}
})
@@ -86,3 +92,12 @@ class PendingTask(ModelSQL, ModelView):
@classmethod
def default_state(cls):
return 'pending'
+
+
+class PendingTask_ContactMethod(ModelSQL):
+ 'Relacion muchos a muchos entre tareas pendientes y mecanismos de contacto'
+ __name__ = "sale.pendingtask_contactmethod"
+
+ pending_task_id = fields.Many2One('sale.pending_task', 'Pending task id')
+ contact_method_id = fields.Many2One(
+ 'prospect.contact_method', 'Contact method id')
diff --git a/locale/es.po b/locale/es.po
index c19f8a1..c1f3f06 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -246,6 +246,10 @@ msgctxt "field:sale.pending_task,prospect_trace:"
msgid "Prospect trace"
msgstr "Seguimiento de prospecto"
+msgctxt "field:sale.pending_task,contacts:"
+msgid "Contact Methods"
+msgstr "Métodos de Contacto"
+
msgctxt "field:sale.prospect_trace.make_call.start,schedule_task:"
msgid "Schedule task?"
msgstr "¿Agendar tarea?"
diff --git a/prospect.py b/prospect.py
index e06a180..2b4150c 100644
--- a/prospect.py
+++ b/prospect.py
@@ -54,7 +54,7 @@ class Prospect(ModelSQL, ModelView, DeactivableMixin):
@fields.depends('prospect_trace', 'contact_methods')
def on_change_contact_methods(self):
for contact in self.contact_methods:
- contact.prospect_trace = self.prospect_trace
+ contact.update_collaborators(changed_from='prospect')
@fields.depends('city', 'department')
def on_change_city(self):
@@ -80,10 +80,24 @@ class ContactMethod(ModelSQL, ModelView):
prospect_trace = fields.Many2One(
'sale.prospect_trace', 'Prospect Trace', required=False)
+ tasks = fields.Many2Many(
+ 'sale.pendingtask_contactmethod',
+ 'contact_method_id', 'pending_task_id',
+ 'Tasks')
+
@classmethod
def default_contact_type(cls):
return 'mobile'
+ def update_collaborators(self, changed_from):
+ if (changed_from == 'prospect'):
+ self.prospect_trace = self.prospect.prospect_trace
+ if (self.prospect_trace):
+ self.tasks = self.prospect.prospect_trace.tasks
+ if (changed_from == 'prospect_trace'):
+ self.prospect = self.prospect_trace.prospect
+ self.tasks = self.prospect_trace.tasks
+
def get_rec_name(self, name):
fields = [self.name, self.job, self.value]
contact_rec_name = ''
diff --git a/prospect_trace.py b/prospect_trace.py
index 2ba4d60..04c2cfb 100644
--- a/prospect_trace.py
+++ b/prospect_trace.py
@@ -36,6 +36,9 @@ class ProspectTrace(ModelSQL, ModelView):
'sale.call', 'prospect_trace', 'Calls', states=_states)
pending_call = fields.Many2One(
'sale.pending_call', 'Pending call', states=_states)
+ tasks = fields.One2Many(
+ 'sale.pending_task', 'prospect_trace',
+ 'Pending Tasks', states=_states)
current_interest = fields.Selection(
Interest.get_interest_levels(), 'Current interest',
@@ -52,7 +55,7 @@ class ProspectTrace(ModelSQL, ModelView):
@fields.depends('prospect_contacts', 'prospect')
def on_change_prospect_contacts(self):
for contact in self.prospect_contacts:
- contact.prospect = self.prospect
+ contact.update_collaborators(changed_from='prospect_trace')
@classmethod
def __setup__(cls):
@@ -263,6 +266,7 @@ class MakeCall(Wizard):
task = Task()
task.description = description
task.prospect_trace = prospect_trace
+ task.contacts = prospect_trace.prospect_contacts
task.save()
@classmethod
diff --git a/tests/scenario_sale_opportunity_management.rst b/tests/scenario_sale_opportunity_management.rst
index 8296ce7..de3da3b 100644
--- a/tests/scenario_sale_opportunity_management.rst
+++ b/tests/scenario_sale_opportunity_management.rst
@@ -287,16 +287,42 @@ Hacer llamada y programar tarea::
>>> make_call.execute('schedule_task')
>>> Task = Model.get('sale.pending_task')
- >>> task, = Task.find([('description', '=', 'I have to send a mail to prospect offering him this services...')])
- >>> task
- proteus.Model.get('sale.pending_task')(1)
+ >>> task1, = Task.find([('description', '=', 'I have to send a mail to prospect offering him this services...')])
- >>> task.state
+ >>> task1
+ proteus.Model.get('sale.pending_task')(1)
+ >>> task1.state
'pending'
- >>> task.click('close_task')
- >>> task.state
+ >>> task1.click('close_task')
+
+ >>> task1.state
'done'
+ >>> task1.contacts[0].value
+ '12345678910'
+
+Programar segunda tarea al mismo seguimiento::
+ >>> make_call = Wizard('sale.prospect_trace.make_call', [prospect_trace])
+ >>> make_call.form.description = 'Prospect told me to send him an SMS'
+ >>> make_call.form.interest = '3'
+ >>> make_call.form.schedule_call = 'no'
+ >>> make_call.form.schedule_task = 'yes'
+ >>> make_call.execute('make_call')
+ >>> make_call.form.task_description = 'I have to send a SMS to prospect offering him this services...'
+ >>> make_call.execute('schedule_task')
+
+ >>> task1.save()
+ >>> Task = Model.get('sale.pending_task')
+ >>> task2, = Task.find([('description', '=', 'I have to send a SMS to prospect offering him this services...')])
+ >>> task2
+ proteus.Model.get('sale.pending_task')(2)
+
+ >>> task2.state
+ 'pending'
+ >>> task2.contacts[0].value
+ '12345678910'
+ >>> task1.contacts[0].value
+ '12345678910'
Hacer llamada y cerrar venta (Seguimiento de prospecto)::
>>> make_call = Wizard('sale.prospect_trace.make_call', [prospect_trace])
@@ -347,7 +373,6 @@ Reasignar prospectos por prospecto::
>>> reassign_by_prospect.form.prospect = prospect1
>>> reassign_by_prospect.form.new_operator = user
>>> reassign_by_prospect.execute('reassign_by_prospect')
-
>>> prospect1.reload()
>>> prospect1.assigned_operator.name
@@ -364,7 +389,7 @@ Crear un usuario de rol administrador::
>>> admin.save()
>>> admin.user_admin == True
True
-
+
Agregar un nuevo método de contacto desde prospecto
>>> contact_method = prospect1.contact_methods.new(value='0000000000', name='Nuevo', job='Puesto increíble')
>>> prospect1.save()
diff --git a/view/pending_task_form.xml b/view/pending_task_form.xml
index 6e67eac..1950f87 100644
--- a/view/pending_task_form.xml
+++ b/view/pending_task_form.xml
@@ -8,5 +8,8 @@ this repository contains the full copyright notices and license terms. -->
+
+
+
\ No newline at end of file
diff --git a/view/pending_task_tree.xml b/view/pending_task_tree.xml
index a947974..cafb0cb 100644
--- a/view/pending_task_tree.xml
+++ b/view/pending_task_tree.xml
@@ -4,5 +4,6 @@ this repository contains the full copyright notices and license terms. -->
+
\ No newline at end of file