Exemplo n.º 1
0
 def test_datos_reporte_grafico_llamadas_entrantes_realizadas_muestran_solo_dia_actual(
         self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE,
                                       estado=Campana.ESTADO_ACTIVA)
     hoy = fecha_hora_local(timezone.now())
     ayer = hoy - timedelta(days=1)
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             True,
                                             'COMPLETEAGENT',
                                             self.telefono1,
                                             agente=self.agente_profile,
                                             time=ayer)
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             True,
                                             'COMPLETEOUTNUM',
                                             self.telefono2,
                                             agente=self.agente_profile,
                                             time=hoy)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_entrante,
                                                fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     self.assertEqual(
         estadisticas_service.reporte_totales_llamadas.llamadas_realizadas,
         1)
Exemplo n.º 2
0
 def test_datos_reporte_grafico_llamadas_entrantes_promedio_tiempo_abandono(
         self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE,
                                       estado=Campana.ESTADO_ACTIVA)
     hoy = fecha_hora_local(timezone.now())
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             False,
                                             'ABANDON',
                                             self.telefono1,
                                             agente=self.agente_profile,
                                             time=hoy,
                                             bridge_wait_time=4)
     LlamadaLogFactory(tipo_campana=Campana.TYPE_ENTRANTE,
                       tipo_llamada=LlamadaLog.LLAMADA_ENTRANTE,
                       campana_id=campana_entrante.pk,
                       event='ABANDONWEL',
                       bridge_wait_time=5,
                       time=hoy)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_entrante,
                                                fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     self.assertEqual(
         estadisticas_service.reporte_totales_llamadas.
         tiempo_promedio_abandono, 4.5)
Exemplo n.º 3
0
 def test_datos_reporte_grafico_llamadas_entrantes_promedio_tiempo_espera(
         self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE,
                                       estado=Campana.ESTADO_ACTIVA)
     hoy = fecha_hora_local(timezone.now())
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             False,
                                             'COMPLETEAGENT',
                                             self.telefono1,
                                             agente=self.agente_profile,
                                             time=hoy,
                                             bridge_wait_time=4,
                                             callid=1)
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             False,
                                             'COMPLETEOUTNUM',
                                             self.telefono2,
                                             agente=self.agente_profile,
                                             time=hoy,
                                             bridge_wait_time=2,
                                             callid=2)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_entrante,
                                                fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     self.assertEqual(
         estadisticas_service.reporte_totales_llamadas.
         tiempo_promedio_espera, 3)
Exemplo n.º 4
0
    def get(self, request, *args, **kwargs):
        user = request.user
        asignadas = Campana.objects.all()

        if not user.get_is_administrador():
            supervisor = user.get_supervisor_profile()
            asignadas = supervisor.campanas_asignadas_actuales()

        try:
            self.campana = asignadas.get(pk=self.kwargs['pk_campana'])
            hoy_ahora = fecha_hora_local(timezone.now())
            hoy = hoy_ahora.date()
            fecha_desde = fecha_hora_local(
                datetime.datetime.combine(hoy, datetime.time.min))
            fecha_hasta = fecha_hora_local(
                datetime.datetime.combine(hoy_ahora, datetime.time.max))
            service = ReporteCampanaService(self.get_object())
            service.calificaciones_por_fechas(fecha_desde, fecha_hasta)
            calificaciones_qs = service.calificaciones_qs
            historico_calificaciones_qs = service.historico_calificaciones_qs
            historico_calidficaciones = self._procesa_historico_calificaciones(
                historico_calificaciones_qs)
            return self.render_to_response(
                self.get_context_data(
                    calificaciones=calificaciones_qs,
                    historico_calificaciones=historico_calidficaciones.values(
                    )))
        except Campana.DoesNotExist:
            messages.warning(self.request,
                             _(u"Usted no puede acceder a esta campaña."))
            return redirect('index')
