def general_campana(self, agente, campana, fecha_inferior, fecha_superior): estadisticas = self._calcular_estadisticas(campana, fecha_inferior, fecha_superior, agente) if estadisticas: logger.info( "Generando grafico calificaciones de campana por cliente ") # Barra: Cantidad de calificacion de cliente barra_campana_calificacion = pygal.Bar( # @UndefinedVariable show_legend=False, style=ESTILO_AZUL_ROJO_AMARILLO) barra_campana_calificacion.title = 'Cantidad de calificacion de cliente ' barra_campana_calificacion.x_labels = \ estadisticas['calificaciones_nombre'] barra_campana_calificacion.add('cantidad', estadisticas['calificaciones_cantidad']) barra_campana_calificacion = adicionar_render_unicode( barra_campana_calificacion) return { 'estadisticas': estadisticas, 'barra_campana_calificacion': barra_campana_calificacion, 'total_asignados': estadisticas['total_asignados'], 'dict_campana_counter': list( zip(estadisticas['calificaciones_nombre'], estadisticas['calificaciones_cantidad'])), }
def _generar_grafico_de_barras_de_llamadas_entrantes(self, estadisticas): grafico = pygal.StackedBar(show_legend=True, style=ESTILO_VERDE_GRIS_NEGRO) nombres_campanas = [] atendidas = [] expiradas = [] abandonadas = [] abandonadas_anuncio = [] por_campana = estadisticas['tipos_de_llamada_por_campana'][str( Campana.TYPE_ENTRANTE)] for datos_campana in por_campana.values(): nombres_campanas.append(datos_campana['nombre']) atendidas.append(datos_campana['atendidas']) abandonadas.append(datos_campana['abandonadas']) abandonadas_anuncio.append(datos_campana['abandonadas_anuncio']) expiradas.append(datos_campana['expiradas']) grafico.x_labels = nombres_campanas grafico.add(_(u'Atendidas'), atendidas) grafico.add(_(u'Abandonadas'), abandonadas) grafico.add(_(u'Abandonadas durante anuncio'), abandonadas_anuncio) grafico.add(_(u'Expiradas'), expiradas) self.graficos[ 'barra_campana_llamadas_entrantes'] = adicionar_render_unicode( grafico)
def _generar_grafico_de_barras_de_llamadas_dialer(self, estadisticas): grafico = pygal.StackedBar(show_legend=True, style=ESTILO_ROJO_VERDE_GRIS_NEGRO) nombres_campanas = [] no_atendidas = [] conectadas = [] expiradas = [] abandonadas = [] por_campana = estadisticas['tipos_de_llamada_por_campana'][str( Campana.TYPE_DIALER)] for datos_campana in por_campana.values(): nombres_campanas.append(datos_campana['nombre']) no_atendidas.append(datos_campana['efectuadas'] - datos_campana['atendidas']) conectadas.append(datos_campana['conectadas']) abandonadas.append(datos_campana['abandonadas']) expiradas.append(datos_campana['expiradas']) grafico.x_labels = nombres_campanas grafico.add(_(u'No contactadas'), no_atendidas) grafico.add(_(u'Procesadas'), conectadas) grafico.add(_(u'Abandonadas'), abandonadas) grafico.add(_(u'Expiradas'), expiradas) self.graficos[ 'barra_campana_llamadas_dialer'] = adicionar_render_unicode( grafico)
def _generar_grafico_de_torta_de_porcentajes_por_tipo(self, estadisticas): # Porcentajes de llamadas por tipo de llamada no_data_text = _("No hay llamadas para ese periodo") grafico = pygal.Pie(style=ESTILO_AZUL_VIOLETA_NARANJA_CELESTE, no_data_text=no_data_text, no_data_font_size=32, legend_font_size=25, truncate_legend=10, tooltip_font_size=50) total = float(estadisticas['total_llamadas_procesadas']) total_manual = estadisticas['llamadas_por_tipo'][str( Campana.TYPE_MANUAL)]['total'] total_dialer = estadisticas['llamadas_por_tipo'][str( Campana.TYPE_DIALER)]['total'] total_entrante = estadisticas['llamadas_por_tipo'][str( Campana.TYPE_ENTRANTE)]['total'] total_preview = estadisticas['llamadas_por_tipo'][str( Campana.TYPE_PREVIEW)]['total'] porcentaje_dialer = (100.0 * float(total_dialer) / float(total)) if total > 0 else 0 porcentaje_entrante = (100.0 * float(total_entrante) / float(total)) if total > 0 else 0 porcentaje_manual = (100.0 * float(total_manual) / float(total)) if total > 0 else 0 porcentaje_preview = (100.0 * float(total_preview) / float(total)) if total > 0 else 0 grafico.add(_('Manual'), porcentaje_manual) grafico.add(_('Dialer'), porcentaje_dialer) grafico.add(_('Entrante'), porcentaje_entrante) grafico.add(_('Preview'), porcentaje_preview) self.graficos['torta_porcentajes_por_tipo'] = adicionar_render_unicode( grafico)
def _generar_grafico_agentes_llamadas(self, dict_agentes_llamadas): # Barra: Cantidad de llamadas de los agentes por tipo de llamadas. barra_agente_total = pygal.Bar(show_legend=True, style=ESTILO_AZUL_ROJO_AMARILLO) barra_agente_total.x_labels = dict_agentes_llamadas['nombres_agentes'] barra_agente_total.add('PREVIEW', dict_agentes_llamadas['total_agente_preview']) barra_agente_total.add('DIALER', dict_agentes_llamadas['total_agente_dialer']) barra_agente_total.add('INBOUND', dict_agentes_llamadas['total_agente_inbound']) barra_agente_total.add('MANUAL', dict_agentes_llamadas['total_agente_manual']) barra_agente_total.add('TRANSFERIDAS', dict_agentes_llamadas['total_agente_transferidas']) return adicionar_render_unicode(barra_agente_total)
def _generar_grafico_de_barras_de_llamadas_por_campana(self, estadisticas): # Cantidad de llamadas de las campana grafico = pygal.Bar(show_legend=True, style=ESTILO_VERDE_AZUL) nombres_campanas = [] totales_campanas = [] manuales_campanas = [] for datos_campana in estadisticas['llamadas_por_campana'].values(): nombres_campanas.append(datos_campana['nombre']) totales_campanas.append(datos_campana['total']) manuales_campanas.append(datos_campana['manuales']) grafico.x_labels = nombres_campanas grafico.add(_('Total'), totales_campanas) grafico.add(_('Manuales'), manuales_campanas) self.graficos['barra_llamada_por_campana'] = adicionar_render_unicode( grafico)
def _generar_grafico_de_barras_de_llamadas_preview(self, estadisticas): grafico = pygal.StackedBar(show_legend=True, style=ESTILO_VERDE_ROJO) nombres_campanas = [] conectadas = [] no_conectadas = [] por_campana = estadisticas['tipos_de_llamada_por_campana'][str( Campana.TYPE_PREVIEW)] for datos_campana in por_campana.values(): nombres_campanas.append(datos_campana['nombre']) conectadas.append(datos_campana['conectadas']) no_conectadas.append(datos_campana['no_conectadas']) grafico.x_labels = nombres_campanas grafico.add(_(u'Conectadas'), conectadas) grafico.add(_(u'No conectadas'), no_conectadas) self.graficos[ 'barra_campana_llamadas_preview'] = adicionar_render_unicode( grafico)
def _generar_grafico_de_barras_de_llamadas_por_tipo(self, estadisticas): # Totales llamadas por tipo de campaña y forma de finalización grafico = pygal.Bar(show_legend=True, style=ESTILO_AMARILLO_VERDE_ROJO) grafico.x_labels = [ _('Manuales'), _(u'Dialer'), _(u'Entrantes'), _(u'Preview'), _(u'Transferencias') ] por_tipo = estadisticas['llamadas_por_tipo'] grafico.add(_(u'Intentos'), [ por_tipo[str(Campana.TYPE_MANUAL)]['total'], por_tipo[str( Campana.TYPE_DIALER)]['total'], por_tipo[str( Campana.TYPE_ENTRANTE)]['total'], por_tipo[str( Campana.TYPE_PREVIEW)]['total'], por_tipo['transferencia']['total'] ]) grafico.add(_('Conexión'), [ por_tipo[str(Campana.TYPE_MANUAL)]['conectadas'], por_tipo[str( Campana.TYPE_DIALER)]['atendidas'], por_tipo[str( Campana.TYPE_ENTRANTE)]['atendidas'], por_tipo[str( Campana.TYPE_PREVIEW)]['conectadas'], por_tipo['transferencia']['conectadas'] ]) perdidas_dialer = por_tipo[str(Campana.TYPE_DIALER)]['no_atendidas'] + \ por_tipo[str(Campana.TYPE_DIALER)]['perdidas'] perdidas_entrantes = por_tipo[str(Campana.TYPE_ENTRANTE)]['expiradas'] + \ por_tipo[str(Campana.TYPE_ENTRANTE)]['abandonadas'] + \ por_tipo[str(Campana.TYPE_ENTRANTE)]['abandonadas_anuncio'] grafico.add(_('Fallo'), [ por_tipo[str(Campana.TYPE_MANUAL)]['no_conectadas'], perdidas_dialer, perdidas_entrantes, por_tipo[str( Campana.TYPE_PREVIEW)]['no_conectadas'], por_tipo['transferencia']['no_conectadas'] ]) self.graficos['barras_llamadas_por_tipo'] = adicionar_render_unicode( grafico)
def general_campana(self): estadisticas = self._calcular_estadisticas(self.campana, self.fecha_desde, self.fecha_hasta) if estadisticas: logger.info( _("Generando grafico calificaciones de campana por cliente ")) reporte_campana_dir = os.path.join(settings.MEDIA_ROOT, "reporte_campana") try: os.stat(reporte_campana_dir) except IOError: os.mkdir(reporte_campana_dir) # Barra: Cantidad de calificacion de cliente barra_campana_calificacion = pygal.Bar( # @UndefinedVariable show_legend=False, style=LightGreenStyle) barra_campana_calificacion.title = _( 'Calificaciones de Clientes Contactados ') barra_campana_calificacion.x_labels = \ estadisticas['calificaciones_nombre'] barra_campana_calificacion.add('cantidad', estadisticas['calificaciones_cantidad']) barra_campana_calificacion.render_to_png( os.path.join( reporte_campana_dir, "barra_campana_calificacion_{}.png".format(self.campana.id))) barra_campana_calificacion = adicionar_render_unicode( barra_campana_calificacion) # Barra: Total de llamados no atendidos en cada intento por campana. barra_campana_no_atendido = pygal.Bar( # @UndefinedVariable show_legend=False, style=DefaultStyle(colors=('#b93229', ))) barra_campana_no_atendido.title = _( 'Cantidad de llamadas no atendidos ') barra_campana_no_atendido.x_labels = \ estadisticas['resultado_nombre'] barra_campana_no_atendido.add('cantidad', estadisticas['resultado_cantidad']) barra_campana_no_atendido.render_to_png( os.path.join( reporte_campana_dir, "barra_campana_no_atendido_{}.png".format(self.campana.id))) barra_campana_no_atendido = adicionar_render_unicode( barra_campana_no_atendido) # Barra: Detalles de llamadas por evento de llamada. barra_campana_llamadas = pygal.Bar(show_legend=False) barra_campana_llamadas.title = _('Detalles de llamadas ') barra_campana_llamadas.x_labels = \ estadisticas['cantidad_llamadas'][0] barra_campana_llamadas.add( 'cantidad', self._crear_serie_con_color(self.campana, estadisticas['cantidad_llamadas'])) barra_campana_llamadas = adicionar_render_unicode( barra_campana_llamadas) return { 'estadisticas': estadisticas, 'barra_campana_calificacion': barra_campana_calificacion, 'dict_campana_counter': list( zip(estadisticas['calificaciones_nombre'], estadisticas['calificaciones_cantidad'])), 'total_asignados': estadisticas['total_asignados'], 'agentes_venta': estadisticas['agentes_venta'], 'total_calificados': estadisticas['total_calificados'], 'total_ventas': estadisticas['total_ventas'], 'barra_campana_no_atendido': barra_campana_no_atendido, 'dict_no_atendido_counter': list( zip(estadisticas['resultado_nombre'], estadisticas['resultado_cantidad'])), 'total_no_atendidos': estadisticas['total_no_atendidos'], 'calificaciones': estadisticas['calificaciones'], 'barra_campana_llamadas': barra_campana_llamadas, 'dict_llamadas_counter': list( zip(estadisticas['cantidad_llamadas'][0], estadisticas['cantidad_llamadas'][1])), }