def agent_add(self): schema = AgentForm() try: form_result = schema.to_python(request.params) cca = CallCenterAgent() cca.extension = form_result.get('extension') e = PbxEndpoint.query.filter_by( user_context=session['context']).filter( PbxEndpoint.auth_id == cca.extension).first() cca.context = session['context'] cca.domain = session['context'] cca.type = 'callback' cca.system = 'single_box' cca.name = cca.extension + "@" + session['context'] cca.timeout = form_result.get('timeout', 30) cca.contact = "[call_timeout=" + cca.timeout + "]user/" + cca.name cca.max_no_answer = form_result.get('max_no_answer', 3) cca.wrap_up_time = form_result.get('wrap_up_time', 30) cca.reject_delay_time = form_result.get('reject_delay_time', 30) cca.busy_delay_time = form_result.get('busy_delay_time', 0) cca.no_answer_delay_time = form_result.get('no_answer_delay_time', 5) cca.record_calls = form_result.get('record_calls', 0) cca.status = 'Available' cca.state = 'Waiting' cca.user_id = e.user_id cca.pbx_endpoint_id = e.id db.add(cca) db.commit() db.flush() except validators.Invalid, error: db.remove() return 'Error: %s.' % error
def agent_edit(self): schema = AgentEditForm() try: form_result = schema.to_python(request.params) cca = CallCenterAgent.query.filter_by( context=session['context']).filter( CallCenterAgent.id == form_result.get('agent_id')).first() cca.extension = form_result.get('extension') e = PbxEndpoint.query.filter_by( user_context=session['context']).filter( PbxEndpoint.auth_id == cca.extension).first() cca.context = session['context'] cca.domain = session['context'] cca.type = 'callback' cca.record_calls = form_result.get('record_calls', 0) cca.timeout = form_result.get('timeout', 30) cca.max_no_answer = form_result.get('max_no_answer', 3) cca.wrap_up_time = form_result.get('wrap_up_time', 30) cca.reject_delay_time = form_result.get('reject_delay_time', 30) cca.busy_delay_time = form_result.get('busy_delay_time', 0) cca.no_answer_delay_time = form_result.get('no_answer_delay_time', 5) cca.user_id = e.user_id cca.pbx_endpoint_id = e.id db.commit() db.flush() except validators.Invalid, error: db.remove() return 'Error: %s.' % error
def authenticate_admin(username, password): auth_user = AdminUser.query.filter(AdminUser.username==username).first() if not auth_user: log.debug("No user named: '%s'", username) return False elif not auth_user.password: log.error("Bad username/pass:'******'") return False elif password != auth_user.password: log.debug("Database password for user '%s'", username) return False else: request.environ["REMOTE_USER"] = auth_user.username request.environ["HTTP_REMOTE_USER"] = auth_user.username session["perms"]= auth_user.permissions session["user"] = auth_user session["name"] = auth_user.name session['user_id'] = auth_user.id auth_user.register_login(username, session, request) db.commit() db.flush() session.save() return True
def delete_cid(cid_number): PbxCallerIDRoute.query.filter(PbxCallerIDRoute.cid_number==cid_number)\ .filter(PbxCallerIDRoute.context==session['context']).delete() db.commit() db.flush() db.remove() return True
def update_campaign_grid(self, **kw): w = loads(urllib.unquote_plus(request.params.get("data"))) try: for i in w["modified"]: sg = ( CrmCampaignGroup.query.filter(CrmCampaignGroup.crm_campaign_id == i["id"]) .filter(CrmCampaignGroup.context == session["context"]) .first() ) CrmGroupMember.query.filter(CrmGroupMember.crm_group_id == sg.crm_group_id).delete() for gm in i["members"].split(","): if not gm.strip().isdigit(): continue sm = CrmGroupMember() sm.crm_group_id = sg.crm_group_id sm.extension = gm.strip() sm.context = session["context"] db.add(sm) db.commit() db.flush() except: db.remove() return "Error updating campaign." return "Successfully updated campaign."
def edit_crm_account(self, **kw): schema = CrmAccountForm() try: form_result = schema.to_python(request.params) ca = CrmAccount.query.filter(id=form_result['id']).filter( customer_id=session['customer_id']).first() ca.first_name = form_result.get("first_name", "Unknown") ca.last_name = form_result.get("last_name", "Unknown") ca.customer = form_result.get("customer") ca.title = form_result.get("title") ca.email = form_result.get("email") ca.address = form_result.get("address") ca.address_2 = form_result.get("address_2") ca.city = form_result.get("city") ca.state = form_result.get("state") ca.zip = form_result.get("zip") ca.tel = form_result.get("tel") ca.tel_ext = form_result.get("tel_ext") ca.mobile = form_result.get("mobile") if request.params.has_key('active'): ca.active = True else: ca.active = False ca.customer_id = session["customer_id"] ca.user_id = session["user_id"] ca.crm_campaign_id = form_result.get("crm_campaign_name") ca.crm_account_status_type_id = form_result.get("status_type_name") ca.crm_lead_type_id = form_result.get("crm_lead_type_name") db.add(ca) db.commit() db.flush() except validators.Invalid, error: return 'Error: %s' % error
def del_blacklist(cid_number): PbxBlacklistedNumber.query.filter(PbxBlacklistedNumber.cid_number==cid_number)\ .filter(PbxBlacklistedNumber.context==session['context']).delete() db.commit() db.flush() db.remove() return True
def edit_crm_account(self, **kw): schema = CrmAccountForm() try: form_result = schema.to_python(request.params) ca = CrmAccount.query.filter(id=form_result["id"]).filter(customer_id=session["customer_id"]).first() ca.first_name = form_result.get("first_name", "Unknown") ca.last_name = form_result.get("last_name", "Unknown") ca.customer = form_result.get("customer") ca.title = form_result.get("title") ca.email = form_result.get("email") ca.address = form_result.get("address") ca.address_2 = form_result.get("address_2") ca.city = form_result.get("city") ca.state = form_result.get("state") ca.zip = form_result.get("zip") ca.tel = form_result.get("tel") ca.tel_ext = form_result.get("tel_ext") ca.mobile = form_result.get("mobile") if request.params.has_key("active"): ca.active = True else: ca.active = False ca.customer_id = session["customer_id"] ca.user_id = session["user_id"] ca.crm_campaign_id = form_result.get("crm_campaign_name") ca.crm_account_status_type_id = form_result.get("status_type_name") ca.crm_lead_type_id = form_result.get("crm_lead_type_name") db.add(ca) db.commit() db.flush() except validators.Invalid, error: return "Error: %s" % error
def update_campaign_grid(self, **kw): w = loads(urllib.unquote_plus(request.params.get("data"))) try: for i in w['modified']: sg = CrmCampaignGroup.query.filter( CrmCampaignGroup.crm_campaign_id == i['id']).filter( CrmCampaignGroup.context == session['context']).first() CrmGroupMember.query.filter( CrmGroupMember.crm_group_id == sg.crm_group_id).delete() for gm in i['members'].split(","): if not gm.strip().isdigit(): continue sm = CrmGroupMember() sm.crm_group_id = sg.crm_group_id sm.extension = gm.strip() sm.context = session['context'] db.add(sm) db.commit() db.flush() except: db.remove() return "Error updating campaign." return "Successfully updated campaign."
def delete_ivr(name): for ivr in PbxIVR.query.filter_by(name=name).filter_by(context=session['context']).all(): r = PbxRoute.query.filter(PbxRoute.pbx_route_type_id==5).\ filter(PbxRoute.name==ivr.name).filter(PbxRoute.context==session['context']).first() did = PbxDid.did.query.filter(PbxDid.pbx_route_id==r.id).first() if did: msg = "Error: IVR is in use by Inbound DID: "+str(did.did)+"!" tod = db.execute("select * from pbx_tod_routes where match_route_id = :id or nomatch_route_id = :id", {'id': r.id}).first() if tod: msg = "Error: IVR is in a TOD route!" ivr_opt = PbxIVROption.query.filter(PbxIVROption.pbx_route_id==r.id).first() if ivr_opt: msg = "Error: IVR belongs to another IVR Option." if not did and not ivr_opt and not tod: PbxRoute.query.filter(PbxRoute.pbx_route_type_id==5).\ filter(PbxRoute.name==ivr.name).filter(PbxRoute.context==session['context']).delete() PbxIVROption.query.filter(PbxIVROption.pbx_ivr_id==ivr.id).delete() PbxIVR.query.filter(PbxIVR.name==name).filter(PbxIVR.context==session['context']).delete() db.commit() db.flush() db.remove() else: return msg db.remove() return "Successfully deleted IVR: "+name+"."
def agent_edit(self): schema = AgentEditForm() try: form_result = schema.to_python(request.params) cca = ( CallCenterAgent.query.filter_by(context=session["context"]) .filter(CallCenterAgent.id == form_result.get("agent_id")) .first() ) cca.extension = form_result.get("extension") e = ( PbxEndpoint.query.filter_by(user_context=session["context"]) .filter(PbxEndpoint.auth_id == cca.extension) .first() ) cca.context = session["context"] cca.domain = session["context"] cca.type = "callback" cca.record_calls = form_result.get("record_calls", 0) cca.timeout = form_result.get("timeout", 30) cca.max_no_answer = form_result.get("max_no_answer", 3) cca.wrap_up_time = form_result.get("wrap_up_time", 30) cca.reject_delay_time = form_result.get("reject_delay_time", 30) cca.busy_delay_time = form_result.get("busy_delay_time", 0) cca.no_answer_delay_time = form_result.get("no_answer_delay_time", 5) cca.user_id = e.user_id cca.pbx_endpoint_id = e.id db.commit() db.flush() except validators.Invalid, error: db.remove() return "Error: %s." % error
def queue_delete(q): for queue in CallCenterQueue.query.filter(CallCenterQueue.id==q.id).filter(CallCenterQueue.context==session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==10).filter(PbxRoute.pbx_to_id==queue.id).delete() CallCenterTier.query.filter(CallCenterTier.queue_id==queue.id).delete() CallCenterQueue.query.filter(CallCenterQueue.id==q.id).filter(CallCenterQueue.context==session['context']).delete() db.commit() db.flush() return True
def delete_conf(extension): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==7)\ .filter(PbxRoute.name==extension).filter(PbxRoute.context==session['context']).delete() PbxConferenceBridge.query.filter(PbxConferenceBridge.extension==extension).delete() db.commit() db.flush() db.remove() return True
def delete_conf(extension): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==7)\ .filter(PbxRoute.name==extension).filter(PbxRoute.context==session['context']).delete() PbxConferenceBridge.query.filter( PbxConferenceBridge.extension == extension).delete() db.commit() db.flush() db.remove() return True
def delete_conditions(route_id): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==1).\ filter(PbxRoute.id==route_id).filter(PbxRoute.context==session['context']).all(): for condition in PbxCondition.query.filter_by(pbx_route_id=route.id).all(): PbxAction.query.filter_by(pbx_condition_id=condition.id).delete() PbxCondition.query.filter_by(pbx_route_id=route.id).delete() db.commit() db.flush() db.remove()
def delete_conditions(route_id): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==1).\ filter(PbxRoute.id==route_id).filter(PbxRoute.context==session['context']).all(): for condition in PbxCondition.query.filter_by( pbx_route_id=route.id).all(): PbxAction.query.filter_by(pbx_condition_id=condition.id).delete() PbxCondition.query.filter_by(pbx_route_id=route.id).delete() db.commit() db.flush() db.remove()
def delete_group(name): for group in PbxGroup.query.filter(PbxGroup.name==name).filter(PbxGroup.context==session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==4).\ filter(PbxRoute.name==group.name).filter(PbxRoute.context==session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==4).\ filter(PbxRoute.name==group.name).filter(PbxRoute.context==session['context']).delete() PbxGroup.query.filter(PbxGroup.name==name).filter(PbxGroup.context==session['context']).delete() db.commit() db.flush() db.remove() return True
def delete_fax_ext(extension): for ext in PbxFax.query.filter(PbxFax.extension==extension).filter(PbxFax.context==session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==12).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==12).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).delete() PbxFax.query.filter(PbxFax.extension==extension).filter(PbxFax.context==session['context']).delete() db.commit() db.flush() db.remove() return True
def register_login(class_, username, session, request): user = db.query(AdminUser).filter(AdminUser.username==username).first() if user: now = datetime.now() user.last_login = now user.session_id = session.id user.remote_addr = request.environ["HTTP_REMOTE_EU"] db.commit() db.flush() db.remove()
def authenticate(username, password): auth_user = User.query.filter(User.username==username).first() if not auth_user: log.debug("No user named: '%s'", username) return False elif not auth_user.password: log.error("Bad user/pass:'******'") return False elif password != auth_user.password: log.debug("database password for user '%s'", username) return False else: session['username'] = auth_user.username session['password'] = auth_user.password session['customer_id'] = auth_user.customer_id session['user_id'] = auth_user.id session['name'] = auth_user.first_name+' '+auth_user.last_name session["last_login"] = auth_user.last_login session['has_crm'] = auth_user.has_crm session['customer_name'] = auth_user.get_customer_name(auth_user.customer_id) if auth_user.has_crm: ea = auth_user.get_email_account() session['email_server'] = ea.mail_server session['email'] = ea.email session['email_password'] = ea.password if auth_user.has_call_center(): session['has_call_center'] = True else: session['has_call_center'] = False session['is_agent'] = auth_user.is_agent() session['context'] = auth_user.get_context() session['ext'] = auth_user.get_extension() request.environ["REMOTE_USER"] = auth_user.username request.environ["HTTP_REMOTE_USER"] = auth_user.username if auth_user and not auth_user.active: return False log.info("authenticated user %s", auth_user.username) session["perms"] = auth_user.permissions session['group_id'] = auth_user.group_id session["user"] = auth_user session.save() auth_user.register_login(username, session, request) db.commit() db.flush() return True
def register_login(class_, username, session, request): user = db.query(AdminUser).filter( AdminUser.username == username).first() if user: now = datetime.now() user.last_login = now user.session_id = session.id user.remote_addr = request.environ["HTTP_REMOTE_EU"] db.commit() db.flush() db.remove()
def del_tier(self, **kw): try: CallCenterTier.query.filter_by(id=request.params.get("id", 0)).delete() db.commit() db.flush() db.remove() except: return "Error deleting tier agent." return "Successfully deleted tier agent."
def delete_tod(name): for tod in PbxTODRoute.query.filter(PbxTODRoute.name==name)\ .filter(PbxTODRoute.context==session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==6)\ .filter(PbxRoute.name==tod.name).filter(PbxRoute.context==session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==6).\ filter(PbxRoute.name==tod.name).filter(PbxRoute.context==session['context']).delete() PbxTODRoute.query.filter(PbxTODRoute.name==name)\ .filter(PbxTODRoute.context==session['context']).delete() db.commit() db.flush() db.remove() return True
def del_tier(self, **kw): try: CallCenterTier.query.filter_by( id=request.params.get('id', 0)).delete() db.commit() db.flush() db.remove() except: return "Error deleting tier agent." return "Successfully deleted tier agent."
def delete_group(name): for group in PbxGroup.query.filter(PbxGroup.name == name).filter( PbxGroup.context == session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==4).\ filter(PbxRoute.name==group.name).filter(PbxRoute.context==session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==4).\ filter(PbxRoute.name==group.name).filter(PbxRoute.context==session['context']).delete() PbxGroup.query.filter(PbxGroup.name == name).filter( PbxGroup.context == session['context']).delete() db.commit() db.flush() db.remove() return True
def delete_fax_ext(extension): for ext in PbxFax.query.filter(PbxFax.extension == extension).filter( PbxFax.context == session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==12).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id==12).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).delete() PbxFax.query.filter(PbxFax.extension == extension).filter( PbxFax.context == session['context']).delete() db.commit() db.flush() db.remove() return True
def queue_delete(q): for queue in CallCenterQueue.query.filter( CallCenterQueue.id == q.id).filter( CallCenterQueue.context == session['context']).all(): PbxRoute.query.filter(PbxRoute.pbx_route_type_id == 10).filter( PbxRoute.pbx_to_id == queue.id).delete() CallCenterTier.query.filter( CallCenterTier.queue_id == queue.id).delete() CallCenterQueue.query.filter(CallCenterQueue.id == q.id).filter( CallCenterQueue.context == session['context']).delete() db.commit() db.flush() return True
def ccq_add(self): schema = QueueForm() try: form_result = schema.to_python(request.params) ccq = CallCenterQueue() ccq.name = form_result['name'] ccq.context = session['context'] ccq.domain = session['context'] ccq.audio_type = form_result.get('audio_name').split(",")[0] ccq.audio_name = form_result.get('audio_name').split(",")[1] ccq.moh_sound = form_result.get('moh_sound', 'local_stream://moh') ccq.time_base_score = form_result.get('time_base_score', 'system') ccq.max_wait_time = form_result.get('max_wait_time', 0) ccq.max_wait_time_with_no_agent = form_result.get( 'max_wait_time_with_no_agent', 0) ccq.max_wait_time_with_no_agent_reached = form_result.get( 'max_wait_time_with_no_agent_reached', 5) ccq.tier_rules_apply = form_result.get('tier_rules_apply', False) ccq.tier_rule_wait_second = form_result.get( 'tier_rule_wait_second', 300) ccq.tier_rule_wait_multiply_level = form_result.get( 'tier_rule_wait_multiply_level', False) ccq.tier_rule_agent_no_wait = form_result.get( 'tier_rule_agent_no_wait', False) ccq.discard_abandoned_after = form_result.get( 'discard_abandoned_after', 1800) ccq.abandoned_resume_allowed = form_result.get( 'abandoned_resume_allowed', False) ccq.strategy = form_result.get('strategy', 'callback') ccq.failed_route_id = form_result.get('failed_route_id', 0) ccq.record_calls = form_result.get('record_calls', False) ccq.announce_position = form_result.get('announce_position', False) ccq.announce_sound = form_result.get('announce_sound').split( ",")[1] ccq.announce_frequency = form_result.get('announce_frequency') db.add(ccq) db.commit() db.flush() dir = fs_vm_dir + session[ 'context'] + "/queue-recordings/" + ccq.name if not os.path.exists(dir): os.makedirs(dir) except validators.Invalid, error: db.remove() return 'Error: %s.' % error
def add_crm_account_note(self, **kw): try: cn = CrmNote() cn.note = request.params.get('crm_note') cn.crm_account_id = request.params.get('crm_acct_id') cn.created = datetime.now() db.add(cn) db.commit() db.flush() except validators.Invalid, error: db.remove() return 'Error: %s' % error
def add_crm_account_note(self, **kw): try: cn = CrmNote() cn.note = request.params.get("crm_note") cn.crm_account_id = request.params.get("crm_acct_id") cn.created = datetime.now() db.add(cn) db.commit() db.flush() except validators.Invalid, error: db.remove() return "Error: %s" % error
def delete_virtual_extension(extension): for ext in PbxVirtualExtension.query.filter(PbxVirtualExtension.extension==extension).filter(PbxVirtualExtension.context==session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==2).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).all(): for condition in PbxCondition.query.filter_by(pbx_route_id=route.id).all(): PbxAction.query.filter_by(pbx_condition_id=condition.id).delete() PbxCondition.query.filter_by(pbx_route_id=route.id).delete() PbxRoute.query.filter(PbxRoute.pbx_route_type_id==2).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).delete() for sg in PbxGroup.query.filter_by(context=session['context']).all(): PbxGroupMember.query.filter_by(pbx_group_id=sg.id).filter_by(extension=extension).delete() PbxVirtualExtension.query.filter(PbxVirtualExtension.extension==extension).filter(PbxVirtualExtension.context==session['context']).delete() db.commit() db.flush() db.remove() return True
def delete_extension_by_user_id(user_id): for ext in PbxEndpoint.query.filter(PbxEndpoint.user_id==user_id).filter(PbxEndpoint.user_context==session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==1).\ filter(PbxRoute.name==ext.auth_id).filter(PbxRoute.context==session['context']).all(): for condition in PbxCondition.query.filter_by(pbx_route_id=route.id).all(): PbxAction.query.filter_by(pbx_condition_id=condition.id).delete() PbxCondition.query.filter_by(pbx_route_id=route.id).delete() PbxRoute.query.filter(PbxRoute.pbx_route_type_id==1).\ filter(PbxRoute.name==ext.auth_id).filter(PbxRoute.context==session['context']).delete() for sg in PbxGroup.query.filter_by(context=session['context']).all(): PbxGroupMember.query.filter_by(pbx_group_id=sg.id).filter_by(extension=ext.auth_id).delete() PbxEndpoint.query.filter(PbxEndpoint.user_id==user_id).filter(PbxEndpoint.user_context==session['context']).delete() db.commit() db.flush() db.remove() return True
def register_login(class_, username, session, request): user = User.query.filter_by(username=username).first() if user: now = datetime.now() user.last_login = now user.session_id = session.id user.remote_addr = request.environ["HTTP_REMOTE_EU"] db.commit() db.flush() if True: s = Shift(session.id, user.id, 1) db.add(s) db.commit() db.flush() db.remove()
def delete_tts(name): tts = PbxTTS.query.filter(PbxTTS.name==name)\ .filter(PbxTTS.context==session['context']).first() ivr = PbxIVR.query.filter(PbxIVR.audio_type==2)\ .filter(PbxIVR.data==str(tts.id)).first() db.commit() db.flush() db.remove() if ivr: return "Error: That TTS is in use by the IVR named " + ivr.name + "!" else: PbxTTS.query.filter(PbxTTS.name==name)\ .filter(PbxTTS.context==session['context']).delete() db.commit() db.flush() db.remove() return "Successfully deleted TTS."
def delete_tts(name): tts = PbxTTS.query.filter(PbxTTS.name==name)\ .filter(PbxTTS.context==session['context']).first() ivr = PbxIVR.query.filter(PbxIVR.audio_type==2)\ .filter(PbxIVR.data==str(tts.id)).first() db.commit() db.flush() db.remove() if ivr: return "Error: That TTS is in use by the IVR named "+ivr.name+"!" else: PbxTTS.query.filter(PbxTTS.name==name)\ .filter(PbxTTS.context==session['context']).delete() db.commit() db.flush() db.remove() return "Successfully deleted TTS."
def delete_queue(self, **kw): id = request.params.get('id', None) q = CallCenterQueue.query.filter(CallCenterQueue.id == id).filter( CallCenterQueue.context == session['context']).first() queue = CallCenterQueue.query.filter( CallCenterQueue.id == q.id).first() CallCenterTier.query.filter( CallCenterTier.queue_id == queue.id).delete() CallCenterQueue.query.filter(CallCenterQueue.id == q.id).delete() db.commit() db.flush() db.remove() return "Successfully removed queue."
def delete_queue(self, **kw): id = request.params.get("id", None) q = ( CallCenterQueue.query.filter(CallCenterQueue.id == id) .filter(CallCenterQueue.context == session["context"]) .first() ) queue = CallCenterQueue.query.filter(CallCenterQueue.id == q.id).first() CallCenterTier.query.filter(CallCenterTier.queue_id == queue.id).delete() CallCenterQueue.query.filter(CallCenterQueue.id == q.id).delete() db.commit() db.flush() db.remove() return "Successfully removed queue."
def update_agent_grid(self): try: w = loads(urllib.unquote_plus(request.params.get("data"))) for i in w['modified']: log.debug(w['modified']) fsa = CallCenterAgent.query.filter( CallCenterAgent.name == str(i['extension']) + "@" + str(session['context'])).first() fsa.status = i['status'] db.commit() db.flush() db.remove() except DataInputError, error: return 'Error: %s' % error
def update_agent_grid(self): try: w = loads(urllib.unquote_plus(request.params.get("data"))) for i in w["modified"]: log.debug(w["modified"]) fsa = CallCenterAgent.query.filter( CallCenterAgent.name == str(i["extension"]) + "@" + str(session["context"]) ).first() fsa.status = i["status"] db.commit() db.flush() db.remove() except DataInputError, error: return "Error: %s" % error
def update_tier_grid(self): try: w = loads(urllib.unquote_plus(request.params.get("data"))) for i in w['modified']: log.debug(w['modified']) tier = CallCenterTier.query.filter_by(id=i['id']).first() tier.state = i['state'] tier.level = i['level'] tier.position = i['position'] db.commit() db.flush() db.remove() except DataInputError, error: return 'Error: %s' % error
def ccq_edit(self): schema = QueueEditForm() try: form_result = schema.to_python(request.params) ccq = CallCenterQueue.query.filter_by( context=session['context']).filter_by( id=form_result.get('ccq_id')).first() ccq.context = session['context'] ccq.domain = session['context'] ccq.audio_type = form_result.get('audio_name').split(",")[0] ccq.audio_name = form_result.get('audio_name').split(",")[1] ccq.moh_sound = form_result.get('moh_sound', 'local_stream://moh') ccq.time_base_score = form_result.get('time_base_score', 'system') ccq.max_wait_time = form_result.get('max_wait_time', 0) ccq.max_wait_time_with_no_agent = form_result.get( 'max_wait_time_with_no_agent', 0) ccq.max_wait_time_with_no_agent_reached = form_result.get( 'max_wait_time_with_no_agent_reached', 5) ccq.tier_rules_apply = form_result.get('tier_rules_apply', False) ccq.tier_rule_wait_second = form_result.get( 'tier_rule_wait_second', 300) ccq.tier_rule_wait_multiply_level = form_result.get( 'tier_rule_wait_multiply_level', False) ccq.tier_rule_agent_no_wait = form_result.get( 'tier_rule_agent_no_wait', False) ccq.discard_abandoned_after = form_result.get( 'discard_abandoned_after', 1800) ccq.abandoned_resume_allowed = form_result.get( 'abandoned_resume_allowed', False) ccq.strategy = form_result.get('strategy') ccq.failed_route_id = form_result.get('failed_route_id', 0) ccq.record_calls = form_result.get('record_calls', False) ccq.announce_position = form_result.get('announce_position', False) ccq.announce_sound = form_result.get('announce_sound').split( ",")[1] ccq.announce_frequency = form_result.get('announce_frequency') db.commit() db.flush() except validators.Invalid, error: db.remove() return 'Error: %s.' % error
def update_tier_grid(self): try: w = loads(urllib.unquote_plus(request.params.get("data"))) for i in w["modified"]: log.debug(w["modified"]) tier = CallCenterTier.query.filter_by(id=i["id"]).first() tier.state = i["state"] tier.level = i["level"] tier.position = i["position"] db.commit() db.flush() db.remove() except DataInputError, error: return "Error: %s" % error
def delete_ivr(name): for ivr in PbxIVR.query.filter_by(name=name).filter_by( context=session['context']).all(): r = PbxRoute.query.filter(PbxRoute.pbx_route_type_id==5).\ filter(PbxRoute.name==ivr.name).filter(PbxRoute.context==session['context']).first() did = PbxDid.did.query.filter(PbxDid.pbx_route_id == r.id).first() if did: msg = "Error: IVR is in use by Inbound DID: " + str(did.did) + "!" tod = db.execute( "select * from pbx_tod_routes where match_route_id = :id or nomatch_route_id = :id", { 'id': r.id }).first() if tod: msg = "Error: IVR is in a TOD route!" ivr_opt = PbxIVROption.query.filter( PbxIVROption.pbx_route_id == r.id).first() if ivr_opt: msg = "Error: IVR belongs to another IVR Option." if not did and not ivr_opt and not tod: PbxRoute.query.filter(PbxRoute.pbx_route_type_id==5).\ filter(PbxRoute.name==ivr.name).filter(PbxRoute.context==session['context']).delete() PbxIVROption.query.filter( PbxIVROption.pbx_ivr_id == ivr.id).delete() PbxIVR.query.filter(PbxIVR.name == name).filter( PbxIVR.context == session['context']).delete() db.commit() db.flush() db.remove() else: return msg db.remove() return "Successfully deleted IVR: " + name + "."
def delete_extension_by_user_id(user_id): for ext in PbxEndpoint.query.filter(PbxEndpoint.user_id == user_id).filter( PbxEndpoint.user_context == session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==1).\ filter(PbxRoute.name==ext.auth_id).filter(PbxRoute.context==session['context']).all(): for condition in PbxCondition.query.filter_by( pbx_route_id=route.id).all(): PbxAction.query.filter_by( pbx_condition_id=condition.id).delete() PbxCondition.query.filter_by(pbx_route_id=route.id).delete() PbxRoute.query.filter(PbxRoute.pbx_route_type_id==1).\ filter(PbxRoute.name==ext.auth_id).filter(PbxRoute.context==session['context']).delete() for sg in PbxGroup.query.filter_by(context=session['context']).all(): PbxGroupMember.query.filter_by(pbx_group_id=sg.id).filter_by( extension=ext.auth_id).delete() PbxEndpoint.query.filter(PbxEndpoint.user_id == user_id).filter( PbxEndpoint.user_context == session['context']).delete() db.commit() db.flush() db.remove() return True
def ccq_add(self): schema = QueueForm() try: form_result = schema.to_python(request.params) ccq = CallCenterQueue() ccq.name = form_result["name"] ccq.context = session["context"] ccq.domain = session["context"] ccq.audio_type = form_result.get("audio_name").split(",")[0] ccq.audio_name = form_result.get("audio_name").split(",")[1] ccq.moh_sound = form_result.get("moh_sound", "local_stream://moh") ccq.time_base_score = form_result.get("time_base_score", "system") ccq.max_wait_time = form_result.get("max_wait_time", 0) ccq.max_wait_time_with_no_agent = form_result.get("max_wait_time_with_no_agent", 0) ccq.max_wait_time_with_no_agent_reached = form_result.get("max_wait_time_with_no_agent_reached", 5) ccq.tier_rules_apply = form_result.get("tier_rules_apply", False) ccq.tier_rule_wait_second = form_result.get("tier_rule_wait_second", 300) ccq.tier_rule_wait_multiply_level = form_result.get("tier_rule_wait_multiply_level", False) ccq.tier_rule_agent_no_wait = form_result.get("tier_rule_agent_no_wait", False) ccq.discard_abandoned_after = form_result.get("discard_abandoned_after", 1800) ccq.abandoned_resume_allowed = form_result.get("abandoned_resume_allowed", False) ccq.strategy = form_result.get("strategy", "callback") ccq.failed_route_id = form_result.get("failed_route_id", 0) ccq.record_calls = form_result.get("record_calls", False) ccq.announce_position = form_result.get("announce_position", False) ccq.announce_sound = form_result.get("announce_sound").split(",")[1] ccq.announce_frequency = form_result.get("announce_frequency") db.add(ccq) db.commit() db.flush() dir = fs_vm_dir + session["context"] + "/queue-recordings/" + ccq.name if not os.path.exists(dir): os.makedirs(dir) except validators.Invalid, error: db.remove() return "Error: %s." % error
def delete_virtual_mailbox(extension): for ext in PbxVirtualMailbox.query.filter(PbxVirtualMailbox.extension==extension)\ .filter(PbxVirtualMailbox.context==session['context']).all(): for route in PbxRoute.query.filter(PbxRoute.pbx_route_type_id==3).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).all(): for condition in PbxCondition.query.filter_by( pbx_route_id=route.id).all(): PbxAction.query.filter_by( pbx_condition_id=condition.id).delete() PbxCondition.query.filter_by(pbx_route_id=route.id).delete() PbxRoute.query.filter(PbxRoute.pbx_route_type_id==3).\ filter(PbxRoute.name==ext.extension).filter(PbxRoute.context==session['context']).delete() for sg in PbxGroup.query.filter_by(context=session['context']).all(): PbxGroupMember.query.filter_by(pbx_group_id=sg.id).filter_by( extension=extension).delete() PbxVirtualMailbox.query.filter( PbxVirtualMailbox.extension == extension).filter( PbxVirtualMailbox.context == session['context']).delete() db.commit() db.flush() db.remove() return True
def tier_add(self): schema = TierForm() try: form_result = schema.to_python(request.params) log.debug("######################" + form_result.get("queue_name")) cca = ( CallCenterAgent.query.filter_by(extension=form_result.get("agent_extension", None)) .filter_by(context=session["context"]) .first() ) cur_cct = CallCenterTier.query.filter_by(agent=cca.name).first() ccq = CallCenterQueue.query.filter_by(name=form_result.get("queue_name", None)).first() if cur_cct: return "Agent in tier already exists!" cct = CallCenterTier() cct.extension = cca.extension cct.queue_id = ccq.id cct.agent_id = cca.id cct.queue = str(ccq.name) + "@" + session["context"] cct.agent = str(cca.extension) + "@" + session["context"] cct.level = form_result.get("level", 1) cct.state = "Ready" cct.position = form_result.get("position", 1) cct.context = session["context"] cct.domain = session["context"] db.add(cct) db.commit() db.flush() except validators.Invalid, error: db.remove() return "Error: %s." % error
def ccq_edit(self): schema = QueueEditForm() try: form_result = schema.to_python(request.params) ccq = ( CallCenterQueue.query.filter_by(context=session["context"]) .filter_by(id=form_result.get("ccq_id")) .first() ) ccq.context = session["context"] ccq.domain = session["context"] ccq.audio_type = form_result.get("audio_name").split(",")[0] ccq.audio_name = form_result.get("audio_name").split(",")[1] ccq.moh_sound = form_result.get("moh_sound", "local_stream://moh") ccq.time_base_score = form_result.get("time_base_score", "system") ccq.max_wait_time = form_result.get("max_wait_time", 0) ccq.max_wait_time_with_no_agent = form_result.get("max_wait_time_with_no_agent", 0) ccq.max_wait_time_with_no_agent_reached = form_result.get("max_wait_time_with_no_agent_reached", 5) ccq.tier_rules_apply = form_result.get("tier_rules_apply", False) ccq.tier_rule_wait_second = form_result.get("tier_rule_wait_second", 300) ccq.tier_rule_wait_multiply_level = form_result.get("tier_rule_wait_multiply_level", False) ccq.tier_rule_agent_no_wait = form_result.get("tier_rule_agent_no_wait", False) ccq.discard_abandoned_after = form_result.get("discard_abandoned_after", 1800) ccq.abandoned_resume_allowed = form_result.get("abandoned_resume_allowed", False) ccq.strategy = form_result.get("strategy") ccq.failed_route_id = form_result.get("failed_route_id", 0) ccq.record_calls = form_result.get("record_calls", False) ccq.announce_position = form_result.get("announce_position", False) ccq.announce_sound = form_result.get("announce_sound").split(",")[1] ccq.announce_frequency = form_result.get("announce_frequency") db.commit() db.flush() except validators.Invalid, error: db.remove() return "Error: %s." % error
def tier_add(self): schema = TierForm() try: form_result = schema.to_python(request.params) log.debug("######################" + form_result.get('queue_name')) cca = CallCenterAgent.query.filter_by( extension=form_result.get('agent_extension', None)).filter_by( context=session['context']).first() cur_cct = CallCenterTier.query.filter_by(agent=cca.name).first() ccq = CallCenterQueue.query.filter_by( name=form_result.get('queue_name', None)).first() if cur_cct: return "Agent in tier already exists!" cct = CallCenterTier() cct.extension = cca.extension cct.queue_id = ccq.id cct.agent_id = cca.id cct.queue = str(ccq.name) + "@" + session['context'] cct.agent = str(cca.extension) + "@" + session['context'] cct.level = form_result.get('level', 1) cct.state = 'Ready' cct.position = form_result.get('position', 1) cct.context = session['context'] cct.domain = session['context'] db.add(cct) db.commit() db.flush() except validators.Invalid, error: db.remove() return 'Error: %s.' % error
def agent_add(self): schema = AgentForm() try: form_result = schema.to_python(request.params) cca = CallCenterAgent() cca.extension = form_result.get("extension") e = ( PbxEndpoint.query.filter_by(user_context=session["context"]) .filter(PbxEndpoint.auth_id == cca.extension) .first() ) cca.context = session["context"] cca.domain = session["context"] cca.type = "callback" cca.system = "single_box" cca.name = cca.extension + "@" + session["context"] cca.timeout = form_result.get("timeout", 30) cca.contact = "[call_timeout=" + cca.timeout + "]user/" + cca.name cca.max_no_answer = form_result.get("max_no_answer", 3) cca.wrap_up_time = form_result.get("wrap_up_time", 30) cca.reject_delay_time = form_result.get("reject_delay_time", 30) cca.busy_delay_time = form_result.get("busy_delay_time", 0) cca.no_answer_delay_time = form_result.get("no_answer_delay_time", 5) cca.record_calls = form_result.get("record_calls", 0) cca.status = "Available" cca.state = "Waiting" cca.user_id = e.user_id cca.pbx_endpoint_id = e.id db.add(cca) db.commit() db.flush() except validators.Invalid, error: db.remove() return "Error: %s." % error
def campaign_add(self, **kw): schema = CrmCampaignForm() try: form_result = schema.to_python(request.params) cc = CrmCampaign() cc.name = form_result.get("campaign_name") cc.context = session["context"] db.add(cc) db.commit() db.flush() cg = CrmGroup() cg.name = form_result.get("campaign_name") db.add(cg) db.commit() db.flush() ccg = CrmCampaignGroup() ccg.name = form_result.get("campaign_name") ccg.crm_group_id = cg.id ccg.crm_campaign_id = cc.id ccg.context = session["context"] db.add(ccg) db.commit() db.flush() for i in form_result.get("campaign_extensions").split(","): if not i.isdigit(): continue gm = CrmGroupMember() gm.crm_group_id = cg.id gm.context = session["context"] gm.extension = i db.add(gm) db.commit() db.flush() except validators.Invalid, error: db.remove() return "Error: %s" % error
def campaign_add(self, **kw): schema = CrmCampaignForm() try: form_result = schema.to_python(request.params) cc = CrmCampaign() cc.name = form_result.get('campaign_name') cc.context = session['context'] db.add(cc) db.commit() db.flush() cg = CrmGroup() cg.name = form_result.get('campaign_name') db.add(cg) db.commit() db.flush() ccg = CrmCampaignGroup() ccg.name = form_result.get('campaign_name') ccg.crm_group_id = cg.id ccg.crm_campaign_id = cc.id ccg.context = session['context'] db.add(ccg) db.commit() db.flush() for i in form_result.get('campaign_extensions').split(","): if not i.isdigit(): continue gm = CrmGroupMember() gm.crm_group_id = cg.id gm.context = session['context'] gm.extension = i db.add(gm) db.commit() db.flush() except validators.Invalid, error: db.remove() return 'Error: %s' % error
class CallCenterController(BaseController): @authorize(logged_in) def queues(self): items = [] for queue in CallCenterQueue.query.filter_by( context=session['context']).all(): items.append({'id': queue.id, 'name': queue.name}) out = dict({'identifier': 'name', 'label': 'name', 'items': items}) response = make_response(out) response.headers = [ ("Content-type", 'application/json; charset=UTF-8'), ] return response(request.environ, self.start_response) @authorize(logged_in) def ccq_add(self): schema = QueueForm() try: form_result = schema.to_python(request.params) ccq = CallCenterQueue() ccq.name = form_result['name'] ccq.context = session['context'] ccq.domain = session['context'] ccq.audio_type = form_result.get('audio_name').split(",")[0] ccq.audio_name = form_result.get('audio_name').split(",")[1] ccq.moh_sound = form_result.get('moh_sound', 'local_stream://moh') ccq.time_base_score = form_result.get('time_base_score', 'system') ccq.max_wait_time = form_result.get('max_wait_time', 0) ccq.max_wait_time_with_no_agent = form_result.get( 'max_wait_time_with_no_agent', 0) ccq.max_wait_time_with_no_agent_reached = form_result.get( 'max_wait_time_with_no_agent_reached', 5) ccq.tier_rules_apply = form_result.get('tier_rules_apply', False) ccq.tier_rule_wait_second = form_result.get( 'tier_rule_wait_second', 300) ccq.tier_rule_wait_multiply_level = form_result.get( 'tier_rule_wait_multiply_level', False) ccq.tier_rule_agent_no_wait = form_result.get( 'tier_rule_agent_no_wait', False) ccq.discard_abandoned_after = form_result.get( 'discard_abandoned_after', 1800) ccq.abandoned_resume_allowed = form_result.get( 'abandoned_resume_allowed', False) ccq.strategy = form_result.get('strategy', 'callback') ccq.failed_route_id = form_result.get('failed_route_id', 0) ccq.record_calls = form_result.get('record_calls', False) ccq.announce_position = form_result.get('announce_position', False) ccq.announce_sound = form_result.get('announce_sound').split( ",")[1] ccq.announce_frequency = form_result.get('announce_frequency') db.add(ccq) db.commit() db.flush() dir = fs_vm_dir + session[ 'context'] + "/queue-recordings/" + ccq.name if not os.path.exists(dir): os.makedirs(dir) except validators.Invalid, error: db.remove() return 'Error: %s.' % error r = PbxRoute() r.context = session['context'] r.domain = session['context'] r.name = form_result['name'] r.continue_route = True r.voicemail_enable = True r.voicemail_ext = form_result['name'] r.pbx_route_type_id = 10 r.pbx_to_id = ccq.id db.add(r) db.commit() db.flush() db.remove() return "Successfully added Call Center queue " + form_result[ 'name'] + "."