146 lines
4.7 KiB
Python
146 lines
4.7 KiB
Python
|
|
import datetime
|
|
import json
|
|
|
|
import requests
|
|
from django.utils import timezone
|
|
from django.core.cache import cache
|
|
from constance import config
|
|
|
|
from appa.models import CallRequest, RequestLog
|
|
from . import call_status
|
|
|
|
|
|
def get_token():
|
|
token = cache.get('ACCESS_TOKEN')
|
|
if token is None:
|
|
r = requests.post(
|
|
config.ENTRYPOINT_AUTH,
|
|
data=dict(username=config.USERNAME, password=config.PASSWORD)
|
|
)
|
|
if r.status_code == 200:
|
|
token = r.json()['accessToken']
|
|
cache.set('ACCESS_TOKEN', token, timeout=300)
|
|
cache.set('REFRESH_TOKEN', r.json()['refreshToken'], timeout=300)
|
|
|
|
return token
|
|
|
|
|
|
def delete_call_request(call_request: CallRequest, logging=True):
|
|
hooks = None
|
|
if logging:
|
|
log = RequestLog(
|
|
request_url=config.ENTRYPOINT_DELETE % (call_request.call_id,),
|
|
)
|
|
hooks = {'response': log.response_hook}
|
|
|
|
r = requests.post(
|
|
config.ENTRYPOINT_DELETE % (call_request.call_id,),
|
|
headers={'Authorization': f'Bearer {get_token()}'},
|
|
hooks=hooks
|
|
)
|
|
print(r.status_code)
|
|
if r.status_code == 200:
|
|
call_request.reset_request()
|
|
|
|
|
|
def get_record(call_request: CallRequest, logging=True):
|
|
if call_request.call_id:
|
|
hooks = None
|
|
if logging:
|
|
log = RequestLog(
|
|
request_url=config.ENTRYPOINT_RECORD % (call_request.call_id,),
|
|
)
|
|
hooks = {'response': log.response_hook}
|
|
|
|
r = requests.get(
|
|
config.ENTRYPOINT_RECORD % (call_request.call_id,),
|
|
headers={'Authorization': f'Bearer {get_token()}'},
|
|
hooks=hooks
|
|
)
|
|
if r.status_code == 200:
|
|
result = r.json()
|
|
if result['call_result_code'] != call_status.STATUS_1:
|
|
call_request.call_text_log = result['text_log']
|
|
call_request.call_result = result['call_result']
|
|
call_request.request_status = call_request.RequestStatus.COMPLETED
|
|
|
|
if result['confirmed']:
|
|
call_request.status = call_request.Status.APPROVED
|
|
|
|
elif result['call_result_code'] == call_status.STATUS_4:
|
|
call_request.status = call_request.Status.TRANSFER
|
|
|
|
elif result['call_result_code'] in call_status.STATUS_CALLBACK:
|
|
call_request.status = call_request.Status.CALLBACK
|
|
|
|
elif result['call_result_code'] in call_status.STATUS_CANCELLED:
|
|
call_request.status = call_request.Status.CANCELED
|
|
|
|
from appa.medicine_api.api import cancel_booking
|
|
cancel_booking(call_request.booking_id)
|
|
|
|
elif result['call_result_code'] in call_status.STATUS_WITHOUT_ANSWER:
|
|
call_request.status = call_request.Status.WITHOUT_ANSWER
|
|
|
|
else:
|
|
call_request.status = call_request.Status.OTHER
|
|
|
|
call_request.save()
|
|
|
|
|
|
def add_call_request(call_request: CallRequest, logging=True, delete=False):
|
|
if call_request.request_status == call_request.RequestStatus.SENT:
|
|
if delete:
|
|
delete_call_request(call_request)
|
|
|
|
data = dict(records=[dict(
|
|
first_name=call_request.patient_first_name,
|
|
second_name=call_request.patient_last_name,
|
|
middle_name=call_request.patient_middle_name,
|
|
phone_number=call_request.patient_phone,
|
|
receipt_date=call_request.booking_date.strftime('%Y-%m-%d'),
|
|
receipt_time=call_request.booking_date.strftime('%H:%M'),
|
|
doctor_specialisation=call_request.service_name,
|
|
note=call_request.organization,
|
|
filial=call_request.address,
|
|
ext_id=str(call_request.uid)
|
|
)])
|
|
|
|
hooks = None
|
|
if logging:
|
|
log = RequestLog(
|
|
request_url=config.ENTRYPOINT_ADD_RECORDS,
|
|
request_body=json.dumps(data, ensure_ascii=False, indent=4),
|
|
)
|
|
hooks = {'response': log.response_hook}
|
|
|
|
r = requests.post(
|
|
config.ENTRYPOINT_ADD_RECORDS,
|
|
headers={'Authorization': f'Bearer {get_token()}'},
|
|
json=data,
|
|
hooks=hooks
|
|
)
|
|
call_request.response_status_code = r.status_code
|
|
call_request.request_time = timezone.now()
|
|
|
|
if r.status_code == 200:
|
|
record = r.json()['added_records'][0]
|
|
call_request.call_id = record['id']
|
|
call_request.request_status = CallRequest.RequestStatus.SENT
|
|
|
|
elif r.status_code == 400:
|
|
call_request.request_status = CallRequest.RequestStatus.ERROR
|
|
|
|
call_request.save(update_fields=(
|
|
'call_id',
|
|
'request_status',
|
|
'request_time',
|
|
'response_status_code',
|
|
'response_message',
|
|
))
|
|
|
|
|
|
def call_history(date_from: datetime.date, date_to: datetime.date):
|
|
pass
|