37882-vm/core/views.py
Flatlogic Bot df45ad71cc Ver.01
2026-01-27 18:19:22 +00:00

75 lines
2.9 KiB
Python

from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, TemplateView
from django.urls import reverse_lazy
from django import forms
from django.db.models import Count
from .models import FleetUnit, Maintenance, Breakdown, PartRequest, Category
class FleetUnitForm(forms.ModelForm):
class Meta:
model = FleetUnit
fields = ['name', 'category', 'model_name', 'vin', 'plate_number', 'year', 'photo', 'status', 'commissioning_date', 'notes']
widgets = {
'commissioning_date': forms.DateInput(attrs={'type': 'date'}),
'notes': forms.Textarea(attrs={'rows': 3}),
}
class IndexView(TemplateView):
template_name = 'core/index.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['total_units'] = FleetUnit.objects.count()
context['active_units'] = FleetUnit.objects.filter(status='active').count()
context['broken_units'] = FleetUnit.objects.filter(status='broken').count()
context['repair_units'] = FleetUnit.objects.filter(status='repair').count()
# Stats for charts or badges
context['status_counts'] = FleetUnit.objects.values('status').annotate(total=Count('status'))
context['recent_maintenances'] = Maintenance.objects.all().order_by('-planned_date')[:5]
context['recent_breakdowns'] = Breakdown.objects.all().order_by('-date')[:5]
return context
class FleetListView(ListView):
model = FleetUnit
template_name = 'core/fleet_list.html'
context_object_name = 'units'
paginate_by = 12
def get_queryset(self):
queryset = super().get_queryset()
status = self.request.GET.get('status')
if status:
queryset = queryset.filter(status=status)
search = self.request.GET.get('search')
if search:
queryset = queryset.filter(name__icontains=search) | queryset.filter(plate_number__icontains=search) | queryset.filter(vin__icontains=search)
return queryset
class FleetDetailView(DetailView):
model = FleetUnit
template_name = 'core/fleet_detail.html'
context_object_name = 'unit'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['maintenances'] = self.object.maintenances.all()
context['breakdowns'] = self.object.breakdowns.all()
context['part_requests'] = self.object.part_requests.all()
return context
class FleetCreateView(CreateView):
model = FleetUnit
template_name = 'core/fleet_form.html'
form_class = FleetUnitForm
success_url = reverse_lazy('fleet_list')
class FleetUpdateView(UpdateView):
model = FleetUnit
template_name = 'core/fleet_form.html'
form_class = FleetUnitForm
def get_success_url(self):
return reverse_lazy('fleet_detail', kwargs={'pk': self.object.pk})