116 lines
3.6 KiB
Python
116 lines
3.6 KiB
Python
|
||
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
|