Esempio n. 1
0
    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'])),
        }
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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])),
        }