def form_valid(self, form):
        contacto = form.save(commit=False)
        contacto.datos = form.get_datos_json()
        contacto.es_originario = False
        contacto.save()

        # TODO: OML-1016 Tener en cuenta esto al hacer esta card.
        if self.campana.type == Campana.TYPE_PREVIEW:
            self.campana.adicionar_agente_en_contacto(contacto)

        if self.accion == 'calificar':
            return HttpResponseRedirect(
                reverse('calificacion_formulario_update_or_create',
                        kwargs={
                            "pk_campana": self.kwargs['pk_campana'],
                            "pk_contacto": contacto.pk
                        }))
        else:
            agente = self.request.user.get_agente_profile()
            click2call_type = 'contactos'
            if self.telefono:
                telefono = self.telefono

            originator = Click2CallOriginator()
            originator.call_originate(agente, self.campana.id,
                                      str(self.campana.type), contacto.id,
                                      telefono, click2call_type)
            message = _(
                "Contacto creado satisfactoriamente. Efectuando llamada.")
            messages.success(self.request, message)
            return super(FormularioNuevoContactoFormView,
                         self).form_valid(form)
示例#2
0
    def post(self, request):
        self.sistema_externo = None
        if 'idExternalSystem' in request.data:
            try:
                id_external_system = request.data['idExternalSystem']
                self.sistema_externo = SistemaExterno.objects.get(
                    id=id_external_system)
            except SistemaExterno.DoesNotExist:
                return Response(
                    data={
                        'status': 'ERROR',
                        'message': _('Hubo errores en los datos recibidos'),
                        'errors': {
                            'idExternalSystem':
                            [_('Sistema externo inexistente.')]
                        }
                    })
            form = Click2CallExternalSiteParametersForm(
                sistema_externo=self.sistema_externo, data=request.data)
        else:
            form = Click2CallOMLParametersForm(request.data)

        if form.is_valid():
            # TODO: Verificar que el agente que dispara la llamada es el mismo de la autenticación
            agente = form.get_agente()
            campana = form.get_campana()
            contacto_id = form.get_contacto_id()
            telefono = form.cleaned_data.get('phone')
            click2call_type = 'contactos'  # TODO: Consultar con Fabian

            originator = Click2CallOriginator()
            error = originator.call_originate(agente, campana.id,
                                              str(campana.type), contacto_id,
                                              telefono, click2call_type)
            if error is None:
                return Response(data={
                    'status': 'OK',
                })
            else:
                return Response(
                    data={
                        'status': 'ERROR',
                        'message': _('Error al ejecutar la llamada'),
                        'errors': [error]
                    })
            return Response(data={
                'status': 'OK',
            })
        else:
            return Response(
                data={
                    'status': 'ERROR',
                    'message': _('Hubo errores en los datos recibidos'),
                    'errors': form.errors
                })
示例#3
0
    def post(self, request, *args, **kwargs):
        # TODO: Analizar bien el caso de que se este agregando un contacto
        agente = AgenteProfile.objects.get(pk=request.POST['pk_agente'])
        click2call_type = request.POST.get('click2call_type', 'false')
        tipo_campana = request.POST.get('tipo_campana')
        campana_id = request.POST.get('pk_campana')
        telefono = request.POST.get('telefono', '')

        # Si el pk es 0 es porque no se quiere identificar al contacto.
        # El tipo de click2call no será "preview".
        contacto_id = request.POST['pk_contacto']
        if not contacto_id == '-1':
            contacto = Contacto.objects.get(pk=contacto_id)

        if not telefono:
            telefono = contacto.telefono

        if campana_id == '':
            calificacion_cliente = CalificacionCliente.objects.filter(
                contacto=contacto, agente=agente).order_by('-fecha')
            if calificacion_cliente.exists():
                campana = calificacion_cliente[0].campana
                campana_id = str(campana.pk)
                tipo_campana = str(campana.type)

        elif click2call_type == 'preview':
            asignado = AgenteEnContacto.asignar_contacto(
                contacto.id, campana_id, agente)
            if not asignado:
                message = _(u'No es posible llamar al contacto.'
                            ' Para poder llamar un contacto debe obtenerlo'
                            ' desde el menu de Campañas Preview.'
                            ' Asegurese de no haber perdido la reserva')
                messages.warning(self.request, message)
                return HttpResponseRedirect(
                    reverse('campana_preview_activas_miembro'))

        originator = Click2CallOriginator()
        originator.call_originate(agente, campana_id, tipo_campana,
                                  contacto_id, telefono, click2call_type)
        return HttpResponseRedirect(reverse('view_blanco'))
