medicine-mts/appa/admin.py

160 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.

from django import forms
from django.contrib import admin
from django.db.models import Q
from django.utils.safestring import mark_safe
from ace_editor import AceJSONWidget
from rangefilter.filters import DateRangeFilterBuilder
from .models import *
from .admin_filters import *
from .tasks import send_call_request_task, update_call_requests_task
@admin.register(CallMedicalSpeciality)
class CallMedicalSpecialityAdmin(admin.ModelAdmin):
autocomplete_fields = ['speciality']
list_display = ('speciality_name', 'name')
search_fields = ('name',)
@admin.display(description='Специальность')
def speciality_name(self, obj):
return obj.speciality.name
@admin.register(CallLPU)
class CallLPUAdmin(admin.ModelAdmin):
autocomplete_fields = ['lpu']
list_display = ('__str__', 'lpu_short_name', 'name', 'address')
@admin.display(description='Название')
def lpu_short_name(self, obj):
return obj.lpu.short_name
@admin.register(CallRequest)
class CallRequestAdmin(admin.ModelAdmin):
list_display = (
'date',
'get_status',
'get_request_status',
'patient_last_name',
'patient_first_name',
'patient_phone',
'service_name',
'is_active',
)
list_filter = (
DateListFilter,
'status',
'request_status',
'call_result',
('date', DateRangeFilterBuilder()),
)
search_fields = (
'patient_last_name',
'patient_phone',
)
form = forms.modelform_factory(CallRequest, fields='__all__', widgets={
'data': AceJSONWidget()
})
actions = [
'send_call_request',
'delete_call_request',
'set_is_active_false',
'set_is_active_true',
'update_call_requests'
]
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):
items = queryset.filter(
Q(request_status=CallRequest.RequestStatus.NOT_SENT) |
Q(status=CallRequest.Status.WITHOUT_ANSWER)
)
ids = list(set([item.id for item in items]))
if len(ids) > 0:
send_call_request_task.apply_async(args=(ids,))
self.message_user(request, message=f'Записей отправлено на обзвон: {len(ids)}')
@admin.action(description='Удалить выбранные записи из обзвона')
def delete_call_request(self, request, queryset):
for call_request in queryset: #.filter(request_status=CallRequest.RequestStatus.SENT):
from appa.call_api.api import delete_call_request
delete_call_request(call_request)
@admin.action(description='Установить активность на "False"')
def set_is_active_false(self, request, queryset):
queryset.update(is_active=False)
self.message_user(request, f'Обновлено записей: {queryset.count()}')
@admin.action(description='Установить активность на "True"')
def set_is_active_true(self, request, queryset):
queryset.update(is_active=True)
self.message_user(request, f'Обновлено записей: {queryset.count()}')
@admin.action(description='Синхронизировать список запросов на звонки с МИС')
def update_call_requests(self, request, queryset):
update_call_requests_task.apply_async()
self.message_user(request, f'Задача отправлена на выполнение')
@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