def post(self, request, *args, **kwargs): # TODO: Validar que el supervisor tiene permisos sobre la campaña campana_id = request.POST.get('campana_id') agente = request.user.get_agente_profile() if AgenteEnContacto.liberar_contacto(agente.id, campana_id): return JsonResponse({'status': 'OK'}) else: return JsonResponse({'status': 'ERROR'})
def test_nunca_se_reservan_contactos_asignados_a_otro_agente(self): # Al pedir un contacto nunca se entrega uno asignado a OTRO agente AgenteEnContacto.objects.filter(contacto_id=self.contacto_1.id).update( agente_id=self.agente_1.id, estado=AgenteEnContacto.ESTADO_ASIGNADO) # Al pedir un contacto para otro agente no debe entregar el contacto asignado entrega = AgenteEnContacto.entregar_contacto(self.agente_2, self.campana_preview.id) self.assertEqual(entrega['result'], 'OK') self.assertEqual(entrega['code'], 'contacto-entregado') self.assertNotEqual(entrega['contacto_id'], self.contacto_1.id) # En particular, al ser 2 contactos nada más, solo puede entregar el otro self.assertEqual(entrega['contacto_id'], self.contacto_2.id)
def _actualizar_relaciones_agente_contacto(self): """ Procedimiento que libera los contactos reservados y asignados a los agentes de las campañas preview al sobrepasar el tiempo máximo definido para atenderlo. Los contactos liberados podrán ser asignados a nuevos agentes para la finalización de su gestión """ liberados = AgenteEnContacto.liberar_contactos_por_tiempo() logger.info( _("Actualizando {0} asignaciones de contactos a agentes en campañas preview" .format(liberados)))
def _actualizar_relacion_agente_contacto(self, campana_id, tiempo_desconexion): """ Procedimiento que libera los contactos reservados y asignados a agentes en una campaña preview al sobrepasar el tiempo máximo definido para atenderlo. El contacto podrá ser asignado a un nuevo agente para la finalización de su gestión """ liberados = AgenteEnContacto.liberar_contactos_por_tiempo(campana_id, tiempo_desconexion) logger.info( _("Actualizando {0} asignaciones de contactos a agentes en campaña {1}".format( liberados, campana_id)))
def post(self, request, *args, **kwargs): # TODO: Validar que el supervisor tiene permisos sobre la campaña campana_id = request.POST.get('campana_id') agente_id = request.POST.get('agente_id') if AgenteEnContacto.liberar_contacto(agente_id, campana_id): message = _(u'El Contacto ha sido liberado.') messages.success(self.request, message) else: message = _(u'No se pudo liberar el contacto. Intente nuevamente.') messages.warning(self.request, message) return HttpResponseRedirect( reverse('contactos_preview_asignados', args=[campana_id]))
def _generar_relaciones_agente_en_contacto(self): contactos = self.campana.bd_contacto.contactos.filter( id__gt=self.id_ultimo_contacto) agente_en_contacto_list = [] campos_contacto = self.campana.bd_contacto.get_metadata( ).nombres_de_columnas_de_datos orden = AgenteEnContacto.ultimo_id() + 1 for contacto in contactos: agente_en_contacto = self.campana._crear_agente_en_contacto( contacto, -1, campos_contacto, AgenteEnContacto.ESTADO_INICIAL, orden=orden) agente_en_contacto_list.append(agente_en_contacto) orden += 1 # insertamos las instancias en la BD AgenteEnContacto.objects.bulk_create(agente_en_contacto_list)
def post(self, request, *args, **kwargs): campana_id = kwargs.get('pk_campana', False) data_entrega = AgenteEnContacto.entregar_contacto( self.agente, campana_id) # adiciona informacion sobre si este contacto tiene una calificacion pendiente # para el agente en cuestión redis_connection = redis.Redis( host=settings.REDIS_HOSTNAME, port=settings.CONSTANCE_REDIS_CONNECTION['port'], decode_responses=True) calificacion_pendiente_agente = redis_connection.hgetall( 'OML:CALIFICACION:LLAMADA:{0}'.format(self.agente.pk)) if calificacion_pendiente_agente != {} and \ calificacion_pendiente_agente.get('TELEFONO', '') == data_entrega.get( 'telefono_contacto', False): data_entrega['calldata'] = calificacion_pendiente_agente[ 'CALLDATA'] return JsonResponse(data_entrega)
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'))
def post(self, request, *args, **kwargs): campana_id = kwargs.get('pk_campana', False) data_entrega = AgenteEnContacto.entregar_contacto( self.agente, campana_id) return JsonResponse(data_entrega)
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'))