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)
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)
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) estadisticas_service = EstadisticasService() hoy = fecha_local(timezone.now()) reporte = estadisticas_service.calcular_cantidad_llamadas( campana_manual, hoy, hoy) self.assertEqual(reporte['Discadas'], 3) self.assertEqual(reporte['Discadas atendidas'], 2) self.assertEqual(reporte['Discadas no atendidas'], 1)
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_detalle_llamadas_dialer_coinciden_estadisticas_sistema(self): 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) estadisticas_service = EstadisticasService() hoy = fecha_local(timezone.now()) reporte = estadisticas_service.calcular_cantidad_llamadas(campana_dialer, hoy, hoy) 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)
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)
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)
def get(self, request, *args, **kwargs): # Indicamos el tipo de contenido a devolver, en este caso un pdf campana = Campana.objects.get(pk=self.kwargs['pk_campana']) service = EstadisticasService() hoy_ahora = datetime.datetime.today() hoy = hoy_ahora.date() # hoy = datetime.date(2015, 1, 1) estadisticas = service.general_campana(campana, hoy, hoy_ahora) response = HttpResponse(content_type='application/pdf') buffer = BytesIO() # Canvas nos permite hacer el reporte con coordenadas X y Y pdf = canvas.Canvas(buffer) self.cabecera(pdf, campana) self.tabla_calificacion(pdf, estadisticas['dict_campana_counter'], estadisticas['total_asignados']) self.tabla_no_atendidos(pdf, estadisticas['dict_no_atendido_counter'], estadisticas['total_no_atendidos']) pdf.showPage() self.tabla_agente(pdf, estadisticas['agentes_venta'], estadisticas['calificaciones']) pdf.showPage() pdf.save() pdf = buffer.getvalue() buffer.close() response.write(pdf) return response
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)
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) CalificacionClienteFactory( opcion_calificacion=opcion_calificacion_agenda, agente=self.agente_profile) estadisticas_service = EstadisticasService() llamadas_pendientes, _, _, _, _ = estadisticas_service.obtener_total_llamadas( campana_manual) self.assertEqual(llamadas_pendientes, 1)
def test_datos_reporte_grafico_detalle_llamadas_preview_coinciden_estadisticas_sistema(self): estadisticas_service = EstadisticasService() hoy = fecha_local(timezone.now()) reporte = estadisticas_service.calcular_cantidad_llamadas(self.campana_activa, hoy, hoy) # 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)
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_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)
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_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)
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) fecha_desde = datetime.datetime.combine(fecha_desde, datetime.time.min) fecha_hasta = datetime.datetime.combine(fecha_hasta, datetime.time.max) # generar el reporte grafico de acuerdo al periodo de fecha seleccionado service = EstadisticasService(self.get_object(), fecha_desde, fecha_hasta) graficos_estadisticas = service.general_campana() # genera el reporte pdf de la campana service_pdf = ReporteCampanaPDFService() service_pdf.crea_reporte_pdf(self.get_object(), graficos_estadisticas) return self.render_to_response( self.get_context_data(graficos_estadisticas=graficos_estadisticas, pk_campana=self.kwargs['pk_campana']))
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 = datetime.datetime.combine(hoy, datetime.time.min) fecha_hasta = 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']))
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']))