Obteniendo estadísticas del CRM

6 de julio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

En el módulo de CRM Odoo permite administrar las oportunidades (e iniciativas) a lo largo de las diferentes etapas del ciclo de venta. Estas etapas pueden ser definidas por equipo de ventas (o ser globales para todos los equipos. Por favor, tome un enfoque u otro. Pero no busque un enfoque híbrido con el tema de etapas). Ahora, la única estadística que brinda Odoo por etapa, es la cantidad de oportunidades y el monto esperado de las mismas. Hay otra estadística, días para el cierre (la cual por oscuras razones, se puede ver cuando uno esta en modo desarrollador). Das ist alles.


La estadística que falta es cuantos días una oportunidad pasa en cada etapa. Es por eso que desarrollamos el módulo crm_stage_stats. Este módulo crea un item de menú denominado "CRM Stage Stats" (si no le gusta el nombre, es libre de cambiarlo. "Free country" al fin y al cabo). 


Este menú muestra la siguiente lista


Esta lista muestra por oportunidad; la fecha en que cambió de etapa a etapa, y cuantos días se tardaron en pasar de una etapa a la otra. Las columnas listadas son oportunidad, fecha, etapa desde, etapa hasta, y cantidad de días que se tardó en pasar de etapa a etapa. Y exportables a Excel o utilizables en un Pivot


Por ejemplo, en modo pivot podemos consultar la medida "días" por diferentes columnas, ("Etapa hasta" o por oportunidad). Quiza sea util agregar el vendedor (lo cual es sencillo de hacer, solo hay que agregar el campo relacionado o computado). 

Ahora si en la oportunidad queremos consultar el historial de las etapas en la oportunidad, tenemos un tab nuevo llamado "Stage stats"


Faltaría agregar un feature que no está presente en Odoo. Es que al confirmarse un presupuesto relacionado a una oportunidad, se marque la oportunidad como ganada. También faltan estadísticas relacionadas con el proceso de ventas mismo (no con el CRM); por ejemplo cantidad de días a que el pedido sea confirmado y cantidad de días a que el pedido sea facturado.

Por último, las estadísticas se calculan a partir del momento en el que el módulo se instala.

Notas técnicas

Lo interesante en este módulo es primero el cálculo de la cantidad de días de diferencia. Para ello se hace la resta de dos campos del tipo datetime. Esta substracción retornará un objeto que tiene una propiedad llamada days (la cantidad de días resultante de la resta de dos campos tipo date o datetime).

if prev_stage:
diff_days = (datetime.now() - prev_stage.date).days
else:
diff_days = (datetime.now() - rec.create_date).days

Otro punto interesante es como hace la actualización de las estadísticas. Estas se actualizan cada vez que se realiza un cambio en la oportunidad. Para ello extendemos el método write:

def write(self, vals):
stage_from_id = stage_to_id = None
if 'stage_id' in vals:
for rec in self:
stage_from_id = rec.stage_id.id
stage_to_id = vals.get('stage_id')
res = super(CrmLead, self).write(vals)
if stage_from_id and stage_to_id:
for rec in self:
prev_stage = self.env['crm.stage.stat'].search([('lead_id','=',rec.id)],order='id desc',limit=1)
if prev_stage:
diff_days = (datetime.now() - prev_stage.date).days
else:
diff_days = (datetime.now() - rec.create_date).days
vals = {
'lead_id': rec.id,
'stage_from_id': stage_from_id,
'stage_to_id': stage_to_id,
'date': str(datetime.now())[:19],
'diff_days': diff_days,
}
stat_id = self.env['crm.stage.stat'].create(vals)
return res

En las primeras líneas controlamos que la oportunidad esté cambiando de etapa (chequeando en vals que se encuentre el campo stage_id). Si es así, capturamos cual es la etapa previa y la etapa posterior a la actualización. Luego realizamos el write (invocando el método write de la clase padre, como debe ser en los buenos ejemplos de orientación a objetos). Luego, en el caso que se hayan modificado las etapas se calcula la cantidad de días que la oportunidad estuvo en la etapa previa. Para ello se busca la actualización de la etapa anterior y se calcula la cantidad de días entre dicha actualización y el día de hoy. Y por último se crea un registro en el objeto de las estadísticas.


Gustavo Orrillo 6 de julio de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario