medicine-mts/appa/admin.py

116 lines
3.6 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.

from django import forms
from django.contrib import admin
from django.core.checks import messages
from django.utils import timezone
from django.utils.safestring import mark_safe
from django.conf import settings
from ace_editor import AceJSONWidget
from rangefilter.filters import DateRangeFilterBuilder
from .models import *
from .admin_forms import *
from .admin_filters import *
from .tasks import send_call_request_task
@admin.register(CallRequest)
class CallRequestAdmin(admin.ModelAdmin):
list_display = (
'date',
'get_status',
'get_request_status',
'patient_last_name',
'patient_first_name',
'patient_phone',
'is_active',
)
list_filter = (
DateListFilter,
'status',
'request_status',
('date', DateRangeFilterBuilder()),
)
search_fields = (
'patient_last_name',
'patient_phone',
)
form = forms.modelform_factory(CallRequest, fields='__all__', widgets={
'data': AceJSONWidget()
})
actions = ['send_call_request']
list_editable = ('is_active',)
readonly_fields = (
'call_id',
'call_result',
'call_text_log',
'request_time'
)
@admin.display(description='Статус приема', ordering='status')
def get_status(self, obj):
return mark_safe(f'''
<span style="
background-color: {obj.get_status_color()};
padding: 2px 5px;
border-radius: 4px;
color: #fff;
">{obj.get_status_display()}</span>
''')
@admin.display(description='Статус запроса', ordering='request_status')
def get_request_status(self, obj):
return mark_safe(f'''
<span style="
background-color: {obj.get_request_status_color()};
padding: 2px 5px;
border-radius: 4px;
color: #fff;
">{obj.get_request_status_display()}</span>
''')
@admin.action(description='Отправить выбранные записи на обзвон')
def send_call_request(self, request, queryset):
now = timezone.now()
if settings.CALL_REQUEST_TIME_START <= now.time() <= settings.CALL_REQUEST_TIME_END:
ids = [item.id for item in queryset]
send_call_request_task.apply_async(args=(ids,))
self.message_user(request, message=f'Записей отправлено на обзвон: {len(ids)}')
else:
self.message_user(
request,
message=f'Время для обзвона регламентируется с '
f'{settings.CALL_REQUEST_TIME_START} по {settings.CALL_REQUEST_TIME_END}',
level=messages.ERROR
)
@admin.register(RequestLog)
class RequestLogAdmin(admin.ModelAdmin):
list_display = ('request_url', 'request_method', 'response_http_code', 'created')
search_fields = ('request_url', 'request_body', 'response_body', 'response_http_code')
date_hierarchy = 'created'
form = forms.modelform_factory(RequestLog, fields='__all__', widgets={
'request_body': AceJSONWidget(read_only=True),
'response_body': AceJSONWidget(read_only=True)
})
readonly_fields = [
'request_url',
'request_method',
'response_http_code',
'created'
]
fieldsets = [
('', {'fields': (
'request_url',
'request_method',
'response_http_code',
'created',
'request_body',
'response_body'
)})
]
def has_add_permission(self, request):
return False