prije gemini provjere
This commit is contained in:
90
001.BACKEND/fleet/admin.py
Normal file
90
001.BACKEND/fleet/admin.py
Normal file
@@ -0,0 +1,90 @@
|
||||
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'<a href="{url}" style="font-weight:bold;">RN-{obj.broj_naloga}</a>')
|
||||
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'
|
||||
Reference in New Issue
Block a user