132 lines
3.9 KiB
Python
132 lines
3.9 KiB
Python
|
|
import datetime
|
|
import json
|
|
|
|
import requests
|
|
from django.utils import timezone
|
|
from constance import config
|
|
|
|
from .models import CallRequest, RequestLog
|
|
|
|
|
|
def auth_request():
|
|
r = requests.post(
|
|
config.ENTRYPOINT_AUTH,
|
|
data=dict(
|
|
username=config.USERNAME,
|
|
password=config.PASSWORD,
|
|
)
|
|
)
|
|
if r.status_code == 200:
|
|
print(r.json())
|
|
config.ACCESS_TOKEN = r.json()['accessToken']
|
|
config.REFRESH_TOKEN = r.json()['refreshToken']
|
|
config.ACCESS_TOKEN_EXPIRED = datetime.datetime.now() + datetime.timedelta(minutes=5)
|
|
|
|
|
|
def get_token():
|
|
if not config.ACCESS_TOKEN or config.ACCESS_TOKEN_EXPIRED <= timezone.now():
|
|
auth_request()
|
|
|
|
return config.ACCESS_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
|
|
)
|
|
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()
|
|
call_request.call_text_log = result['text_log']
|
|
call_request.call_result = result['call_result']
|
|
|
|
if result['confirmed']:
|
|
call_request.status = call_request.Status.APPROVED
|
|
elif result['call_result_code'] in [3]:
|
|
call_request.status = call_request.Status.CANCELED
|
|
|
|
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.date.strftime('%Y-%m-%d'),
|
|
receipt_time=call_request.date.strftime('%H:%M'),
|
|
doctor_specialisation=call_request.doctor_speciality,
|
|
doctor_fullname=call_request.doctor_name,
|
|
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
|