Ejemplo n.º 1
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
Ejemplo n.º 2
0
    def getUsers(self, sid):
        users = []
        ep_stats = []
        user = User.query.filter_by(session_id=sid).first()

        if user:
            context = user.get_context()
        else:
            raise Exception("No session id in db matching the user calling this method.")

        for r in db.execute("SELECT DISTINCT users.first_name, users.last_name, users.id, users.customer_id, "
                            "customers.context AS context, users.portal_extension, "
                            "users.tel, users.mobile, users.username, sip_dialogs.uuid AS uuid "
                            "FROM users "
                            "INNER JOIN customers ON users.customer_id = customers.id "
                            "LEFT JOIN sip_dialogs ON sip_dialogs.presence_id = users.portal_extension || '@' || customers.context "
                            "WHERE customers.context = :context ORDER BY users.id", {'context': context}):

            for pbx_reg in PbxRegistration.query.filter(PbxRegistration.sip_realm==context).filter(PbxRegistration.sip_user==r[5]).all():
                ep_stats.append({'ip': pbx_reg.network_ip, 'port':pbx_reg.network_port})

            is_online = True if len(ep_stats) > 0 else False
            ep_stats = []

            # make_broker_user(name, id, customer_id, email, tel, mobile, ext, uuid, is_online):
            users.append(make_broker_user(r[0]+' '+r[1], r[2], r[3], r[8], r[6], r[7], r[5], r[9], is_online))

        db.remove()
        return users
Ejemplo n.º 3
0
    def getCallers(self, sid):
        callers = []
        user = User.query.filter_by(session_id=sid).first()
        if user:
            context = user.get_context()

        for row in PbxDid.query.filter(PbxDid.context==context).all():
            for cal in db.execute("SELECT * FROM channels WHERE dest like :did", {'did': "%"+row.did}).fetchall():
                #PbxChannel.query.filter(PbxChannel.dest.like('%'+row.did).all():
                l =  PbxChannel.query.filter_by(uuid=cal.uuid).first()
                if l:
                    to_user = l.dest
                    status = l.callstate
                else:
                    to_user = ""
                    status = ""
                direction = "inbound"
                if len(cal.cid_num) > 10:
                    cid_num = cal.cid_num[len(cal.cid_num)-10:]
                else:
                    cid_num = cal.cid_num

                time_in_queue = db.execute("SELECT now() FROM channels WHERE uuid = :uuid", {'uuid': cal.uuid}).fetchone()
                callers.append(make_caller(cal.dest, cal.cid_name,cid_num, direction, cal.created, time_in_queue[0], to_user, cal.uuid, status))

        for cal in PbxChannel.query.filter_by(context=context).distinct(PbxChannel.call_uuid).all():
            if len(cal.presence_id)>3:
                if cal.presence_id.split("@")[1] == context:
                    time_in_queue = db.execute("SELECT now() FROM channels WHERE uuid = :uuid", {'uuid': cal.uuid}).fetchone()
            callers.append(make_caller(cal.dest, cal.cid_name, cal.cid_num, "outbound", cal.created, "", cal.dest, cal.uuid, cal.callstate))

        db.remove()
        return callers
Ejemplo n.º 4
0
    def account_by_id(self, id):
        items = []
        for account in (
            CrmAccount.query.join(CrmCampaign)
            .filter(CrmAccount.customer_id == session["customer_id"])
            .filter(CrmAccount.user_id == session["user_id"])
            .filter(CrmCampaign.name == id)
            .all()
        ):
            items.append(
                {
                    "id": account.id,
                    "name": str(account.first_name) + " " + str(account.last_name),
                    "address": account.address,
                    "city": account.city,
                    "state": account.state,
                    "zip": account.zip,
                    "tel": account.tel,
                    "mobile": account.mobile,
                    "email": account.email,
                    "crm_campaign_id": account.crm_campaign_id,
                }
            )
        db.remove()

        out = dict({"identifier": "id", "label": "name", "items": items})
        response = make_response(out)
        response.headers = [("Content-type", "application/json")]

        return response(request.environ, self.start_response)
Ejemplo n.º 5
0
    def ad_audio(self):
        items = []
        dir = fs_vm_dir + session["context"] + "/recordings/"
        try:
            for i in os.listdir(dir):
                fo = generateFileObject(i, "", dir)
                items.append(
                    {
                        "id": "1," + fo["name"],
                        "name": "Recording: " + fo["name"],
                        "data": fo["path"],
                        "type": 1,
                        "real_id": "",
                    }
                )

            db.remove()
        except:
            pass
        out = dict({"identifier": "id", "label": "name", "items": items})

        response = make_response(out)
        response.headers = [("Content-type", "application/json; charset=UTF-8")]

        return response(request.environ, self.start_response)
