izradena poslovna logika
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user