Uveden je novi Notes drawer s kalendar integracijom, zajednički DRY left-slide mehanizam te međusobno isključivo prikazivanje s Kalendar widgetom. Backend i frontend su prošireni za servisne bilješke (uključujući slanje na više servisera), dodan je users/servicers endpoint, te su uvedene warning notifikacije kada serviser ima više od 2 zadatka isti dan. U admin su dodane stavke za Bilješke i zaseban Kalendar zadataka (proxy TaskCalendar) radi lakšeg operativnog pregleda. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
# backend/modules/task_management/admin.py
|
|
|
|
from django.contrib import admin
|
|
|
|
from .models import Task, TaskCalendar, TaskTemplate, TaskTemplateEntry, TaskWorkEntry, TaskWorkHoursTable
|
|
|
|
|
|
class TaskWorkEntryInline(admin.TabularInline):
|
|
model = TaskWorkEntry
|
|
extra = 0
|
|
fields = ('sort_order', 'title', 'work_description', 'active_faults', 'explanation_hr', 'template_entry')
|
|
readonly_fields = ('template_entry',)
|
|
|
|
|
|
class TaskWorkHoursTableInline(admin.StackedInline):
|
|
model = TaskWorkHoursTable
|
|
extra = 0
|
|
fields = ('data', 'is_active')
|
|
|
|
|
|
class TaskTemplateEntryInline(admin.TabularInline):
|
|
model = TaskTemplateEntry
|
|
extra = 0
|
|
fields = ('sort_order', 'title', 'work_description', 'active_faults', 'explanation_hr', 'is_active')
|
|
|
|
|
|
@admin.register(Task)
|
|
class TaskAdmin(admin.ModelAdmin):
|
|
list_display = ('title', 'status', 'scheduled_date', 'assigned_to', 'vehicle', 'work_order', 'created_at')
|
|
list_filter = ('status', 'scheduled_date', 'created_at', 'work_order')
|
|
search_fields = ('title', 'description', 'work_order__id', 'work_order__vehicle__registration_number')
|
|
readonly_fields = ('id', 'created_at', 'updated_at')
|
|
inlines = (TaskWorkHoursTableInline, TaskWorkEntryInline)
|
|
|
|
|
|
@admin.register(TaskCalendar)
|
|
class TaskCalendarAdmin(admin.ModelAdmin):
|
|
list_display = ('scheduled_date', 'title', 'status', 'assigned_to', 'vehicle', 'work_order')
|
|
list_filter = ('scheduled_date', 'status', 'assigned_to')
|
|
search_fields = ('title', 'assigned_to__email', 'vehicle__registration_number', 'work_order__display_code')
|
|
readonly_fields = ('id', 'created_at', 'updated_at')
|
|
ordering = ('scheduled_date', 'assigned_to__first_name', 'assigned_to__last_name')
|
|
|
|
def get_queryset(self, request):
|
|
queryset = super().get_queryset(request)
|
|
return queryset.filter(is_active=True, scheduled_date__isnull=False)
|
|
|
|
|
|
@admin.register(TaskTemplate)
|
|
class TaskTemplateAdmin(admin.ModelAdmin):
|
|
list_display = ('code', 'title', 'status', 'is_active', 'created_at')
|
|
list_filter = ('status', 'is_active', 'created_at')
|
|
search_fields = ('code', 'title', 'description')
|
|
inlines = (TaskTemplateEntryInline,)
|
|
|
|
|
|
@admin.register(TaskWorkEntry)
|
|
class TaskWorkEntryAdmin(admin.ModelAdmin):
|
|
list_display = ('task', 'sort_order', 'title', 'template_entry', 'created_at')
|
|
list_filter = ('created_at',)
|
|
search_fields = ('task__title', 'title', 'active_faults', 'explanation_hr')
|
|
readonly_fields = ('id', 'created_at', 'updated_at')
|
|
|
|
|
|
@admin.register(TaskWorkHoursTable)
|
|
class TaskWorkHoursTableAdmin(admin.ModelAdmin):
|
|
list_display = ('task', 'updated_at', 'is_active')
|
|
search_fields = ('task__title', 'task__vehicle__registration_number')
|
|
readonly_fields = ('id', 'created_at', 'updated_at')
|