Ejemplo n.º 6
0
def init_model(engine):
    """Call me before using any of the tables or classes in the model"""
    Session.configure(bind=engine)

    """Call me before using any of the tables or classes in the model"""
    Session.configure(bind=engine, expire_on_commit=False )
    Base.query = Session.query_property()
    metadata = Base.metadata
Ejemplo n.º 7
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
Ejemplo n.º 8
0
 def __call__(self, environ, start_response):
     """Invoke the Controller"""
     # WSGIController.__call__ dispatches to the Controller method
     # the request is routed to. This routing information is
     # available in environ['pylons.routes_dict']
     try:
         return WSGIController.__call__(self, environ, start_response)
     finally:
         Session.remove()
Ejemplo n.º 9
0
def get_talk_time(ext, context):
    rows =  db.execute("SELECT coalesce(sum(billsec)/60,0) AS mins FROM cdr "
                       "WHERE (caller_id_number=:ext OR destination_number=:ext) "
                       "AND start_stamp BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP "
                       "AND bleg_uuid IS NOT NULL AND context = :context",
            {'ext':ext, 'context': context})
    r = rows.fetchone()
    db.remove()
    return r.mins
Ejemplo n.º 10
0
 def __call__(self, environ, start_response):
     """Invoke the Controller"""
     # WSGIController.__call__ dispatches to the Controller method
     # the request is routed to. This routing information is
     # available in environ['pylons.routes_dict']
     try:
         return WSGIController.__call__(self, environ, start_response)
     finally:
         Session.remove()
Ejemplo n.º 11
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+"."
Ejemplo n.º 12
0
def get_volume(ext, context):
    rows =  db.execute("SELECT count(*) AS ct "
                       "FROM cdr "
                       "WHERE  (caller_id_number=:ext OR destination_number=:ext) "
                       "AND start_stamp BETWEEN CURRENT_DATE "
                       "AND CURRENT_TIMESTAMP AND bleg_uuid IS NOT NULL "
                       "AND context = :context",
            {'ext':ext, 'context': context})
    r = rows.fetchone()
    db.remove()
    return r.ct
Ejemplo n.º 13
0
    def account_lead_types(self):
        items = []
        for act in CrmLeadType.query.filter(context=session["context"]).all():
            items.append({"id": act.id, "name": act.name, "desc": act.description})
        db.remove()

        out = dict({"identifier": "id", "label": "name", "items": items})
        response = make_response(out)
        response.headers = [("Content-type", "application/json")]

        return response(request.environ, self.start_response)
Ejemplo n.º 14
0
    def billing_service_types(self):
        items=[]
        for bs in BillingServiceType.query.all():
            items.append({'id': bs.id, 'name': bs.name, 'description': bs.description})

        db.remove()

        out = dict({'identifier': 'id', 'label': 'name', 'items': items})
        response = make_response(out)
        response.headers = [("Content-type", 'application/json'),]

        return response(request.environ, self.start_response)
Ejemplo n.º 15
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
Ejemplo n.º 16
0
def get_route_labels_ids():
    route_labels = []
    route_ids = []

    for row in db.execute("SELECT sr.id, srt.name|| ':' ||sr.name AS name "
                          "FROM pbx_routes sr "
                          "INNER JOIN pbx_route_types srt ON sr.pbx_route_type_id = srt.id "
                          "WHERE sr.context = :context", {'context': session['context']}):
        route_labels.append(row.name)
        route_ids.append(row.id)
    db.remove()
    return (route_labels,route_ids)
Ejemplo n.º 17
0
    def campaigns_ids(self):
        names = []
        ids = []
        for row in CrmCampaign.query.filter(context=session["context"]).all():
            names.append(row.name)
            ids.append(row.id)
        db.remove()
        headers = [("Content-type", "application/json")]
        out = dict({"names": names, "ids": ids})
        response = make_response(out)

        return response(request.environ, self.start_response)
