from django.contrib import admin from django.urls import reverse from django.utils.safestring import mark_safe from .models import Stroj, Vozilo from operations.models import RadniNalog, PutniNalog # Importamo modele iz druge aplikacije # --- INLINE KLASE --- class PutniNalogInline(admin.TabularInline): """Prikazuje putne naloge unutar pregleda vozila.""" model = PutniNalog extra = 0 fields = ('broj_naloga', 'datum_izdavanja', 'korisnik', 'pocetna_km', 'zavrsna_km', 'status') readonly_fields = ('broj_naloga', 'datum_izdavanja', 'korisnik', 'pocetna_km', 'zavrsna_km', 'status') can_delete = False verbose_name = "Povijest putovanja" verbose_name_plural = "Povijest putovanja za ovo vozilo" class RadniNalogInline(admin.TabularInline): model = RadniNalog extra = 0 # Umjesto običnog polja 'broj_naloga', koristimo metodu 'link_na_nalog' fields = ('link_na_nalog', 'datum_kreiranja', 'klijent', 'izvrsitelj', 'status') readonly_fields = ('link_na_nalog', 'datum_kreiranja', 'klijent', 'izvrsitelj', 'status') can_delete = False def link_na_nalog(self, obj): if obj.id: # Generiramo URL za admin promjenu Radnog Naloga url = reverse('admin:operations_radninalog_change', args=[obj.id]) return mark_safe(f'RN-{obj.broj_naloga}') return "-" link_na_nalog.short_description = 'Broj naloga' # --- GLAVNE ADMIN KLASE --- @admin.register(Vozilo) class VoziloAdmin(admin.ModelAdmin): list_display = ('naziv', 'registracija', 'status', 'pocetni_kilometri', 'trenutni_kilometri') search_fields = ('naziv', 'registracija') list_filter = ('status',) ordering = ('naziv',) # Dodajemo inline za putne naloge inlines = [PutniNalogInline] @admin.register(Stroj) class StrojAdmin(admin.ModelAdmin): list_display = ( 'serijski_broj', 'prikaz_naziva', 'vlasnik', 'tip', 'radni_sati', 'registracija', 'datum_zadnjeg_atesta' ) search_fields = ( 'serijski_broj', 'naziv', 'marka', 'model_stroja', 'vlasnik__naziv', 'vlasnik__oib' ) list_filter = ('tip', 'marka', 'vlasnik') autocomplete_fields = ['vlasnik'] # Dodajemo inline za radne naloge inlines = [RadniNalogInline] fieldsets = ( ('Osnovne informacije', { 'fields': ('vlasnik', 'naziv', 'tip', 'serijski_broj') }), ('Detalji o modelu', { 'fields': (('marka', 'model_stroja'), 'godina_proizvodnje') }), ('Tehnički podaci i održavanje', { 'fields': ('radni_sati', 'registracija', 'datum_zadnjeg_atesta'), 'classes': ('collapse',) }), ) def prikaz_naziva(self, obj): return f"{obj.marka} {obj.model_stroja}".strip() or obj.naziv prikaz_naziva.short_description = 'Marka i Model'