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 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_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 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')
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)
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)
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)
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))
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)
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']))
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)
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)
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)
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']))
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)