Ejemplo n.º 18
0
def get_talk_time(ext, context):
    rows = db.execute(
        "SELECT coalesce(sum(billsec)/60,0) AS mins FROM cdr "
        "WHERE (caller_id_number=:ext OR destination_number=:ext) "
        "AND start_stamp BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP "
        "AND bleg_uuid IS NOT NULL AND context = :context", {
            'ext': ext,
            'context': context
        })
    r = rows.fetchone()
    db.remove()
    return r.mins
Ejemplo n.º 19
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
Ejemplo n.º 20
0
def get_route_labels_ids():
    route_labels = []
    route_ids = []

    for row in db.execute(
            "SELECT sr.id, srt.name|| ':' ||sr.name AS name "
            "FROM pbx_routes sr "
            "INNER JOIN pbx_route_types srt ON sr.pbx_route_type_id = srt.id "
            "WHERE sr.context = :context", {'context': session['context']}):
        route_labels.append(row.name)
        route_ids.append(row.id)
    db.remove()
    return (route_labels, route_ids)
Ejemplo n.º 21
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."
Ejemplo n.º 22
0
    def campaigns_ids(self):
        names = []
        ids = []
        for row in CrmCampaign.query.filter(context=session['context']).all():
            names.append(row.name)
            ids.append(row.id)
        db.remove()
        headers = [
            ("Content-type", 'application/json'),
        ]
        out = dict({'names': names, 'ids': ids})
        response = make_response(out)

        return response(request.environ, self.start_response)
Ejemplo n.º 23
0
def get_volume(ext, context):
    rows = db.execute(
        "SELECT count(*) AS ct "
        "FROM cdr "
        "WHERE  (caller_id_number=:ext OR destination_number=:ext) "
        "AND start_stamp BETWEEN CURRENT_DATE "
        "AND CURRENT_TIMESTAMP AND bleg_uuid IS NOT NULL "
        "AND context = :context", {
            'ext': ext,
            'context': context
        })
    r = rows.fetchone()
    db.remove()
    return r.ct
Ejemplo n.º 24
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
Ejemplo n.º 25
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."
Ejemplo n.º 26
0
    def getCallers(self, sid):
        callers = []
        user = User.query.filter_by(session_id=sid).first()
        if user:
            context = user.get_context()

        for row in PbxDid.query.filter(PbxDid.context == context).all():
            for cal in db.execute(
                    "SELECT * FROM channels WHERE dest like :did", {
                        'did': "%" + row.did
                    }).fetchall():
                #PbxChannel.query.filter(PbxChannel.dest.like('%'+row.did).all():
                l = PbxChannel.query.filter_by(uuid=cal.uuid).first()
                if l:
                    to_user = l.dest
                    status = l.callstate
                else:
                    to_user = ""
                    status = ""
                direction = "inbound"
                if len(cal.cid_num) > 10:
                    cid_num = cal.cid_num[len(cal.cid_num) - 10:]
                else:
                    cid_num = cal.cid_num

                time_in_queue = db.execute(
                    "SELECT now() FROM channels WHERE uuid = :uuid", {
                        'uuid': cal.uuid
                    }).fetchone()
                callers.append(
                    make_caller(cal.dest, cal.cid_name, cid_num, direction,
                                cal.created, time_in_queue[0], to_user,
                                cal.uuid, status))

        for cal in PbxChannel.query.filter_by(context=context).distinct(
                PbxChannel.call_uuid).all():
            if len(cal.presence_id) > 3:
                if cal.presence_id.split("@")[1] == context:
                    time_in_queue = db.execute(
                        "SELECT now() FROM channels WHERE uuid = :uuid", {
                            'uuid': cal.uuid
                        }).fetchone()
            callers.append(
                make_caller(cal.dest, cal.cid_name, cal.cid_num, "outbound",
                            cal.created, "", cal.dest, cal.uuid,
                            cal.callstate))

        db.remove()
        return callers
Ejemplo n.º 27
0
    def account_by_id(self, id):
        items = []
        for account in CrmAccount.query.join(CrmCampaign).filter(CrmAccount.customer_id==session['customer_id'])\
                    .filter(CrmAccount.user_id==session['user_id']).filter(CrmCampaign.name==id).all():
            items.append({'id': account.id, 'name': str(account.first_name)+" "+str(account.last_name), 'address': account.address, \
                          'city': account.city, 'state': account.state, 'zip': account.zip, 'tel': account.tel, 'mobile': account.mobile, \
                          'email': account.email, 'crm_campaign_id': account.crm_campaign_id})
        db.remove()

        out = dict({'identifier': 'id', 'label': 'name', 'items': items})
        response = make_response(out)
        response.headers = [
            ("Content-type", 'application/json'),
        ]

        return response(request.environ, self.start_response)
