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