Exemplo n.º 5
0
    def _contabilizar_estadisticas(self):
        for log in self.logs:
            fecha = fecha_hora_local(log.time).strftime('%d-%m-%Y')
            tipo_campana = str(log.tipo_campana)
            tipo_llamada = str(log.tipo_llamada)
            if int(tipo_llamada) in LLAMADAS_TRANSFERENCIA:
                tipo_llamada = 'transferencia'
            self._contabilizar_total_llamadas_procesadas(log)

            # Si no se identifica el tipo de llamada no se contabiliza por tipo.
            if tipo_llamada:
                estadisticas_tipo = self.estadisticas['llamadas_por_tipo'][
                    tipo_llamada]
                self._contabilizar_llamada_por_tipo(estadisticas_tipo, log)
                llamadas_por_fecha = self._get_llamadas_de_tipo_en_fecha(
                    tipo_llamada, fecha)
                self._contabilizar_llamada_por_tipo(llamadas_por_fecha, log)

            self._contabilizar_llamadas_por_campana(log)

            tipos_por_campana = self.estadisticas[
                'tipos_de_llamada_por_campana']
            estadisticas_campana = tipos_por_campana[tipo_campana][
                log.campana_id]
            self._contabilizar_tipos_de_llamada_por_campana(
                estadisticas_campana, log)
            tipos_por_fecha = self._get_llamadas_de_campana_en_fecha(
                tipo_campana, log.campana_id, fecha)
            self._contabilizar_tipos_de_llamada_por_campana(
                tipos_por_fecha, log)

        self._aplicar_promedios_a_tiempos()
        self._generar_graficos()
 def test_datos_reporte_grafico_detalle_llamadas_dialer_coinciden_estadisticas_sistema(
         self, obtener_dato_campana_run):
     obtener_dato_campana_run.return_value = {'n_est_remaining_calls': 0}
     campana_dialer = CampanaFactory(type=Campana.TYPE_DIALER, estado=Campana.ESTADO_ACTIVA)
     self.generador_log_llamadas.generar_log(
         campana_dialer, False, 'COMPLETEAGENT', self.telefono1, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, False, 'COMPLETEOUTNUM', self.telefono2, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, False, 'ABANDON', self.telefono3, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, False, 'EXITWITHTIMEOUT', self.telefono4, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, False, 'CANCEL', self.telefono4, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, True, 'COMPLETEAGENT', self.telefono1, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, True, 'COMPLETEOUTNUM', self.telefono2, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_dialer, True, 'NOANSWER', self.telefono2, agente=self.agente_profile)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_dialer, fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     reporte = estadisticas_service.reporte_detalle_llamadas.reporte
     self.assertEqual(reporte['Discadas'], 5)
     self.assertEqual(reporte['Conectadas al agente'], 2)
     self.assertEqual(reporte['Atendidas'], 4)
     self.assertEqual(reporte['Perdidas'], 2)
     self.assertEqual(reporte['Manuales'], 3)
     self.assertEqual(reporte['Manuales atendidas'], 2)
     self.assertEqual(reporte['Manuales no atendidas'], 1)
