Files
004.erp.generic/backend/core/users/serializers.py
mariomitte bf8e25efe7
Some checks failed
ERP CI/CD Pipeline / test (push) Has been cancelled
ERP CI/CD Pipeline / Deploy (server git pull + compose) (push) Has been cancelled
feat: dodaj display_code polje za putne naloge (MT070626 format)
- Dodano polje 'display_code' na WorkOrder model (format: 2 inicijala + ddmmyy)
- Migracije za kreiranje polja i backfill postojećih naloga
- Ažuriran WorkOrderSerializer za validaciju i serijalizaciju display_code
- Backend tasks za auto-generiranje display_code pri kreiranju
- Frontend komponente ažurirane za prikaz display_code umjesto UUID:
  * FleetDashboardShell tablica putnih naloga
  * WorkOrderDetailModal
  * TaskCreateModal
  * Sve PDF stranice
- displayIds.js utility za formatiranjeDisplay ID-eva
- Admin interface prikazuje display_code
2026-07-17 23:53:47 +02:00

73 lines
2.7 KiB
Python

from rest_framework import serializers
from .models import CustomUser
class UserSerializer(serializers.ModelSerializer):
assigned_vehicle = serializers.SerializerMethodField()
assigned_crane = serializers.SerializerMethodField()
class Meta:
model = CustomUser
fields = ['id', 'email', 'first_name', 'last_name', 'is_serviser', 'is_kupac', 'is_team_member', 'telefon', 'oib', 'occupation', 'residence', 'work_position', 'client_profile', 'assigned_vehicle', 'assigned_crane']
read_only_fields = ['id', 'email']
extra_kwargs = {
'first_name': {'required': True, 'allow_blank': False}
}
def _get_assigned_assets(self, obj):
return obj.assigned_vehicles.all()
def _serialize_asset(self, vehicle):
if not vehicle:
return None
return {
'id': vehicle.id,
'asset_type': vehicle.asset_type,
'registration_number': vehicle.registration_number,
'make': vehicle.make,
'model': vehicle.model,
'current_mileage': vehicle.current_mileage,
'service_interval_km': vehicle.service_interval_km,
}
def get_assigned_vehicle(self, obj):
assigned = self._get_assigned_assets(obj)
vehicle = assigned.filter(asset_type='vehicle').first() or assigned.first()
return self._serialize_asset(vehicle)
def get_assigned_crane(self, obj):
assigned = self._get_assigned_assets(obj)
crane = assigned.filter(asset_type='crane').first() or assigned.first()
return self._serialize_asset(crane)
def validate(self, data):
"""
Provodi poslovnu logiku na razini serializer-a.
"""
is_kupac = data.get('is_kupac')
client_profile = data.get('client_profile')
# Logika: Ako je kupac, mora imati profil
if is_kupac and not client_profile:
raise serializers.ValidationError({
"client_profile": "Korisnik označen kao kupac mora imati dodijeljen klijentski profil."
})
# Logika: Ako ima profil, trebao bi biti kupac (opcionalno, ali preporučeno)
if client_profile and not is_kupac:
raise serializers.ValidationError({
"is_kupac": "Korisnik s dodijeljenim klijentskim profilom mora biti označen kao kupac."
})
return data
class TeamMemberSerializer(serializers.ModelSerializer):
full_name = serializers.SerializerMethodField()
class Meta:
model = CustomUser
fields = ['id', 'email', 'full_name', 'is_team_member', 'is_serviser']
read_only_fields = fields
def get_full_name(self, obj):
return obj.get_full_name() or obj.email