def _asignar_agente_a_campana(self, agente, campana, penalty=0): try: client = AmiManagerClient() client.connect() with transaction.atomic(): queue_member = QueueMember(penalty=penalty) queue_member_defaults = QueueMember.get_defaults( agente, campana) queue_member.member = agente queue_member.queue_name = campana.queue_campana queue_member.id_campana = queue_member_defaults['id_campana'] queue_member.membername = queue_member_defaults['membername'] queue_member.interface = queue_member_defaults['interface'] # por ahora no definimos 'paused' queue_member.paused = queue_member_defaults['paused'] queue_member.save() # adicionamos el agente a la cola actual que esta corriendo sip_agentes_logueados = obtener_sip_agentes_sesiones_activas() adicionar_agente_activo_cola(queue_member, campana, sip_agentes_logueados, client) activar_cola() client.disconnect() except Exception as e: print("Can't assign agent to campaign due to {0}".error(e)) raise e
def form_valid(self, form): campana = Campana.objects.get(pk=self.kwargs['pk_campana']) grupo_id = form.cleaned_data.get('grupo') grupo = Grupo.objects.get(pk=grupo_id) sip_agentes_logueados = obtener_sip_agentes_sesiones_activas() # agentes = grupo.agentes.filter(reported_by=self.request.user) agentes = grupo.agentes.filter(is_inactive=False) agentes_logueados_grupo = agentes.filter( sip_extension__in=sip_agentes_logueados) # agrega los agentes a la campana siempre cuando no se encuentren agregados try: with transaction.atomic(): for agente in agentes: queue_member, created = QueueMember.objects.get_or_create( member=agente, queue_name=campana.queue_campana, defaults=QueueMember.get_defaults(agente, campana)) if created and (agente in agentes_logueados_grupo): adicionar_agente_cola(agente, queue_member, campana) activar_cola() except Exception as e: message = _("<strong>Operación Errónea!</strong> " "No se pudo confirmar la creación del dialplan debido " "al siguiente error: {0}".format(e)) messages.add_message( self.request, messages.ERROR, message, ) return super(GrupoAgenteCreateView, self).form_valid(form)
def form_valid(self, form): campana = Campana.objects.get(pk=self.kwargs['pk_campana']) self.object = form.save(commit=False) # valido que este agente no se encuentre agregado en esta campana existe_member = QueueMember.objects.\ existe_member_queue(self.object.member, campana.queue_campana) if existe_member: message = _('Operación Errónea! \ Este miembro ya se encuentra en esta cola') messages.add_message( self.request, messages.ERROR, message, ) return self.form_invalid(form) else: try: client = AmiManagerClient() client.connect() with transaction.atomic(): agente = self.object.member queue_member_defaults = QueueMember.get_defaults( agente, campana) self.object.queue_name = campana.queue_campana self.object.id_campana = queue_member_defaults[ 'id_campana'] self.object.membername = queue_member_defaults[ 'membername'] self.object.interface = queue_member_defaults['interface'] # por ahora no definimos 'paused' self.object.paused = queue_member_defaults['paused'] self.object.save() # adicionamos el agente a la cola actual que esta corriendo sip_agentes_logueados = obtener_sip_agentes_sesiones_activas( ) adicionar_agente_activo_cola(self.object, campana, sip_agentes_logueados, client) activar_cola() client.disconnect() except Exception as e: message = _( "<strong>Operación Errónea!</strong> " "No se pudo confirmar la creación del dialplan debido " "al siguiente error: {0}".format(e)) messages.add_message( self.request, messages.ERROR, message, ) return super(QueueMemberCreateView, self).form_valid(form)
def save_agentes(self, form_list, index_form_agentes): campana_form = list(form_list)[int(self.INICIAL)] campana = campana_form.instance queue_member_formset = list(form_list)[index_form_agentes] queue_member_formset.instance = campana.queue_campana if queue_member_formset.is_valid(): # obtenemos los agentes que estan logueados sip_agentes_logueados = obtener_sip_agentes_sesiones_activas() # se asignan valores por defecto en cada una de las instancias # de QueueMember a salvar y se adicionan a sus respectivas colas en asterisk try: client = AmiManagerClient() client.connect() except AMIManagerConnectorError: logger.exception(_("QueueAdd failed ")) for queue_form in queue_member_formset.forms: if queue_form.cleaned_data != {}: # no se tienen en cuenta formularios vacíos agente = queue_form.instance.member queue_member_defaults = QueueMember.get_defaults( agente, campana) queue_form.instance.id_campana = queue_member_defaults[ 'id_campana'] queue_form.instance.membername = queue_member_defaults[ 'membername'] queue_form.instance.interface = queue_member_defaults[ 'interface'] # por ahora no definimos 'paused' queue_form.instance.paused = queue_member_defaults[ 'paused'] queue_form_created = True if queue_form.instance.pk is not None: queue_form_created = False queue_form.save(commit=False) if (agente.sip_extension in sip_agentes_logueados) and queue_form_created: adicionar_agente_cola(agente, queue_form.instance, campana, client) client.disconnect() queue_member_formset.save()