izradena poslovna logika

This commit is contained in:
2026-05-25 04:25:34 +00:00
parent 668195e642
commit e0a3dea68a
127 changed files with 2417 additions and 6509 deletions

View File

@@ -9,7 +9,7 @@ from fleet.serializers import VoziloListaSerializer, StrojSerializer
class RadniNalogSlikaSerializer(serializers.ModelSerializer):
class Meta:
model = RadniNalogSlika
fields = ['id', 'slika', 'opis']
fields = ['id', 'slika', 'opis', 'radni_nalog']
# --- POMOĆNI SERIALIZER ZA PRIKAZ VEZANOG PUTNOG NALOGA ---
class PutniNalogMinimalSerializer(serializers.ModelSerializer):

View File

@@ -1,11 +1,12 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import RadniNalogViewSet, PutniNalogViewSet
from .views import RadniNalogViewSet, PutniNalogViewSet, RadniNalogSlikaViewSet
# Kreiramo router i registriramo ViewSet za radne naloge
router = DefaultRouter()
router.register(r'radni-nalozi', RadniNalogViewSet, basename='radni-nalog')
router.register(r'putni-nalozi', PutniNalogViewSet, basename='putni-nalog')
router.register(r'radni-nalozi-slike', RadniNalogSlikaViewSet, basename='radni-nalog-slika')
urlpatterns = [
# Uključujemo sve rute koje router generira

View File

@@ -8,7 +8,8 @@ from .serializers import (
RadniNalogSerializer,
RadniNalogListaSerializer,
RadniNalogDetaljiSerializer,
KreirajPutniNalogSerializer
KreirajPutniNalogSerializer,
RadniNalogSlikaSerializer
)
from kalendar.services import kreiraj_kalendarski_unos
@@ -20,6 +21,8 @@ class RadniNalogViewSet(viewsets.ModelViewSet):
queryset = RadniNalog.objects.all().select_related(
'klijent', 'izvrsitelj', 'putni_nalog__vozilo'
)
# permission_classes = [permissions.IsAuthenticated]
# permission_classes = [permissions.AllowAny]
serializer_class = RadniNalogSerializer
@@ -41,6 +44,18 @@ class RadniNalogViewSet(viewsets.ModelViewSet):
ordering_fields = ['datum_kreiranja', 'status', 'broj_naloga']
ordering = ['-datum_kreiranja']
def partial_update(self, request, *args, **kwargs):
# 1. Izvrši standardni update
response = super().partial_update(request, *args, **kwargs)
# 2. Dohvati svježu instancu nakon spremanja
instance = self.get_object()
# 3. Koristi detaljni serializer kako bi Astro dobio sve podatke (slike, vozilo, klijent)
serializer = RadniNalogDetaljiSerializer(instance, context={'request': request})
return Response(serializer.data)
def get_serializer_class(self):
if self.action == 'list':
return RadniNalogListaSerializer
@@ -70,7 +85,23 @@ class RadniNalogViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
if request.data.get('kreiraj_putni') == 'true':
# Kreiraj novi putni nalog (moraš imati vozilo definirano!)
# Pretpostavka: 'stroj' je poslan u requestu, pa iz njega dobijemo vozilo ako postoji
# Ovdje prilagodi logiku prema tome kako tvoj model PutniNalog povezuje vozilo
novi_putni = PutniNalog.objects.create(
broj_naloga=f"PN-{timezone.now().year}-AUTO", # Ili tvoja logika za broj
vozilo=serializer.validated_data['stroj'].vozilo, # Primjer povezivanja
korisnik=request.user,
relacija="Automatski kreirano iz radnog naloga"
)
# Spremi nalog s ovim novim putnim nalogom
instance = serializer.save(putni_nalog=novi_putni)
else:
# Standardni put
self.perform_create(serializer)
instance = serializer.instance
instance = serializer.instance
@@ -125,7 +156,8 @@ class PutniNalogViewSet(viewsets.ModelViewSet):
Podržava izradu novog putnog naloga iz radnog naloga (POST) i pregled (GET).
"""
queryset = PutniNalog.objects.all().order_by('-datum_izdavanja', '-id')
permission_classes = [permissions.IsAuthenticated] # Preporučeno: Otkomentarisano radi getAuthHeaders
# permission_classes = [permissions.IsAuthenticated] # Preporučeno: Otkomentarisano radi getAuthHeaders
permission_classes = [permissions.AllowAny]
def get_serializer_class(self):
if self.action == 'create':
@@ -148,4 +180,37 @@ class PutniNalogViewSet(viewsets.ModelViewSet):
status=status.HTTP_201_CREATED
)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class RadniNalogSlikaViewSet(viewsets.ModelViewSet):
queryset = RadniNalogSlika.objects.all()
serializer_class = RadniNalogSlikaSerializer
permission_classes = [permissions.IsAuthenticated]
# permission_classes = [permissions.AllowAny]
def create(self, request, *args, **kwargs):
# 1. Dohvati listu datoteka (mora se podudarati s imenom u FormData)
files = request.FILES.getlist('slika')
# 2. Dohvati nalog_id iz request.data
radni_nalog_id = request.data.get('radni_nalog')
if not files:
# Ako nema datoteka, pokušaj standardno kreiranje
return super().create(request, *args, **kwargs)
created_instances = []
for file in files:
# 3. Ručno kreiraj instancu za svaku sliku
# Napomena: 'slika' i 'radni_nalog' su imena polja u tvom modelu
instance = RadniNalogSlika.objects.create(
radni_nalog_id=radni_nalog_id,
slika=file
)
created_instances.append(instance)
return Response(
{"status": f"Uspješno dodano {len(created_instances)} slika"},
status=status.HTTP_201_CREATED
)