def form_valid(self, form): reciclado_calificacion = form.cleaned_data.get( 'reciclado_calificacion') reciclado_no_contactacion = form.cleaned_data.get( 'reciclado_no_contactacion') reciclado_radio = form.cleaned_data.get('reciclado_radio') if not (reciclado_calificacion or reciclado_no_contactacion): message = '<strong>Operación Errónea!</strong> \ Debe seleccionar al menos una opcion para reciclar ' messages.add_message( self.request, messages.ERROR, message, ) return self.form_invalid(form) campana = Campana.objects.get(pk=self.kwargs['pk_campana']) reciclador = RecicladorContactosCampanaDIALER() bd_contacto_reciclada = reciclador.reciclar(campana, reciclado_calificacion, reciclado_no_contactacion) if reciclado_radio == 'nueva_campaña': try: # Intenta reciclar la campana con el tipo de reciclado # seleccionado. campana_reciclada = Campana.objects.reciclar_campana( campana, bd_contacto_reciclada) except OmlRecicladoCampanaError: message = '<strong>Operación Errónea!</strong>\ No se pudo reciclar la Campana.' messages.add_message( self.request, messages.ERROR, message, ) return self.form_invalid(form) return HttpResponseRedirect( reverse("crea_campana_dialer_template", kwargs={ "pk_campana_template": campana_reciclada.pk, "borrar_template": 1 })) elif reciclado_radio == 'misma_campana': campana.update_basedatoscontactos(bd_contacto_reciclada) campana_service = CampanaService() campana_service.cambiar_base(campana, [], False, False, "") campana.estado = Campana.ESTADO_INACTIVA campana.save() return HttpResponseRedirect( reverse("campana_dialer_update", kwargs={"pk_campana": campana.pk}))
def form_valid(self, form): reciclado_calificacion = form.cleaned_data.get( 'reciclado_calificacion') reciclado_no_contactacion = form.cleaned_data.get( 'reciclado_no_contactacion') reciclado_radio = form.cleaned_data.get('reciclado_radio') if not (reciclado_calificacion or reciclado_no_contactacion): message = '<strong>Operación Errónea!</strong> \ Debe seleccionar al menos una opcion para reciclar ' messages.add_message( self.request, messages.ERROR, message, ) return self.form_invalid(form) campana = Campana.objects.get(pk=self.kwargs['pk_campana']) reciclador = RecicladorContactosCampanaDIALER() bd_contacto_reciclada = reciclador.reciclar(campana, reciclado_calificacion, reciclado_no_contactacion) if reciclado_radio == 'nueva_campaña': try: # Intenta reciclar la campana con el tipo de reciclado # seleccionado. campana_reciclada = Campana.objects.reciclar_campana( campana, bd_contacto_reciclada) except OmlRecicladoCampanaError: message = '<strong>Operación Errónea!</strong>\ No se pudo reciclar la Campana.' messages.add_message( self.request, messages.ERROR, message, ) return self.form_invalid(form) crea_campana_template = self._reciclar_crear_nueva_campana( campana_reciclada) return HttpResponseRedirect(crea_campana_template) elif reciclado_radio == 'misma_campana': campana.update_basedatoscontactos(bd_contacto_reciclada) update_campana = self._reciclar_misma_campana(campana) return HttpResponseRedirect( reverse(update_campana, kwargs={"pk_campana": campana.pk}))
def test_obtiene_contactos_reciclados_contactados_calificados(self): self._generar_llamadas_y_calificaciones(self.estados) reciclador = RecicladorContactosCampanaDIALER() # vamos a chequear que sea la misma cantidad de contactos reciclados # para los calificados for calificacion in self.campana.opciones_calificacion.all(): contactos_reciclados = reciclador._obtener_contactos_calificados( self.campana, [calificacion]) calificaciones_query = self.campana.obtener_calificaciones( ).filter(opcion_calificacion=calificacion).values_list( 'contacto_id', flat=True) self.assertEquals(calificaciones_query.count(), len(contactos_reciclados))
def test_obtiene_contactos_no_llamados_campana_activas(self): reciclador = RecicladorContactosCampanaDIALER() contactos = self.campana_2.bd_contacto.contactos.all() generador = GeneradorDeLlamadaLogs() cant_llamados = 20 # Al ser una campana activa puede haber contactos no llamados, por lo tanto # solo llamamos a 20 de 100 contactos for i in range(0, cant_llamados): contacto = contactos[i] estado = random.choice(self.estados) generador.generar_log(self.campana_2, False, estado, contacto.telefono, None, contacto) contactos_no_llamados = reciclador._obtener_contactos_no_llamados( self.campana_2) self.assertEqual(len(contactos_no_llamados), 80)
def test_obtiene_contactos_reciclados_contactados_no_calificados(self): self._generar_llamadas_y_calificaciones(self.estados) reciclador = RecicladorContactosCampanaDIALER() # ahora chequeamos para agente no califico calificados = self.campana.obtener_calificaciones().values_list( 'contacto_id', flat=True).distinct() contactados_no_calificados = LlamadaLog.objects.filter( event='CONNECT').exclude(contacto_id__in=calificados).values_list( 'contacto_id', flat=True) no_calificados_reciclados = reciclador._obtener_contactos_no_contactados( self.campana, [ EstadisticasContactacion.AGENTE_NO_CALIFICO, ]).values_list('id', flat=True) self.assertEqual(set(no_calificados_reciclados), set(contactados_no_calificados))
def test_obtiene_contactos_reciclados_no_contactados(self): reciclador = RecicladorContactosCampanaDIALER() # ahora vamos a chequear para los no contactados for estado in self.estados: id_estado = EstadisticasContactacion.MAP_ESTADO_ID[estado] no_contactados_reciclados = reciclador._obtener_contactos_no_contactados( self.campana, [ id_estado, ]) for contacto in no_contactados_reciclados: self.assertEqual( CalificacionCliente.objects.filter( contacto_id=contacto.id).count(), 0) logs = LlamadaLog.objects.filter( contacto_id=contacto.id).order_by('-id') self.assertTrue(logs.count() > 0) self.assertEqual(logs[0].event, estado)