File: //home/arjun/projects/buyercall_new/buyercall/buyercall/blueprints/agents/rest_api.py
from flask import jsonify, make_response, request
from flask_login import current_user, login_required
from sqlalchemy import and_
from buyercall.lib.util_rest import rest_method, rest_partnership_account
from buyercall.extensions import db
from .views import agents
from .models import Agent, AgentSchedule
@agents.route('/api/agents', methods=['GET'])
@login_required
def get_user_agents():
""" Return the list of the agents used by the 'agents' component in an inbound
or outbound routing.
"""
partnership_account_id = current_user.partnership_account_id
viewing_partnership_account = current_user.is_viewing_partnership
# Check if being viewed by super partner
if viewing_partnership_account:
partnership_account_id = current_user.get_user_viewing_partnership_account_id
all_agents = Agent.query.filter(and_(Agent.partnership_account_id == partnership_account_id, Agent.is_deactivated == False))
if request.args.get('exclude_groups') == 'true':
all_agents = all_agents.filter(Agent.is_group == False)
all_agents = all_agents.all()
response = make_response(jsonify(collection=[
dict(id=a.id, fullName=a.full_name)
for a in all_agents
]))
response.headers['Cache-Control'] = 'no-cache'
return response
@agents.route('/api/agents/<int:id_>', methods=['GET'])
@login_required
def get_agent(id_):
""" Return the list of the agents used by the 'agents' component in an inbound
or outbound routing.
"""
partnership_account_id = current_user.partnership_account_id
viewing_partnership_account = current_user.is_viewing_partnership
# Check if being viewed by super partner
if viewing_partnership_account:
partnership_account_id = current_user.get_user_viewing_partnership_account_id
agent = Agent.query.filter(
Agent.partnership_account_id == partnership_account_id,
Agent.id == id_
).one()
response = make_response(jsonify(
id=agent.id,
fullName=agent.full_name,
phoneNumber=agent.phonenumber,
availableNow=agent.available_now,
))
response.headers['Cache-Control'] = 'no-cache'
return response
@agents.route('/api/agents', methods=['POST'])
@login_required
def add_new_agent():
r = request.json
partnership_account_id = current_user.partnership_account_id
partnership_id = current_user.partnership_id
# Check if being viewed by super partner
if current_user.is_viewing_partnership:
partnership_account_id = current_user.get_user_viewing_partnership_account_id
partnership_id = current_user.get_user_viewing_partnership_id
agent = Agent()
agent.partnership_id = partnership_id
agent.partnership_account_id = partnership_account_id
agent.firstname = r['firstName']
agent.lastname = r['lastName']
agent.email = r.get('email')
agent.phonenumber = r['phoneNumber']
agent.all_hours = True
agent.timezone = 'US/Central'
for day in range(7):
agent.schedules.append(AgentSchedule(
day, '08:00 AM', '17:00 PM', False, partnership_account_id, '-1'
))
db.session.add(agent)
db.session.commit()
result = r.copy()
result['id'] = agent.id
return jsonify(result)
@agents.route('/api/v1/agents', methods=['GET'])
@rest_method
def get_agents():
""" External REST API endpoint.
"""
all_agents = Agent.query.filter(Agent.partnership_account_id == rest_partnership_account.id).all()
data = []
for agent in all_agents:
data.append(dict(
id=agent.id,
firstname=agent.firstname,
lastname=agent.lastname,
title=agent.title,
email=agent.email,
phonenumber=agent.phonenumber,
mobile=agent.mobile,
extension=agent.extension,
department=agent.department,
timezone=agent.timezone,
schedules=agent.schedules,
available_from=agent.available_from,
available_to=agent.available_to
))
response = make_response(jsonify(agents=data))
response.headers['Cache-Control'] = 'no-cache'
return response