vizualizacija i customUser model ima umjesto is_serviser polje uloga
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 3.3 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.4 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.0 MiB |
@@ -17,6 +17,21 @@ class PutniNalogMinimalSerializer(serializers.ModelSerializer):
|
|||||||
model = PutniNalog
|
model = PutniNalog
|
||||||
fields = ['id', 'broj_naloga', 'status', 'pocetna_km']
|
fields = ['id', 'broj_naloga', 'status', 'pocetna_km']
|
||||||
|
|
||||||
|
# --- NOVI STANDARDNI PUTNI NALOG SERIALIZER (Za rješavanje ImportError-a) ---
|
||||||
|
class PutniNalogSerializer(serializers.ModelSerializer):
|
||||||
|
vozilo_detalji = VoziloListaSerializer(source='vozilo', read_only=True)
|
||||||
|
korisnik_ime = serializers.CharField(source='korisnik.get_full_name', read_only=True)
|
||||||
|
status_display = serializers.CharField(source='get_status_display', read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = PutniNalog
|
||||||
|
fields = [
|
||||||
|
'id', 'broj_naloga', 'vozilo', 'vozilo_detalji', 'korisnik', 'korisnik_ime',
|
||||||
|
'relacija', 'mjesto_odredista', 'pocetna_km', 'zavrsna_km', 'status',
|
||||||
|
'status_display', 'vrijeme_polaska', 'vrijeme_povratka'
|
||||||
|
]
|
||||||
|
read_only_fields = ['id', 'broj_naloga', 'vrijeme_polaska']
|
||||||
|
|
||||||
# --- 1. LISTA SERIALIZER ---
|
# --- 1. LISTA SERIALIZER ---
|
||||||
class RadniNalogListaSerializer(serializers.ModelSerializer):
|
class RadniNalogListaSerializer(serializers.ModelSerializer):
|
||||||
klijent_naziv = serializers.CharField(source='klijent.naziv', read_only=True)
|
klijent_naziv = serializers.CharField(source='klijent.naziv', read_only=True)
|
||||||
|
|||||||
@@ -3,11 +3,21 @@ from django.contrib.auth.admin import UserAdmin
|
|||||||
from .models import CustomUser
|
from .models import CustomUser
|
||||||
|
|
||||||
class CustomUserAdmin(UserAdmin):
|
class CustomUserAdmin(UserAdmin):
|
||||||
model = CustomUser
|
# 🚀 POPRAVLJENO: Zamijenjen 'is_serviser' s 'uloga' u stupcima tablice
|
||||||
# Definiramo koja polja se vide u admin listi i formama
|
list_display = ['email', 'first_name', 'last_name', 'telefon', 'oib', 'uloga', 'is_staff']
|
||||||
list_display = ['email', 'username', 'first_name', 'last_name', 'is_staff', 'is_serviser']
|
|
||||||
|
# Ako filtriraš korisnike na desnoj strani admina, ažuriraj i to:
|
||||||
|
list_filter = ['uloga', 'is_staff', 'is_active']
|
||||||
|
|
||||||
|
# 🚀 POPRAVLJENO: Dodavanje polja u sekciju za uređivanje postojećeg korisnika
|
||||||
fieldsets = UserAdmin.fieldsets + (
|
fieldsets = UserAdmin.fieldsets + (
|
||||||
('Dodatni podaci', {'fields': ('telefon', 'oib', 'is_serviser')}),
|
('Dodatni podaci tvrtke', {'fields': ('telefon', 'oib', 'uloga')}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 🚀 POPRAVLJENO: Dodavanje polja u formu za kreiranje novog korisnika
|
||||||
|
add_fieldsets = UserAdmin.add_fieldsets + (
|
||||||
|
('Dodatni podaci tvrtke', {'fields': ('telefon', 'oib', 'uloga')}),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Registracija modela i tvoje prilagođene admin klase
|
||||||
admin.site.register(CustomUser, CustomUserAdmin)
|
admin.site.register(CustomUser, CustomUserAdmin)
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# Generated by Django 6.0.5 on 2026-05-23 12:28
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='customuser',
|
||||||
|
name='is_serviser',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='customuser',
|
||||||
|
name='uloga',
|
||||||
|
field=models.CharField(choices=[('SERVISER', 'Serviser'), ('PRODAJA', 'Prodaja / Operativa'), ('KNJIGOVODSTVO', 'Knjigovodstvo i financije'), ('ADMIN', 'Administrator')], default='SERVISER', help_text='Glavna operativna uloga korisnika u ERP sustavu', max_length=20),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -2,17 +2,29 @@ from django.contrib.auth.models import AbstractUser
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
class CustomUser(AbstractUser):
|
class CustomUser(AbstractUser):
|
||||||
|
class Role(models.TextChoices):
|
||||||
|
SERVISER = 'SERVISER', 'Serviser'
|
||||||
|
PRODAJA = 'PRODAJA', 'Prodaja / Operativa'
|
||||||
|
KNJIGOVODSTVO = 'KNJIGOVODSTVO', 'Knjigovodstvo i financije'
|
||||||
|
ADMIN = 'ADMIN', 'Administrator'
|
||||||
|
|
||||||
# Email koristimo za login, pa mora biti jedinstven
|
# Email koristimo za login, pa mora biti jedinstven
|
||||||
email = models.EmailField(unique=True)
|
email = models.EmailField(unique=True)
|
||||||
|
|
||||||
# Dodatna polja za tvoju tvrtku
|
# Dodatna polja za tvoju tvrtku
|
||||||
telefon = models.CharField(max_length=20, blank=True)
|
telefon = models.CharField(max_length=20, blank=True)
|
||||||
oib = models.CharField(max_length=11, blank=True, null=True)
|
oib = models.CharField(max_length=11, blank=True, null=True)
|
||||||
is_serviser = models.BooleanField(default=False) # Razlikovanje uloga
|
# 🚀 ZAMJENA: Umjesto is_serviser, uvodimo jedno polje za sve uloge
|
||||||
|
uloga = models.CharField(
|
||||||
|
max_length=20,
|
||||||
|
choices=Role.choices,
|
||||||
|
default=Role.SERVISER,
|
||||||
|
help_text="Glavna operativna uloga korisnika u ERP sustavu"
|
||||||
|
)
|
||||||
|
|
||||||
# Govorimo Djangu da koristi email umjesto username-a
|
# Govorimo Djangu da koristi email umjesto username-a
|
||||||
USERNAME_FIELD = 'email'
|
USERNAME_FIELD = 'email'
|
||||||
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
|
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.first_name} {self.last_name} ({self.email})"
|
return f"{self.first_name} {self.last_name} ({self.email}) - {self.get_uloga_display()}"
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from .models import CustomUser
|
from .models import CustomUser
|
||||||
|
|
||||||
class UserMeSerializer(serializers.ModelSerializer):
|
class UserSerializer(serializers.ModelSerializer):
|
||||||
|
# Prosljeđujemo i ljudski čitljiv naziv (npr. "Knjigovodstvo i financije")
|
||||||
|
uloga_prikaz = serializers.CharField(source='get_uloga_display', read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CustomUser
|
model = CustomUser
|
||||||
fields = ['id', 'email', 'first_name', 'last_name', 'is_serviser']
|
fields = ['id', 'first_name', 'last_name', 'email', 'telefon', 'oib', 'uloga', 'uloga_prikaz']
|
||||||
Reference in New Issue
Block a user