def _call_filtering(self): caller = self._caller called = self._user if called.bsfilter != 'boss': return False if caller is not None and caller.bsfilter == 'secretary': secretary_can_call_boss = callfilter_dao.does_secretary_filter_boss(called.id, caller.id) if secretary_can_call_boss: return False try: boss_callfiltermember, callfilter = callfilter_dao.get_by_boss_id(called.id) except TypeError: return False callfilter_active = callfilter_dao.is_activated_by_callfilter_id(boss_callfiltermember.callfilterid) if callfilter_active == 0: return False in_zone = self._callfilter_check_in_zone(callfilter.callfrom) if not in_zone is True: return False secretaries = callfilter_dao.get_secretaries_by_callfiltermember_id(boss_callfiltermember.callfilterid) boss_line = self._line boss_interface = '%s/%s' % (boss_line.protocol.upper(), boss_line.name) if callfilter.bosssecretary in ("bossfirst-simult", "bossfirst-serial", "all"): self._agi.set_variable('XIVO_CALLFILTER_BOSS_INTERFACE', boss_interface) self._set_callfilter_ringseconds('BOSS_TIMEOUT', boss_callfiltermember.ringseconds) index = 0 ifaces = [] for secretary in secretaries: secretary_callfiltermember, ringseconds = secretary if secretary_callfiltermember.active: iface = user_line_dao.get_line_identity_by_user_id(secretary_callfiltermember.typeval) ifaces.append(iface) if callfilter.bosssecretary in ("bossfirst-serial", "secretary-serial"): self._agi.set_variable('XIVO_CALLFILTER_SECRETARY%d_INTERFACE' % index, iface) self._set_callfilter_ringseconds('SECRETARY%d_TIMEOUT' % index, ringseconds) index += 1 if callfilter.bosssecretary in ("bossfirst-simult", "secretary-simult", "all"): self._agi.set_variable('XIVO_CALLFILTER_INTERFACE', '&'.join(ifaces)) self._set_callfilter_ringseconds('TIMEOUT', callfilter.ringseconds) DialAction(self._agi, self._cursor, "noanswer", "callfilter", callfilter.id).set_variables() CallerID(self._agi, self._cursor, "callfilter", callfilter.id).rewrite(force_rewrite=True) self._agi.set_variable('XIVO_CALLFILTER', '1') self._agi.set_variable('XIVO_CALLFILTER_MODE', callfilter.bosssecretary) return True
def _get_user_state_interface(self, user_id): user_line = user_line_dao.get_line_identity_by_user_id(user_id) connected_agent_id = user_dao.agent_id(user_id) if connected_agent_id is None: return user_line loggedon_state_interface = self._get_agent_state_interface(connected_agent_id) if loggedon_state_interface is None: loggedon_state_interface = user_line return loggedon_state_interface
def _get_ongoing_calls(self, user_id): try: line = user_line_dao.get_line_identity_by_user_id(user_id).lower() except LookupError: raise LookupError('User %s has no line' % user_id) else: calls = self._calls_per_line.get(line, []) ongoing_calls = [call for call in calls if call[ON_HOLD] is False] return ongoing_calls
def test_get_line_identity(self): self.add_user_line_with_exten(exten='445') self.add_user_line_with_exten(exten='221') expected = 'sip/a1b2c3' user_line = self.add_user_line_with_exten(protocol='sip', name_line='a1b2c3') result = user_line_dao.get_line_identity_by_user_id(user_line.user.id) self.assertEqual(result, expected)
def subscribe(self, client_connection): try: user_id = client_connection.user_id() line_identity = user_line_dao.get_line_identity_by_user_id(user_id).lower() except LookupError: logging.warning('User %s tried to subscribe to current_calls with no line' % user_id) else: self._subscriptions[line_identity] = client_connection logger.info('User %s is now registered to current_calls on line %s', user_id, line_identity) self._report_current_call(line_identity)
def test_get_line_identity(self): sip1 = self.add_endpoint_sip() sip2 = self.add_endpoint_sip() sip3 = self.add_endpoint_sip() self.add_user_line_with_exten(exten='445', endpoint_sip_uuid=sip1.uuid) self.add_user_line_with_exten(exten='221', endpoint_sip_uuid=sip2.uuid) user_line = self.add_user_line_with_exten(name_line='a1b2c3', endpoint_sip_uuid=sip3.uuid) result = user_line_dao.get_line_identity_by_user_id(user_line.user.id) self.assertEqual(result, 'pjsip/a1b2c3')
def add_user_to_queue(session, user_id, queue): next_position = _get_next_position_for_queue(session, queue) queue_member = QueueMember() queue_member.queue_name = queue queue_member.interface = user_line_dao.get_line_identity_by_user_id(user_id) queue_member.usertype = 'user' queue_member.userid = user_id queue_member.channel = queue_member.interface.split('/', 1)[0] queue_member.category = 'queue' queue_member.position = next_position with flush_session(session): session.add(queue_member)
def _get_user_state_interface(self, user_id): with session_scope(): user_line = user_line_dao.get_line_identity_by_user_id(user_id) user = user_dao.find(user_id) connected_agent_id = user.agentid if user else None if connected_agent_id is None: return user_line loggedon_state_interface = self._get_agent_state_interface(connected_agent_id) if loggedon_state_interface is None: loggedon_state_interface = user_line return loggedon_state_interface
def subscribe(self, client_connection): try: user_id = client_connection.user_id() channel_pattern = user_line_dao.get_line_identity_by_user_id(user_id) except LookupError: logger.warning('Meetme subscription failed') else: self._subscriptions[client_connection] = {'channel_start': channel_pattern, 'membership': []} try: self._push_to_client(client_connection) self._send_meetme_membership() except ClientConnection.CloseException: self._subscriptions.pop(client_connection, None)
def subscribe(self, client_connection): try: user_id = client_connection.user_id() line_identity = user_line_dao.get_line_identity_by_user_id( user_id).lower() except LookupError: logging.warning( 'User %s tried to subscribe to current_calls with no line' % user_id) else: self._subscriptions[line_identity] = client_connection logger.info( 'User %s is now registered to current_calls on line %s', user_id, line_identity) self._report_current_call(line_identity)
def subscribe(self, client_connection): try: user_id = client_connection.user_id() reachable_contexts = user_dao.get_reachable_contexts(user_id) channel_pattern = user_line_dao.get_line_identity_by_user_id(user_id) except LookupError: logger.warning('Meetme subscription failed') else: self._subscriptions[client_connection] = {'client_connection': client_connection, 'contexts': reachable_contexts, 'channel_start': channel_pattern, 'membership': []} try: self._push_to_client(client_connection) self._send_meetme_membership() except ClientConnection.CloseException: self._subscriptions.pop(client_connection, None)
def add_user_to_queue(session, user_id, queue): next_position = _get_next_position_for_queue(session, queue) queue_member = QueueMember() queue_member.queue_name = queue queue_member.interface = user_line_dao.get_line_identity_by_user_id(user_id) queue_member.usertype = 'user' queue_member.userid = user_id queue_member.channel = queue_member.interface.split('/', 1)[0] queue_member.category = 'queue' queue_member.position = next_position try: session.begin() session.add(queue_member) session.commit() except Exception: session.rollback() raise
def add_user_to_queue(session, user_id, queue): next_position = _get_next_position_for_queue(session, queue) queue_member = QueueMember() queue_member.queue_name = queue queue_member.interface = user_line_dao.get_line_identity_by_user_id( user_id) queue_member.usertype = 'user' queue_member.userid = user_id queue_member.channel = queue_member.interface.split('/', 1)[0] queue_member.category = 'queue' queue_member.position = next_position try: session.begin() session.add(queue_member) session.commit() except Exception: session.rollback() raise