medicine-mts/appa/models.py

125 lines
5.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import uuid
from django.db import models
from .managers import CallRequestManager
__all__ = [
'CallRequest',
'RequestLog'
]
class CallRequest(models.Model):
class Status(models.TextChoices):
PENDING = 'PENDING', 'Обзвон еще не состоялся'
APPROVED = 'APPROVED', 'Прием подтвержден'
CANCELED = 'CANCELED', 'Прием отменен'
WITHOUT_ANSWER = 'WITHOUT_ANSWER', 'Не дозвонились'
OTHER = 'OTHER', 'Другая ошибка'
STATUS_COLOR = {
Status.PENDING: '#2D72D2',
Status.APPROVED: '#238551',
Status.CANCELED: '#CD4246',
Status.WITHOUT_ANSWER: '#866103',
}
class RequestStatus(models.TextChoices):
NOT_SENT = 'PENDING', 'Не отправлен'
SENT = 'APPROVED', 'Отправлен'
ERROR = 'ERROR', 'Ошибка'
SERVICE_UNAVAILABLE = 'SERVICE_UNAVAILABLE', 'Сервис недоступен'
REQUEST_STATUS_COLOR = {
RequestStatus.NOT_SENT: '#2D72D2',
RequestStatus.SENT: '#238551',
RequestStatus.ERROR: '#CD4246',
RequestStatus.SERVICE_UNAVAILABLE: '#7961DB',
}
uid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
status = models.CharField(max_length=20, choices=Status.choices, default=Status.PENDING,
verbose_name='Статус приема')
request_status = models.CharField(max_length=20, choices=RequestStatus.choices, default=RequestStatus.NOT_SENT,
verbose_name='Статус запроса')
date = models.DateField(verbose_name='Дата')
booking_id = models.PositiveIntegerField(null=True, verbose_name='ID записи на прием')
patient_id = models.IntegerField(verbose_name='ID пациента')
patient_first_name = models.CharField(max_length=200, verbose_name='Имя')
patient_last_name = models.CharField(max_length=200, verbose_name='Фамилия')
patient_middle_name = models.CharField(max_length=200, null=True, blank=True, verbose_name='Отчество')
patient_phone = models.CharField(max_length=100, verbose_name='Номер телефона')
doctor_name = models.CharField(max_length=100, null=True, verbose_name='Врач')
doctor_speciality = models.CharField(max_length=100, null=True, verbose_name='Специальность врача')
service_name = models.CharField(max_length=100, null=True, blank=True, verbose_name='Услуга')
address = models.CharField(max_length=100, null=True, blank=True, verbose_name='Адрес')
data = models.JSONField(default=dict, blank=True, verbose_name='Данные')
is_active = models.BooleanField(default=True, verbose_name='Активность')
call_id = models.CharField(max_length=100, null=True, editable=False, verbose_name='ID')
call_data = models.JSONField(default=dict, blank=True, editable=False)
call_text_log = models.TextField(null=True, blank=True, editable=False, verbose_name='Лог')
call_result = models.CharField(max_length=100, null=True, editable=False, blank=True, verbose_name='Результат')
request_time = models.DateTimeField(null=True, editable=False)
response_status_code = models.IntegerField(null=True, editable=False)
response_message = models.TextField(null=True, editable=False)
class Meta:
verbose_name = 'Запрос на звонок'
verbose_name_plural = 'Запросы на звонки'
unique_together = (
('date', 'patient_id'),
)
objects = CallRequestManager()
def __str__(self):
return f"{self.date.strftime('%d.%m.%Y')} / {self.patient_last_name}"
def get_status_color(self):
return self.STATUS_COLOR.get(self.status)
def get_request_status_color(self):
return self.REQUEST_STATUS_COLOR.get(self.request_status)
def reset_request(self):
self.call_id = None
self.call_data = dict()
self.request_status = CallRequest.RequestStatus.NOT_SENT
self.request_time = None
self.response_status_code = None
self.response_message = None
self.save(update_fields=(
'request_status',
'request_time',
'response_status_code',
'response_message',
))
class RequestLog(models.Model):
class Meta:
verbose_name = 'Запрос'
verbose_name_plural = 'История запросов'
ordering = ('-created',)
request_url = models.CharField(max_length=500, verbose_name='Адрес запроса')
request_body = models.TextField(null=True, blank=True, verbose_name='Запрос')
request_method = models.CharField(max_length=100, null=True, verbose_name='Тип запроса')
response_body = models.TextField(null=True, blank=True, verbose_name='Ответ')
response_http_code = models.CharField(max_length=4, null=True, verbose_name='HTTP статус ответа')
created = models.DateTimeField(auto_now_add=True, editable=False, db_index=True, verbose_name='Дата запроса')
def __str__(self):
return self.request_url
def response_hook(self, r, *args, **kwargs):
self.response_http_code = r.status_code
self.response_body = r.text
self.save()