Ejemplo n.º 28
0
class Ticket(Base):
    __tablename__ = 'tickets'

    query = db.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    customer_id = Column(
        Integer,
        ForeignKey('customers.id', onupdate="CASCADE", ondelete="CASCADE"))
    opened_by = Column(
        Integer, ForeignKey('users.id', onupdate="CASCADE",
                            ondelete="CASCADE"))
    ticket_status_id = Column(
        Integer,
        ForeignKey('ticket_statuses.id',
                   onupdate="CASCADE",
                   ondelete="CASCADE"))
    ticket_priority_id = Column(
        Integer,
        ForeignKey('ticket_priorities.id',
                   onupdate="CASCADE",
                   ondelete="CASCADE"))
    ticket_type_id = Column(
        Integer,
        ForeignKey('ticket_types.id', onupdate="CASCADE", ondelete="CASCADE"))
    created = Column(DateTime, default=datetime.now())
    expected_resolve_date = Column(DateTime, default=datetime.now())
    subject = Column(Unicode(255), nullable=True)
    description = Column(UnicodeText, nullable=False)

    ticket_note = relationship('TicketNote', backref='ticket_notes')
    ticket_type = relationship('TicketType', backref='ticket_types')
    ticket_priority = relationship('TicketPriority',
                                   backref='ticket_priorities')
    ticket_status = relationship('TicketStatus', backref='ticket_statuses')
Ejemplo n.º 29
0
    def callOutbound(self, sid, did):
        user = User.query.filter_by(session_id=sid).first()
        if user:
            context = user.get_context()
        else:
            return

        ep = db.execute(
            "SELECT pbx_endpoints.outbound_caller_id_number AS pbx_endpoints_outbound_caller_id_number, customers.tel AS customers_tel "
            "FROM pbx_endpoints "
            "INNER JOIN customers on customers.context  = pbx_endpoints.user_context "
            "WHERE customers.context = :context AND customers.id = :customer_id AND pbx_endpoints.auth_id = :auth_id",
            {
                'context': context,
                'customer_id': user.customer_id,
                'auth_id': user.portal_extension
            }).fetchone()

        if len(ep[0]) == 10:
            origination_caller_id_number = ep[0]
        else:
            origination_caller_id_number = ep[1]

        con = ESLconnection(ESL_HOST, ESL_PORT, ESL_PASS)
        if con.connected:
            con.bgapi(
                "originate",
                "{ringback=\'%(2000,4000,440.0,480.0)\',origination_caller_id_name=Click-To-Call,effective_caller_id_number="
                + str(origination_caller_id_number) + "}user/" +
                str(user.portal_extension) + "@" + str(context) +
                " &bridge(sofia/gateway/" + str(user.get_gateway()) + "/" +
                str(did) + ")")
Ejemplo n.º 30
0
class AdminGroup(Base):
    __tablename__ = 'admin_groups'

    query = db.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(Unicode(64), unique=True, nullable=False)
    description = Column(UnicodeText)
    created_date = Column(DateTime, default=datetime.now)

    admin_users = relationship("AdminUser",
                               secondary=admin_user_groups,
                               backref='admin_groups')

    @property
    def permissions(self):
        perms = []
        for perm in self.admin_permissions:
            perms.append(perm.name)
        return perms

    def __init__(self, name, description):
        self.name = name
        self.description = description
        self.created_date = datetime.now()

    def __repr__(self):
        return '<AdminGroup: name=%s>' % self.name

    def __unicode__(self):
        return self.name
Ejemplo n.º 31
0
def get_volume(ext):
    rows =  db.execute("select count(*) as ct "
                       "from cdr where  (caller_id_number=:ext or destination_number=:ext) "
                       "and start_stamp between CURRENT_DATE "
                       "and CURRENT_TIMESTAMP and bleg_uuid is not null and context = :context",{'ext':ext, 'context': session['context']})
    r = rows.fetchone()
    return r.ct
