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'''
{obj.get_status_display()}
''')
@admin.display(description='Статус запроса', ordering='request_status')
def get_request_status(self, obj):
return mark_safe(f'''
{obj.get_request_status_display()}
''')
@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