154 lines
5.2 KiB
Python
154 lines
5.2 KiB
Python
|
||
from django import forms
|
||
from django.contrib import admin
|
||
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',
|
||
('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):
|
||
ids = [item.id for item in queryset.filter(request_status=CallRequest.RequestStatus.NOT_SENT)]
|
||
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
|