75 lines
2.9 KiB
Python
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}) |