Ejemplo n.º 32
0
    def get_queue_calls(self):
        log.debug(request.params.get("sid"))
        user = User.query.filter_by(
            session_id=request.params.get("sid")).first()
        if user:
            context = user.get_context()
        else:
            return ""
        items = []
        sql = "SELECT * FROM call_center_callers WHERE queue like '%@{0}'".format(
            context)

        for call in db.execute(sql):
            items.append({
                'queue': call.queue.split("@")[0],
                'cid_name': call.cid_name,
                'cid_number': call.cid_number,
                'agent': call.serving_agent.split("@")[0],
                'state': call.state,
                'uuid': call.uuid
            })

        if not len(items) == 0:
            return ""

        out = items
        response = make_response(out)
        response.headers = [
            ("Content-type", 'application/json; charset=UTF-8'),
        ]

        return response(request.environ, self.start_response)
Ejemplo n.º 33
0
class CallCenterQueue(Base):
    __tablename__ = 'call_center_queues'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    domain = Column(Unicode(64), default=u"sip.vwna.com")
    context = Column(Unicode(128), default=u"sip.vwna.com")
    name = Column(Unicode(64))
    audio_type = Column(Integer)
    audio_name = Column(Unicode(255))
    strategy = Column(Unicode(64), default=u'longest-idle-agent')
    moh_sound = Column(Unicode(255), default=u'local_stream://moh')
    time_base_score = Column(Unicode(32), default=u'system')
    max_wait_time = Column(Integer, default=300)
    max_wait_time_with_no_agent = Column(Integer, default=300)
    max_wait_time_with_no_agent_reached = Column(Integer, default=90)
    tier_rules_apply = Column(Boolean, default=False)
    tier_rule_wait_second = Column(Integer, default=300)
    tier_rule_wait_multiply_level = Column(Boolean, default=True)
    tier_rule_agent_no_wait = Column(Boolean, default=True)
    discard_abandoned_after = Column(Integer, default=300)
    abandoned_resume_allowed = Column(Boolean, default=False)
    failed_route_id = Column(
        Integer,
        ForeignKey('pbx_routes.id', onupdate="CASCADE", ondelete="CASCADE"))
    record_calls = Column(Boolean, default=False)
    announce_position = Column(Boolean, default=False)
    announce_sound = Column(Unicode(1024))
    announce_frequency = Column(Integer, default=60)
    approx_hold_time = Column(Integer, default=300)

    def __str__(self):
        return self.id
Ejemplo n.º 34
0
class PbxDialog(Base):
    __tablename__ = 'sip_dialogs'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    call_id = Column(Unicode(255))
    uuid = Column(Unicode(255))
    sip_to_user = Column(Unicode(255))
    sip_to_host = Column(Unicode(255))
    sip_from_user = Column(Unicode(255))
    sip_from_host = Column(Unicode(255))
    contact_user = Column(Unicode(255))
    contact_host = Column(Unicode(255))
    state = Column(Unicode(255))
    direction = Column(Unicode(255))
    user_agent = Column(Unicode(255))
    profile_name = Column(Unicode(255))
    hostname = Column(Unicode(255))
    contact = Column(Unicode(255))
    presence_id = Column(Unicode(255))
    presence_data = Column(Unicode(255))
    call_info = Column(Unicode(255))
    call_info_state = Column(Unicode(255))
    expires = Column(Integer, default=0)
    status = Column(Unicode(255))

    rpid = Column(Unicode(255))
    sip_to_tag = Column(Unicode(255))
    sip_from_tag = Column(Unicode(255))
    rcd = Column(Integer, default=0)
Ejemplo n.º 35
0
class VoipPbxServiceProfile(Base):
    __tablename__ = 'pbx_voip_service_profiles'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    voip_service_id = Column(
        Integer,
        ForeignKey('voip_services.id', onupdate='CASCADE', ondelete='CASCADE'))
    voip_service_policy_id = Column(Integer, default=0)
    name = Column(Unicode(64))
    description = Column(UnicodeText)
    amount = Column(Numeric)
    max_extensions_enforced = Column(Boolean, default=False)
    max_extensions = Column(Integer, default=0)
    included_extension_minutes_enforced = Column(Boolean, default=False)
    included_extension_minutes = Column(Integer, default=0)
    included_pbx_minutes = Column(Integer, default=0)
    included_pbx_minutes_enforced = Column(Boolean, default=False)
    can_create_extensions = Column(Boolean, default=True)
    can_delete_metered_extensions = Column(Boolean, default=True)
    overage_fee = Column(Numeric)
    billable_seconds_increment = Column(Integer, default=0)
    max_virtual_extensions = Column(Integer, default=0)
    enforce_max_virtual_extensions = Column(Boolean, default=False)
