90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
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' |