示例#4
0
    def post(self, request, *args, **kwargs):
        agente = self.request.user.get_agente_profile()
        tipo_destino = request.POST.get('tipo_destino')
        destino = request.POST.get('destino', '')

        originator = Click2CallOriginator()
        if tipo_destino == Click2CallOriginator.AGENT:
            try:
                agente_destino = AgenteProfile.objects.get(id=destino)
            except AgenteProfile.DoesNotExist:
                # TODO: Deberia devolver json con error de agente incorrecto?
                pass
            else:
                originator.call_agent(agente, agente_destino)
        elif tipo_destino == Click2CallOriginator.EXTERNAL:
            # TODO: Validar destino como un numero valido?
            originator.call_external(agente, destino)
        else:
            # TODO: Devolver Json con error de tipo destino incorrecto?
            pass

        return HttpResponseRedirect(reverse('view_blanco'))
    def form_valid(self, form):
        contacto = form.save(commit=False)
        contacto.datos = form.get_datos_json()
        contacto.es_originario = False
        contacto.save()

        agente = self.request.user.get_agente_profile()

        # TODO: OML-1016 - Ver si hay que agregar el contacto en Wombat.

        if self.campana.type == Campana.TYPE_PREVIEW:
            # Se crea el agente en contacto únicamente para esta campaña, asignado a este agente.
            self.campana.adicionar_agente_en_contacto(contacto,
                                                      agente_id=agente.id,
                                                      es_originario=False)

        if self.accion == 'calificar':
            return HttpResponseRedirect(
                reverse('calificacion_formulario_update_or_create',
                        kwargs={
                            "pk_campana": self.kwargs['pk_campana'],
                            "pk_contacto": contacto.pk
                        }))
        else:
            click2call_type = 'contactos'
            if self.telefono:
                telefono = self.telefono

            originator = Click2CallOriginator()
            transaction.on_commit(lambda: originator.call_originate(
                agente, self.campana.id, str(self.campana.type), contacto.id,
                telefono, click2call_type))
            message = _(
                "Contacto creado satisfactoriamente. Efectuando llamada.")
            messages.success(self.request, message)
            return super(FormularioNuevoContactoFormView,
                         self).form_valid(form)
示例#6
0
    def post(self, request, *args, **kwargs):
        # TODO: Analizar bien el caso de que se este agregando un contacto
        # TODO: DEJAR DE MANDAR pk_agente
        # TODO: DEJAR DE MANDAR tipo_campana
        agente = self.request.user.get_agente_profile()
        click2call_type = request.POST.get('click2call_type', 'false')
        campana_id = request.POST.get('pk_campana')
        telefono = request.POST.get('telefono', '')

        # Patch: Para deectar que hubo un error cuando se le pega por AJAX...
        self.no_redirect = request.POST.get('404_on_error')

        # Si el pk es 0 es porque no se quiere identificar al contacto.
        # El tipo de click2call no será "preview".
        contacto_id = request.POST['pk_contacto']
        if not contacto_id == '-1':
            try:
                contacto = Contacto.objects.get(pk=contacto_id)
            except Contacto.DoesNotExist:
                message = _(
                    u'No es posible llamar al contacto. No se pudo identificar al contacto.'
                )
                return self.error_return_value('view_blanco', message)

        if not telefono:
            if not contacto:
                message = _(
                    u'No es posible llamar al contacto. No se pudo identificar un teléfono.'
                )
                return self.error_return_value('view_blanco', message)
            telefono = contacto.telefono

        if campana_id == '':
            calificacion_cliente = CalificacionCliente.objects.filter(
                contacto=contacto, agente=agente).order_by('-fecha')
            if calificacion_cliente.exists():
                campana = calificacion_cliente[0].campana
                campana_id = str(campana.pk)
                tipo_campana = str(campana.type)
        else:
            try:
                campana = Campana.objects.obtener_actuales().get(id=campana_id)
            except Campana.DoesNotExist:
                message = _(
                    u'No es posible llamar al contacto.'
                    ' La campaña no se encuentra activa o no existe en el sistema.'
                )
                return self.error_return_value('view_blanco', message)
            campana_id = str(campana.pk)
            tipo_campana = str(campana.type)

            if click2call_type == 'preview':
                asignado = AgenteEnContacto.asignar_contacto(
                    contacto.id, campana.pk, agente)
                if not asignado:
                    message = _(u'No es posible llamar al contacto.'
                                ' Para poder llamar un contacto debe obtenerlo'
                                ' desde el menu de Campañas Preview.'
                                ' Asegurese de no haber perdido la reserva')
                    return self.error_return_value(
                        'campana_preview_activas_miembro', message)

        originator = Click2CallOriginator()
        originator.call_originate(agente, campana_id, tipo_campana,
                                  contacto_id, telefono, click2call_type)
        return HttpResponseRedirect(reverse('view_blanco'))