====================================
Sale Opportunity Management Scenario
====================================


Imports::

    >>> from proteus import Model, Wizard
    >>> from trytond.tests.tools import activate_modules
    >>> from datetime import date
    >>> import xml.etree.ElementTree as ET

Activate modules::

    >>> config = activate_modules('sale_opportunity_management')


**Cada sección contiene:**

1. Encabezado, historia de usuario
2. Elementos textuales de propuesta final
3. Descripción detallada
4. Escenarios de pruebas

(Entre [""] estarán los elementos textuales que se acordaron con el cliente en la propuesta final)

----------------------
Registro de prospectos
----------------------
**Como administrador quiero registrar un prospecto para lugo poder hacerle un seguimiento**

["Crear un Formulario de registro rápido de prospecto, Nombres, Métodos de contacto,Direcciones"]


El administrador deberá poder registrar los contactos de diferentes prospectos, junto con  su información básica:
    * Razón social (Nombre de la empresa)
    * Ciudad
    * Metodos de contacto
    * Tercero relacionado
        * Nombre
        * Cargo

Crear prospecto::
    >>> Prospect = Model.get('sale.prospect')
    >>> prospect = Prospect()
    
    >>> prospect.name = 'guchito S.A.S'

    >>> Department = Model.get('sale.department')
    >>> antioquia = Department() 
    >>> antioquia.name = 'Antioquia'
    >>> antioquia.code = 'CO-05'
    >>> antioquia.save()

    >>> City = Model.get('sale.city')
    >>> medellin = City()
    >>> medellin.name = 'Medellín'
    >>> antioquia, = Department.find(['code', '=', 'CO-05'])
    >>> medellin.parent = antioquia
    >>> medellin.save()  



    >>> medellin.save()

    >>> prospect.department 
    >>> prospect.city = 'Bogotá'
    >>> contact_method = prospect.contact_methods.new(contact_type = 'mobile', value = '31223425234') 
    >>> contact_method = prospect.contact_methods.new(contact_type = 'mail', value = 'peralto@guchitos.org') 
    >>> prospect.save()
    >>> prospect.contact_methods 
    [proteus.Model.get('prospect.contact_method')(1), proteus.Model.get('prospect.contact_method')(2)]


------------------------------------
Asignación de prospectos a operarios
------------------------------------
TODO



-----------------------
Seguimiento de llamadas
-----------------------
**Como operador quiero poder crear un seguimiento de prospecto para luego hacer una llamada**
**Como operador quiero registrar una llamada para luego generar reportes**

["Crear Campo para registro de la fecha de la llamada"]

["Crear campo de evento de la llamada con primera llamada, segunda llamada"]

["Crear Campo llamado potencial en el que se asigne un nivel de interés por parte del prospecto identificado en la llamada realizada"]

["Crear campo para asignar descripción ó notas importantes evidenciadas en la llamada"]


El seguimiento de llamadas consiste en realizar llamadas a diferentes contactos con el fin de realizar ofertas de servicios o productos, los cuales pertenecen principalmente a 3 unidades de negocio:
    * Optica
    * Brigada
    * Equipos

Luego de realizar estas llamadas, el operador dejará registro sobre aspectos como el interés del prospecto, descripción u observaciones importantes, tipificación del prospecto...

Cada conjunto de **llamadas** a un prospecto, se llamará **seguimiento de prospecto**, por lo que este podrá tener varias llamadas, y una llamada solo podrá  pertenecer a un seguimiento de prospecto. Ej:

Seguimiento de prospecto 1
    * llamada 1
    * llamada 2

Seguimiento de prospecto 2
    * llamada 1
    * llamada 2
    * llamada 3

**Seguimiento de prospecto**:
    * Razon social del prospecto (Tercero)
    * Metodo de contacto del prospecto
    * Unidad de negocio
    * Estado (Abierto o cerrado)
    * Llamadas

**LLamada**:
    * Fecha
    * Descripion o observaciones
    * Nivel de interés (0-3)
        * 0 - No contestó
        * 1 - total desinterés
        * 2 - Interés intermedio, brindar mas información
        * 3 - Interés alto, generar venta
            
    * Seguimiento de prospecto al que pertence


Crear seguimiento de prospecto::
    >>> ProspectTrace = Model.get('sale.prospect_trace')
    >>> prospect_trace = ProspectTrace()

    >>> prospect_trace.prospect = prospect
    
    >>> ContactMethods = Model.get('prospect.contact_method')
    >>> contact, = ContactMethods.find([('contact_type', '=', 'mobile')])
    >>> prospect_trace.prospect_contact = contact

    >>> prospect_trace.save()

    >>> prospect_trace.prospect_name
    'guchito S.A.S'
    >>> prospect_trace.prospect_city
    'Bogotá'
    >>> prospect_trace.prospect_contact.value
    '31223425234'

Crear llamada a un seguimiento de prospecto::
    >>> Call = Model.get('sale.call')
    >>> call = Call()

    >>> call.description = 'Descripción u observaciones de la llamada'
    >>> call.prospect_trace = prospect_trace
    >>> call.interest = '0'
    >>> call.call_type = 'first_call'
    >>> call.save()

    >>> call.prospect_trace.prospect_name
    'guchito S.A.S'
    >>> call.date == date.today()
    True
    >>> call.call_result
    'missed_call'

Crear otra llamada al mismo seguimiento de prospecto::
    >>> Call = Model.get('sale.call')
    >>> call = Call()

    >>> call.description = 'Segunda llamada al mismo seguimiento'
    >>> call.prospect_trace = prospect_trace
    >>> call.interest = '2'
    >>> call.call_type = 'followup_call'
    >>> call.save()

    >>> call.prospect_trace.prospect_name
    'guchito S.A.S'
    >>> call.prospect_trace.prospect_city 
    'Bogotá'
    >>> call.date == date.today()
    True
    >>> call.call_result 
    'answered_call'

    >>> len(prospect_trace.calls) == 2
    True
    >>> prospect_trace.current_interest
    '2'

--------
Reportes
--------
["Crear un reporte en el que evidencie por operario y consolidado"]
["Cantidad de llamadas realizadas en un período de tiempo"]
["Crear un reporte para verificar cantidad de llamadas por realizar"]
["Crear reporte para identificación de clientes potenciales (Cliente que en la llamada fueron marcados con un nivel alto)"]


* Reporte de llamadas realizadas en un periodo de tiempo (Análisis de operarios):
    * Nivel de interés
    * Unidad de negocio
    * Observaciones
    * Operario

* Reporte de seguimientos a prospectos (Análisis de prospectos):
    * Interés durante distintas etapas del seguimiento


* Reporte de Llamadas a realizar (Analisis de trabajo pendiente):
    * Llamadas pendientes
    * Seguimientos a prospectos abiertos

* Reporte de seguimientos sin asignar - asignados:
    * Seguimientos a prospectos pendientes por asignar a operador

* Reporte de prospectos potenciales
    * llamadas con un nivel de interés alto
    * Seguimiento de prospecto al que pertenecen las llamadas