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})