Exemplo n.º 7
0
 def test_datos_reporte_grafico_detalle_llamadas_manuales_coinciden_estadisticas_sistema(
         self):
     campana_manual = CampanaFactory(type=Campana.TYPE_MANUAL,
                                     estado=Campana.ESTADO_ACTIVA)
     self.generador_log_llamadas.generar_log(campana_manual,
                                             True,
                                             'COMPLETEAGENT',
                                             self.telefono1,
                                             agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(campana_manual,
                                             True,
                                             'COMPLETEOUTNUM',
                                             self.telefono2,
                                             agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(campana_manual,
                                             True,
                                             'FAIL',
                                             self.telefono3,
                                             agente=self.agente_profile)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_manual, fecha_desde,
                                                fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     reporte = estadisticas_service.reporte_detalle_llamadas.reporte
     self.assertEqual(reporte['Discadas'], 3)
     self.assertEqual(reporte['Discadas atendidas'], 2)
     self.assertEqual(reporte['Discadas no atendidas'], 1)
 def test_datos_reporte_grafico_llamadas_entrantes_promedio_tiempo_espera(
         self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE,
                                       estado=Campana.ESTADO_ACTIVA)
     hoy = fecha_hora_local(timezone.now())
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             False,
                                             'COMPLETEAGENT',
                                             self.telefono1,
                                             agente=self.agente_profile,
                                             time=hoy,
                                             bridge_wait_time=4,
                                             callid=1)
     self.generador_log_llamadas.generar_log(campana_entrante,
                                             False,
                                             'COMPLETEOUTNUM',
                                             self.telefono2,
                                             agente=self.agente_profile,
                                             time=hoy,
                                             bridge_wait_time=2,
                                             callid=2)
     estadisticas_service = EstadisticasService()
     _, _, _, tiempo_promedio_espera, _ = estadisticas_service.obtener_total_llamadas(
         campana_entrante)
     self.assertEqual(tiempo_promedio_espera, 3)
 def test_datos_reporte_grafico_total_llamadas_entrantes_coinciden_estadisticas_sistema(self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE, estado=Campana.ESTADO_ACTIVA)
     self.generador_log_llamadas.generar_log(
         campana_entrante, False, 'COMPLETEAGENT', self.telefono1, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_entrante, False, 'COMPLETEOUTNUM', self.telefono2, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_entrante, False, 'EXITWITHTIMEOUT', self.telefono3, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_entrante, False, 'ABANDON', self.telefono4, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_entrante, True, 'COMPLETEAGENT', self.telefono1, agente=self.agente_profile)
     self.generador_log_llamadas.generar_log(
         campana_entrante, True, 'COMPLETEOUTNUM', self.telefono2, agente=self.agente_profile)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_entrante, fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     reporte = estadisticas_service.reporte_detalle_llamadas.reporte
     self.assertEqual(reporte['Recibidas'], 4)
     self.assertEqual(reporte['Atendidas'], 2)
     self.assertEqual(reporte['Expiradas'], 1)
     self.assertEqual(reporte['Abandonadas'], 1)
     self.assertEqual(reporte['Manuales'], 2)
     self.assertEqual(reporte['Manuales atendidas'], 2)
     self.assertEqual(reporte['Manuales no atendidas'], 0)
Exemplo n.º 10
0
    def test_llamadas_de_tipo_por_fecha(self):
        tipo = str(Campana.TYPE_ENTRANTE)
        campana = self.entrante
        generador = GeneradorDeLlamadaLogs()
        for i in range(5):
            generador.generar_log(campana,
                                  False,
                                  'COMPLETEOUTNUM',
                                  '123',
                                  self.agente1,
                                  bridge_wait_time=4,
                                  time=self.durante)
        for i in range(3):
            generador.generar_log(campana,
                                  False,
                                  'COMPLETEAGENT',
                                  '123',
                                  self.agente1,
                                  bridge_wait_time=6)

        str_ayer = self.durante.strftime('%d-%m-%Y')
        str_hoy = self.hasta.strftime('%d-%m-%Y')

        self.hasta = fecha_hora_local(now())
        reporte = ReporteDeLlamadas(self.desde, self.hasta, True,
                                    self.supervisor.user)
        self.assertIn(tipo,
                      reporte.estadisticas_por_fecha['llamadas_por_tipo'])
        self.assertIn(
            str_ayer,
            reporte.estadisticas_por_fecha['llamadas_por_tipo'][tipo])
        self.assertIn(
            str_hoy, reporte.estadisticas_por_fecha['llamadas_por_tipo'][tipo])
        datos_ayer = reporte.estadisticas_por_fecha['llamadas_por_tipo'][tipo][
            str_ayer]
        datos_hoy = reporte.estadisticas_por_fecha['llamadas_por_tipo'][tipo][
            str_hoy]
        self.assertEqual(datos_ayer['atendidas'], 5)
        self.assertEqual(datos_ayer['total'], 5)
        self.assertEqual(datos_hoy['atendidas'], 3)
        self.assertEqual(datos_hoy['total'], 3)

        self.assertIn(
            tipo,
            reporte.estadisticas_por_fecha['tipos_de_llamada_por_campana'])
        tipos_por_campana = reporte.estadisticas_por_fecha[
            'tipos_de_llamada_por_campana'][tipo]
        self.assertIn(str_ayer, tipos_por_campana[self.entrante.id])
        self.assertIn(str_hoy, tipos_por_campana[self.entrante.id])
        datos_ayer = tipos_por_campana[self.entrante.id][str_ayer]
        datos_hoy = tipos_por_campana[self.entrante.id][str_hoy]
        self.assertEqual(datos_ayer['atendidas'], 5)
        self.assertEqual(datos_ayer['recibidas'], 5)
        self.assertEqual(datos_ayer['t_espera_conexion'], 4)
        self.assertEqual(datos_hoy['atendidas'], 3)
        self.assertEqual(datos_hoy['recibidas'], 3)
        self.assertEqual(datos_hoy['t_espera_conexion'], 6)
Exemplo n.º 11
0
 def get(self, request, *args, **kwargs):
     service = ReporteAgenteService()
     service_formulario = ReporteFormularioVentaService()
     hoy_ahora = datetime.datetime.today()
     hoy = hoy_ahora.date()
     agente = self.agente
     # Crear reporte csv para las calficaciones no interesada(no gestion) y gestion
     service.crea_reporte_csv(agente, hoy, hoy_ahora)
     service_formulario.crea_reporte_csv(agente, hoy, hoy_ahora)
     fecha_desde = fecha_hora_local(
         datetime.datetime.combine(hoy, datetime.time.min))
     fecha_hasta = fecha_hora_local(
         datetime.datetime.combine(hoy_ahora, datetime.time.max))
     listado_calificaciones = agente.calificaciones.filter(
         fecha__range=(fecha_desde, fecha_hasta))
     return self.render_to_response(
         self.get_context_data(
             listado_calificaciones=listado_calificaciones))
Exemplo n.º 12
0
 def obtener_total_llamadas(self, campana):
     """Obtiene los totales de llamadas realizadas y pendiente por la campaña
     :param campana: campana la cual se obtiene los totales
     :return: los totales de llamadas realizadas y pendientes de la campaña
     """
     logs_llamadas_campana_raw = LlamadaLog.objects.filter(
         campana_id=campana.pk)
     logs_llamadas_campana = logs_llamadas_campana_raw.values(
         'event').annotate(cantidad=Count('event'))
     if campana.type == Campana.TYPE_ENTRANTE:
         # en las campañas entrantes solo queremos mostrar las llamadas ocurridas en el día
         # actual
         hoy_ahora = fecha_hora_local(timezone.now())
         hoy = hoy_ahora.date()
         fecha_desde = datetime.datetime.combine(hoy, datetime.time.min)
         fecha_hasta = datetime.datetime.combine(hoy_ahora,
                                                 datetime.time.max)
         logs_llamadas_campana_raw = logs_llamadas_campana_raw.filter(
             time__range=(fecha_desde, fecha_hasta))
         logs_llamadas_campana = logs_llamadas_campana.filter(
             time__range=(fecha_desde, fecha_hasta))
         logs_llamadas_campana_raw = logs_llamadas_campana_raw.filter(
             time__range=(fecha_desde, fecha_hasta))
     # obtenemos los eventos en formato más sencillo para indexar
     dict_eventos_campana = self._convertir_eventos_values_dict(
         logs_llamadas_campana)
     # calculamos los contadores de cada tipo de llamada
     (llamadas_pendientes, llamadas_realizadas, llamadas_recibidas,
      tiempo_promedio_espera, tiempo_promedio_abandono) = (None, ) * 5
     llamadas_realizadas = dict_eventos_campana.get('DIAL', 0)
     if campana.type == Campana.TYPE_DIALER:
         campana_service = CampanaService()
         dato_campana = campana_service.obtener_dato_campana_run(campana)
         llamadas_pendientes = 0
         if dato_campana:
             llamadas_pendientes = dato_campana.get('n_est_remaining_calls',
                                                    0)
     elif campana.type == Campana.TYPE_ENTRANTE:
         llamadas_recibidas = dict_eventos_campana.get('ENTERQUEUE', 0) +\
             dict_eventos_campana.get('ABANDONWEL', 0)
         llamadas_recibidas_transferidas = dict_eventos_campana.get(
             'ENTERQUEUE-TRANSFER', 0)
         llamadas_recibidas += llamadas_recibidas_transferidas
         tiempo_promedio_espera = self._calcular_tiempo_promedio_espera(
             logs_llamadas_campana_raw)
         tiempo_promedio_abandono = self._calcular_tiempo_promedio_abandono(
             logs_llamadas_campana_raw)
     elif campana.type == Campana.TYPE_PREVIEW:
         llamadas_pendientes = AgenteEnContacto.objects.filter(
             estado=AgenteEnContacto.ESTADO_INICIAL,
             campana_id=campana.pk,
             es_originario=True).count()
     llamadas_pendientes = self._adicionar_agendas_pendientes(
         campana, llamadas_pendientes)
     return (llamadas_pendientes, llamadas_realizadas, llamadas_recibidas,
             tiempo_promedio_espera, tiempo_promedio_abandono)
Exemplo n.º 13
0
 def get(self, request, *args, **kwargs):
     campana = self.get_object()
     if not campana:
         messages.warning(self.request,
                          _(u"Usted no puede acceder a esta campaña."))
         return redirect('index')
     hoy_ahora = fecha_hora_local(timezone.now())
     hoy = hoy_ahora.date()
     fecha_desde = fecha_hora_local(
         datetime.datetime.combine(hoy, datetime.time.min))
     fecha_hasta = fecha_hora_local(
         datetime.datetime.combine(hoy_ahora, datetime.time.max))
     service = EstadisticasService(campana, fecha_desde, fecha_hasta)
     # genera los reportes grafico de la campana
     graficos_estadisticas = service.general_campana()
     # generar el reporte pdf
     service_pdf = ReporteCampanaPDFService()
     service_pdf.crea_reporte_pdf(campana, graficos_estadisticas)
     return self.render_to_response(
         self.get_context_data(graficos_estadisticas=graficos_estadisticas,
                               pk_campana=self.kwargs['pk_campana']))
Exemplo n.º 14
0
 def get(self, request, *args, **kwargs):
     hoy_ahora = fecha_hora_local(now())
     hoy_inicio = datetime_hora_minima_dia(hoy_ahora)
     reporte = ReporteDeLlamadas(hoy_inicio, hoy_ahora, False, request.user)
     return self.render_to_response(
         self.get_context_data(
             desde=hoy_inicio,
             hasta=hoy_ahora,
             estadisticas=reporte.estadisticas,
             graficos=reporte.graficos,
             estadisticas_por_fecha=reporte.estadisticas_por_fecha,
             estadisticas_json=json.dumps(reporte.estadisticas)))
 def test_datos_reporte_grafico_llamadas_entrantes_promedio_tiempo_abandono(self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE, estado=Campana.ESTADO_ACTIVA)
     hoy = fecha_hora_local(timezone.now())
     self.generador_log_llamadas.generar_log(
         campana_entrante, False, 'ABANDON', self.telefono1, agente=self.agente_profile,
         time=hoy, bridge_wait_time=4)
     LlamadaLogFactory(tipo_campana=Campana.TYPE_ENTRANTE, campana_id=campana_entrante.pk,
                       event='ABANDONWEL', bridge_wait_time=5, time=hoy)
     estadisticas_service = EstadisticasService()
     _, _, _, _, tiempo_promedio_abandono = estadisticas_service.obtener_total_llamadas(
         campana_entrante)
     self.assertEqual(tiempo_promedio_abandono, 4.5)
 def test_reporte_contactados_campanas_entrantes_linkean_calificaciones_llamadas(self, publish):
     self.campana_activa.type = Campana.TYPE_ENTRANTE
     self.campana_activa.save()
     self.calif_gestion.callid = '000000'
     self.calif_gestion.save()
     key_task = 'key_task'
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     reporte_contactados_csv = ReporteContactadosCSV(
         self.campana_activa, key_task, fecha_desde, fecha_hasta)
     # muestra el histórico de contactados (aqui cuenta la linea de header)
     self.assertEqual(len(reporte_contactados_csv.datos), 4)
 def test_datos_reporte_grafico_detalle_llamadas_preview_coinciden_estadisticas_sistema(self):
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(self.campana_activa, fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     reporte = estadisticas_service.reporte_detalle_llamadas.reporte
     # se usan los logs de llamadas del setUp pues la campaña usada es preview
     self.assertEqual(reporte['Discadas'], 2)
     self.assertEqual(reporte['Conectadas'], 2)
     self.assertEqual(reporte['No conectadas'], 0)
     self.assertEqual(reporte['Manuales'], 2)
     self.assertEqual(reporte['Manuales atendidas'], 1)
     self.assertEqual(reporte['Manuales no atendidas'], 1)
Exemplo n.º 18
0
    def setUp(self):
        super(BaseReporteDeLlamadasTests, self).setUp()
        self.hasta = fecha_hora_local(now())
        self.durante = fecha_hora_local(now() - timedelta(days=1))
        self.desde = datetime_hora_minima_dia(self.hasta) - timedelta(days=1)

        self.supervisor = SupervisorProfileFactory(is_administrador=True)

        self.agente1 = AgenteProfileFactory()
        self.agente2 = AgenteProfileFactory()
        self.agente3 = AgenteProfileFactory()

        self.manual = CampanaFactory.create(type=Campana.TYPE_MANUAL,
                                            nombre='camp-manual-1',
                                            estado=Campana.ESTADO_ACTIVA)

        self.dialer = CampanaFactory.create(type=Campana.TYPE_DIALER,
                                            nombre='camp-dialer-1',
                                            estado=Campana.ESTADO_ACTIVA)
        self.contacto_d = ContactoFactory(bd_contacto=self.dialer.bd_contacto)

        self.entrante = CampanaFactory.create(type=Campana.TYPE_ENTRANTE,
                                              nombre='camp-entrante-1',
                                              estado=Campana.ESTADO_ACTIVA)

        self.preview = CampanaFactory.create(type=Campana.TYPE_PREVIEW,
                                             nombre='camp-preview-1',
                                             estado=Campana.ESTADO_ACTIVA)
        self.contacto_p = ContactoFactory(bd_contacto=self.preview.bd_contacto)

        self.campanas = [
            self.manual,
            self.dialer,
            self.entrante,
            self.preview,
        ]
 def test_calificaciones_agenda_se_adicionan_a_llamadas_pendientes(self):
     campana_manual = CampanaFactory(type=Campana.TYPE_MANUAL, estado=Campana.ESTADO_ACTIVA)
     opcion_calificacion_agenda = OpcionCalificacionFactory(
         nombre=settings.CALIFICACION_REAGENDA, campana=campana_manual,
         tipo=OpcionCalificacion.AGENDA)
     log = LlamadaLogFactory(campana_id=campana_manual.pk)
     CalificacionClienteFactory(
         callid=log.callid,
         opcion_calificacion=opcion_calificacion_agenda, agente=self.agente_profile)
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     estadisticas_service = EstadisticasService(campana_manual, fecha_desde, fecha_hasta)
     estadisticas_service.calcular_estadisticas_totales()
     self.assertEqual(estadisticas_service.reporte_totales_llamadas.llamadas_pendientes, 1)
 def test_reporte_contactados_campanas_no_entrantes_muestran_valor_calificacion_historica(
         self, exportar_reportes_csv, crea_reporte_pdf, redis_publish):
     id_llamada = '000000'
     LlamadaLogFactory(callid=id_llamada, campana_id=self.campana_activa.pk,
                       event='COMPLETEAGENT')
     self.calif_gestion.callid = id_llamada
     self.calif_gestion.save()
     key_task = 'key_task'
     hoy_ahora = fecha_hora_local(timezone.now())
     fecha_desde = datetime_hora_minima_dia_utc(hoy_ahora)
     fecha_hasta = datetime_hora_maxima_dia_utc(hoy_ahora)
     reporte_contactados_csv = ReporteContactadosCSV(
         self.campana_activa, key_task, fecha_desde, fecha_hasta)
     # muestra el histórico de contactados (aqui cuenta la linea de header)
     self.assertEqual(len(reporte_contactados_csv.datos), 5)
Exemplo n.º 21
0
 def form_valid(self, form):
     fecha = form.cleaned_data.get('fecha')
     fecha_desde, fecha_hasta = fecha.split('-')
     fecha_desde = convert_fecha_datetime(fecha_desde)
     fecha_hasta = convert_fecha_datetime(fecha_hasta)
     resultado = form.cleaned_data.get('resultado_auditoria')
     service = ReporteAgenteService()
     service_formulario = ReporteFormularioVentaService()
     agente = self.agente
     # Crear reporte csv para las calficaciones no interesada(no gestion) y gestion
     # de acuerdo al periodo de fecha seleccionado
     if not resultado == ReporteForm.TODOS_RESULTADOS:
         service.crea_reporte_csv(agente, fecha_desde, fecha_hasta)
         service_formulario.crea_reporte_csv(agente, fecha_desde,
                                             fecha_hasta)
     else:
         service.crea_reporte_csv(agente,
                                  fecha_desde,
                                  fecha_hasta,
                                  resultado=resultado)
         service_formulario.crea_reporte_csv(agente,
                                             fecha_desde,
                                             fecha_hasta,
                                             resultado=resultado)
     fecha_desde = fecha_hora_local(
         datetime.datetime.combine(fecha_desde, datetime.time.min))
     fecha_hasta = fecha_hora_local(
         datetime.datetime.combine(fecha_hasta, datetime.time.max))
     listado_calificaciones = agente.calificaciones.filter(
         fecha__range=(fecha_desde, fecha_hasta))
     if not resultado == ReporteForm.TODOS_RESULTADOS:
         listado_calificaciones = listado_calificaciones.filter(
             auditoriacalificacion__resultado=resultado)
     return self.render_to_response(
         self.get_context_data(
             listado_calificaciones=listado_calificaciones))
 def test_datos_reporte_grafico_llamadas_entrantes_realizadas_muestran_solo_dia_actual(
         self):
     campana_entrante = CampanaFactory(type=Campana.TYPE_ENTRANTE, estado=Campana.ESTADO_ACTIVA)
     hoy = fecha_hora_local(timezone.now())
     ayer = hoy - timedelta(days=1)
     self.generador_log_llamadas.generar_log(
         campana_entrante, True, 'COMPLETEAGENT', self.telefono1, agente=self.agente_profile,
         time=ayer)
     self.generador_log_llamadas.generar_log(
         campana_entrante, True, 'COMPLETEOUTNUM', self.telefono2, agente=self.agente_profile,
         time=hoy)
     estadisticas_service = EstadisticasService()
     hoy = fecha_local(timezone.now())
     _, llamadas_realizadas, _, _, _ = estadisticas_service.obtener_total_llamadas(
         campana_entrante)
     self.assertEqual(llamadas_realizadas, 1)
Exemplo n.º 23
0
 def get(self, request, *args, **kwargs):
     campana = self.get_object()
     if not campana:
         messages.warning(self.request,
                          _(u"Usted no puede acceder a esta campaña."))
         return redirect('index')
     service = EstadisticasService()
     hoy_ahora = fecha_hora_local(timezone.now())
     hoy = hoy_ahora.date()
     # genera reporte de llamadas contactados
     calificados_csv = ReporteCampanaContactadosCSV()
     calificados_csv.crea_reporte_csv(campana, hoy, hoy_ahora)
     # genera los reportes grafico de la campana
     graficos_estadisticas = service.general_campana(
         campana, hoy, hoy_ahora)
     # generar el reporte pdf
     service_pdf = ReporteCampanaPDFService()
     service_pdf.crea_reporte_pdf(campana, graficos_estadisticas)
     return self.render_to_response(
         self.get_context_data(graficos_estadisticas=graficos_estadisticas,
                               pk_campana=self.kwargs['pk_campana']))
Exemplo n.º 24
0
 def _obtener_fechas(self):
     hoy = fecha_hora_local(now())
     hace_mucho = hoy - timedelta(days=3)
     ahora = fecha_hora_local(now())
     return (hoy, hace_mucho, ahora)