Ejemplo n.º 36
0
class PbxGateway(Base):
    __tablename__ = 'pbx_gateways'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(Unicode(64), nullable=True)
    pbx_profile_id = Column(
        Integer,
        ForeignKey('pbx_profiles.id', onupdate="CASCADE", ondelete="CASCADE"))
    username = Column(Unicode(64), nullable=True)
    password = Column(Unicode(64), nullable=True)
    proxy = Column(Unicode(64), nullable=True)
    mask = Column(Unicode(15), default=u'32')
    register = Column(Boolean, default=False)
    register_proxy = Column(Unicode(128), nullable=True)
    register_transport = Column(Unicode(64), default=u"udp")
    extension = Column(Unicode(64), nullable=True)
    realm = Column(Unicode(64), nullable=True)
    from_domain = Column(Unicode(64), nullable=True)
    from_user = Column(Unicode(32), nullable=True)
    expire_seconds = Column(Integer, nullable=False, default=600)
    retry_seconds = Column(Integer, nullable=False, default=30)
    ping = Column(Unicode(4), default=u"60")
    context = Column(Unicode(32), default=u"default")
    caller_id_in_from = Column(Boolean, default=False)
    contact_params = Column(Unicode(32), nullable=True)
    rfc5626 = Column(Boolean, default=True)
    reg_id = Column(Integer, nullable=True, default=1)

    def __str__(self):
        return self.name
Ejemplo n.º 37
0
def get_findme(name, context):
    e = PbxEndpoint.query.filter_by(user_context=context).filter_by(auth_id=name).first()
    fm = db.execute("SELECT default_gateway FROM Customers "
                    "INNER JOIN Users on Users.customer_id=Customers.id "
                    "WHERE Users.id = :user_id", {'user_id': e.user_id}).fetchone()
    ds = []
    if e.find_me:
        if e.follow_me_1:
            if len(e.follow_me_1) < 8:
                ds.append(u"user/"+e.follow_me_1+"@"+str(context))
            else:
                ds.append(u"sofia/gateway/"+str(fm[0])+"/{0}".format(e.follow_me_1))
        if e.follow_me_2:
            if len(e.follow_me_2) < 8:
                ds.append(u"user/"+e.follow_me_2+"@"+str(context))
            else:
                ds.append(u"sofia/gateway/"+str(fm[0])+"/{0}".format(e.follow_me_2))
        if e.follow_me_3:
            if len(e.follow_me_3) < 8:
                ds.append(u"user/"+e.follow_me_3+"@"+str(context))
            else:
                ds.append(u"sofia/gateway/"+str(fm[0])+"/{0}".format(e.follow_me_3))
        if e.follow_me_4:
            if len(e.follow_me_4) < 8:
                ds.append(u"user/"+e.follow_me_4+"@"+str(context))
            else:
                ds.append(u"sofia/gateway/"+str(fm[0])+"/{0}".format(e.follow_me_4))
    return ds
Ejemplo n.º 38
0
class PbxContext(Base):
    __tablename__ = 'pbx_contexts'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    customer_id = Column(
        Integer,
        ForeignKey('customers.id', onupdate="CASCADE", ondelete="CASCADE"))
    domain = Column(Unicode(64), unique=True)
    profile = Column(Unicode(64))
    context = Column(Unicode(128))
    caller_id_name = Column(Unicode(64))
    caller_id_number = Column(Unicode(15))
    gateway = Column(Unicode(64), default=u'default')

    def __init__(self,
                 customer_id=None,
                 domain=None,
                 context=None,
                 gateway=None,
                 profile=None,
                 caller_id_name=None,
                 caller_id_number=None):
        self.customer_id = customer_id
        self.domain = domain
        self.context = context
        self.gateway = gateway
        self.profile = profile
        self.caller_id_name = caller_id_name
        self.caller_id_number = caller_id_number

    def by_domain(self, domain=None):
        return Session.query(PbxContext).filter_by(domain=domain).first()
Ejemplo n.º 39
0
class PbxCallingRule(Base):
    __tablename__ = 'pbx_calling_rules'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(Unicode(64))
