prvi kod za live uporabu
Some checks failed
ERP CI Pipeline / test (push) Has been cancelled

This commit is contained in:
mariomitte
2026-07-09 21:21:17 +02:00
parent 857bb65d52
commit 5d39e048ba
239 changed files with 25151 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
from django.db import transaction
from core.serializers import BaseSerializer
from rest_framework import serializers
from .models import Invoice, InvoiceItem, InvoiceTransaction
from .services import InvoiceService #
class InvoiceItemSerializer(serializers.ModelSerializer):
class Meta:
model = InvoiceItem
fields = ['description', 'quantity', 'unit_price']
class InvoiceSerializer(serializers.ModelSerializer):
items = InvoiceItemSerializer(many=True) # Nested lista stavki
class Meta:
model = Invoice
fields = ['invoice_number', 'client', 'due_date', 'status', 'items', 'amount']
read_only_fields = ['invoice_number', 'creator', 'status', 'amount']
extra_kwargs = {
'invoice_number': {'required': False, 'allow_null': True},
'creator': {'required': False, 'allow_null': True}
}
def create(self, validated_data):
"""
Delegiramo stvaranje servisu i vraćamo instancu Invoice.
"""
items = validated_data.pop('items', [])
# Servisu šaljemo items u validated_data kao što servis očekuje
validated_data['items'] = items
# Pokušavamo dohvatiti korisnika iz contexta (ako postoji)
request = self.context.get('request')
user = getattr(request, 'user', None)
# Pozivamo servis unutar transaction.atomic (servis već radi atomic, ali dodatno osiguranje nije štetno)
invoice = InvoiceService.create_full_invoice(user=user, **validated_data)
return invoice
class InvoiceTransactionSerializer(BaseSerializer):
invoice = serializers.PrimaryKeyRelatedField(queryset=Invoice.objects.all())
def validate_amount(self, value):
request = self.context.get('request')
# Ako request ne postoji (npr. unit test), tretiramo ga kao običnog korisnika (sigurnost prvo)
user = getattr(request, 'user', None)
# Ako user ne postoji ili nije staff, i iznos je <= 0 -> greška
if value <= 0 and (not user or not user.is_staff):
raise serializers.ValidationError("Iznos računa mora biti veći od 0.")
return value
class Meta:
model = InvoiceTransaction
fields = ['invoice', 'work_order', 'invoice_number', 'amount', 'payment_date', 'is_active']
read_only_fields = ['id', 'created_at', 'updated_at']