示例#1
0
    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}))
示例#2
0
    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}))
示例#3
0
    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))
示例#4
0
 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)
示例#5
0
    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))
示例#6
0
    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)