Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
    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."
Exemple #6
0
    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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
    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
Exemple #10
0
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
Exemple #11
0
    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."
Exemple #12
0
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+"."
Exemple #13
0
    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
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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
Exemple #17
0
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()
Exemple #18
0
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()
Exemple #19
0
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
Exemple #20
0
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
Exemple #21
0
    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()
Exemple #22
0
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
Exemple #23
0
    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()
Exemple #24
0
    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."
Exemple #25
0
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
Exemple #26
0
    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."
Exemple #27
0
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
Exemple #28
0
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
Exemple #29
0
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
Exemple #30
0
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
Exemple #31
0
    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
Exemple #32
0
    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
Exemple #33
0
    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
Exemple #34
0
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
Exemple #35
0
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
Exemple #36
0
    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()
Exemple #37
0
    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()
Exemple #38
0
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."
Exemple #39
0
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."
Exemple #40
0
    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."
Exemple #41
0
    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."
Exemple #42
0
    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
Exemple #43
0
    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
Exemple #44
0
    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
Exemple #45
0
    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
Exemple #46
0
    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
Exemple #47
0
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 + "."
Exemple #48
0
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
Exemple #49
0
    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
Exemple #50
0
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
Exemple #51
0
    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
Exemple #52
0
    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
Exemple #53
0
    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
Exemple #54
0
    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
Exemple #55
0
    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
Exemple #56
0
    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
Exemple #57
0
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'] + "."