# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later from django.db import transaction from rest_framework import serializers from note.api.serializers import SpecialTransactionSerializer from ..models import Invoice, Product, RemittanceType, Remittance, SogeCredit class ProductSerializer(serializers.ModelSerializer): """ REST API Serializer for Product types. The djangorestframework plugin will analyse the model `Product` and parse all fields in the API. """ class Meta: model = Product fields = '__all__' class InvoiceSerializer(serializers.ModelSerializer): """ REST API Serializer for Invoice types. The djangorestframework plugin will analyse the model `Invoice` and parse all fields in the API. """ class Meta: model = Invoice fields = '__all__' read_only_fields = ('bde',) products = serializers.SerializerMethodField() def get_products(self, obj): return serializers.ListSerializer(child=ProductSerializer())\ .to_representation(Product.objects.filter(invoice=obj).all()) class RemittanceTypeSerializer(serializers.ModelSerializer): """ REST API Serializer for RemittanceType types. The djangorestframework plugin will analyse the model `RemittanceType` and parse all fields in the API. """ class Meta: model = RemittanceType fields = '__all__' class RemittanceSerializer(serializers.ModelSerializer): """ REST API Serializer for Remittance types. The djangorestframework plugin will analyse the model `Remittance` and parse all fields in the API. """ transactions = serializers.SerializerMethodField() class Meta: model = Remittance fields = '__all__' def get_transactions(self, obj): return serializers.ListSerializer(child=SpecialTransactionSerializer()).to_representation(obj.transactions) class SogeCreditSerializer(serializers.ModelSerializer): """ REST API Serializer for SogeCredit types. The djangorestframework plugin will analyse the model `SogeCredit` and parse all fields in the API. """ @transaction.atomic def save(self, **kwargs): # Update soge transactions after creating a credit instance = super().save(**kwargs) instance.update_transactions() instance.save() return instance class Meta: model = SogeCredit fields = '__all__'