Ejemplo n.º 40
0
    def get_queue_calls(self):
        log.debug(request.params.get("sid"))
        user = User.query.filter_by(session_id=request.params.get("sid")).first()
        if user:
            context = user.get_context()
        else:
            return ""
        items = []
        sql = "SELECT * FROM call_center_callers WHERE queue like '%@{0}'".format(context)

        for call in db.execute(sql):
            items.append(
                {
                    "queue": call.queue.split("@")[0],
                    "cid_name": call.cid_name,
                    "cid_number": call.cid_number,
                    "agent": call.serving_agent.split("@")[0],
                    "state": call.state,
                    "uuid": call.uuid,
                }
            )

        if not len(items) == 0:
            return ""

        out = items
        response = make_response(out)
        response.headers = [("Content-type", "application/json; charset=UTF-8")]

        return response(request.environ, self.start_response)
Ejemplo n.º 41
0
class CallCenterTier(Base):
    __tablename__ = 'call_center_tiers'

    query = Session.query_property()

    def __init__(self,
                 queue=None,
                 agent=None,
                 state='Waiting',
                 level=None,
                 position=None):
        self.queue = queue
        self.agent = agent
        self.state = state
        self.level = level
        self.position = position

    id = Column(Integer, autoincrement=True, primary_key=True)
    queue_id = Column(
        Integer,
        ForeignKey('call_center_queues.id',
                   onupdate="CASCADE",
                   ondelete="CASCADE"))
    agent_id = Column(
        Integer,
        ForeignKey('call_center_agents.id',
                   onupdate="CASCADE",
                   ondelete="CASCADE"))
    extension = Column(Unicode(15), nullable=True)
    queue = Column(Unicode(255))
    agent = Column(Unicode(255))
    state = Column(Unicode(255))
    level = Column(Integer)
    position = Column(Integer, nullable=False, default=0)
Ejemplo n.º 42
0
class PbxRegistration(Base):
    __tablename__ = 'sip_registrations'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    call_id = Column(Unicode(255))
    sip_user = Column(Unicode(255))
    sip_host = Column(Unicode(255))
    presence_hosts = Column(Unicode(255))
    contact = Column(Unicode(1024))
    status = Column(Unicode(255))
    rpid = Column(Unicode(255))
    expires = Column(Integer)
    user_agent = Column(Unicode(255))
    server_user = Column(Unicode(255))
    server_host = Column(Unicode(255))
    profile_name = Column(Unicode(255))
    hostname = Column(Unicode(255))
    network_ip = Column(Unicode(255))
    network_port = Column(Unicode(255))
    sip_username = Column(Unicode(255))
    sip_realm = Column(Unicode(255))
    mwi_user = Column(Unicode(255))
    mwi_host = Column(Unicode(255))
    orig_server_host = Column(Unicode(255))
    orig_hostname = Column(Unicode(255))
    sub_host = Column(Unicode(255))
Ejemplo n.º 43
0
class PbxCdr(Base):
    __tablename__ = 'cdr'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    caller_id_name = Column(Unicode(64))
    caller_id_number = Column(Unicode(64))
    destination_number = Column(Unicode(64))
    context = Column(Unicode(64))
    start_stamp = Column(DateTime, default=datetime.now())
    answer_stamp = Column(DateTime, default=datetime.now())
    end_stamp = Column(DateTime, default=datetime.now())
    duration = Column(Integer, default=0)
    billsec = Column(Integer, default=0)
    hangup_cause = Column(Unicode(128))
    uuid = Column(Unicode(64))
    bleg_uuid = Column(Unicode(64))
    accountcode = Column(Unicode(16))
    local_ip_v4 = Column(Unicode(15))
    read_codec = Column(Unicode(128))
    write_codec = Column(Unicode(128))
    call_direction = Column(Unicode(16))
    user_id = Column(Unicode(16))
    customer_id = Column(Unicode(16))
    extension = Column(Unicode(16))

    def __repr__(self):
        return "PbxCdr(%(id)s)" % self.__dict__
Ejemplo n.º 44
0
class e911StreetType(Base):
    __tablename__ = 'e911_street_types'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(Unicode(32))
Ejemplo n.º 45
0
def get_campaigns():
    return db.execute(
        "SELECT crm_campaigns.name FROM crm_campaigns "
        "INNER JOIN crm_campaign_groups ON crm_campaigns.id = crm_campaign_groups.crm_campaign_id "
        "INNER JOIN crm_group_members ON crm_group_members.crm_group_id  = crm_campaign_groups.id "
        "WHERE crm_group_members.extension = :ext", {
            'ext': session['ext']
        }).fetchall()
