HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
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