Ejemplo n.º 46
0
    def account_lead_types(self):
        items = []
        for act in CrmLeadType.query.filter(context=session['context']).all():
            items.append({
                'id': act.id,
                'name': act.name,
                'desc': act.description
            })
        db.remove()

        out = dict({'identifier': 'id', 'label': 'name', 'items': items})
        response = make_response(out)
        response.headers = [
            ("Content-type", 'application/json'),
        ]

        return response(request.environ, self.start_response)
Ejemplo n.º 47
0
class TicketStatus(Base):
    __tablename__ = 'ticket_statuses'

    query = db.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(Unicode(32), default=u'Unknown')
    description = Column(Unicode(255), default=u'Unknown')
Ejemplo n.º 48
0
    def account_notes_by_id(self, id, **kw):
        items = []
        for note in CrmNote.query.filter(CrmNote.crm_account_id == id).all():
            items.append(
                {
                    "id": note.id,
                    "created": note.created.strftime("%m/%d/%Y %I:%M:%S %p"),
                    "note": note.note,
                    "crm_account_id": note.crm_account_id,
                }
            )
        db.remove()

        out = dict({"identifier": "id", "label": "name", "items": items})
        response = make_response(out)
        response.headers = [("Content-type", "application/json")]

        return response(request.environ, self.start_response)
Ejemplo n.º 49
0
class PbxFax(Base):
    __tablename__ = 'pbx_faxes'

    query = Session.query_property()

    id = Column(Integer, autoincrement=True, primary_key=True)
    context = Column(Unicode(64), default=u'sip.freepybx.org')
    domain = Column(Unicode(128), default=u'sip.freepybx.org')
    extension = Column(Unicode(128), nullable=False)
Ejemplo n.º 50
0
    def getAgents(self, sid):
        agents = []
        user = User.query.filter_by(session_id=sid).first()
        if user:
            context = user.get_context()
        else:
            raise Exception("No user in session...")

        for row in User.query.filter(User.customer_id==user.customer_id).all():
            if not len(row.portal_extension):
                continue
            else:
                extension = row.portal_extension

            agent = make_agent(row.first_name+' '+row.last_name,  get_volume(extension, context), get_talk_time(extension, context))
            agents.append(agent)
        db.remove()
        return agents
Ejemplo n.º 51
0
    def get_queue_recordings(self):
        files = []
        queue = request.params.get("queue_name")

        dir = fs_vm_dir + session["context"] + "/queue-recordings/" + queue
        for i in os.listdir(dir):
            path = dir + "/" + i
            id = i.split(".")[3].strip()
            row = PbxCdr.query.filter(PbxCdr.uuid == id).first()
            if row:
                caller = row.caller_id_number[len(row.caller_id_number) - 10 :]
                dest = row.destination_number
                agent = PbxCdr.query.filter(PbxCdr.uuid == row.bleg_uuid).first()
                agent_ext = agent.destination_number
            else:
                agent_ext = "No CDR"
                dest = "No CDR"
                caller = "No CDR"

            tpath = "/vm/" + session["context"] + "/queue-recordings/" + queue + "/" + i
            received = str(modification_date(path)).strip('"')
            fsize = str(os.path.getsize(path))

            files.append(
                {
                    "name": caller,
                    "queue": queue,
                    "destination": dest,
                    "agent": agent_ext,
                    "path": tpath,
                    "received": received,
                    "size": fsize,
                }
            )

        db.remove()
        out = dict({"identifier": "path", "label": "name", "items": files})
        response = make_response(out)
        response.headers = [("Content-type", "application/json; charset=UTF-8")]

        return response(request.environ, self.start_response)
Ejemplo n.º 52
0
    def campaigns(self):
        items = []
        members = []
        for campaign in CrmCampaign.query.filter(context=session["context"]).all():
            for member in (
                CrmGroupMember.query.join(CrmGroup)
                .join(CrmCampaignGroup)
                .filter(CrmCampaignGroup.crm_campaign_id == campaign.id)
                .all()
            ):
                members.append(member.extension)
            items.append({"id": campaign.id, "name": campaign.name, "members": ",".join(members)})
            members = []

        db.remove()

        out = dict({"identifier": "id", "label": "name", "items": items})
        response = make_response(out)
        response.headers = [("Content-type", "application/json")]

        return response(request.environ, self.start_response)
Ejemplo n.º 53
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
Ejemplo n.º 54
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
Ejemplo n.º 55
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
Ejemplo n.º 56
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
Ejemplo n.º 57
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()
Ejemplo n.º 58
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
Ejemplo n.º 59
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