yuyu/api/serializers.py

52 lines
1.8 KiB
Python
Raw Normal View History

2021-09-01 19:29:24 +07:00
from djmoney.contrib.django_rest_framework import MoneyField
2021-08-31 11:11:51 +07:00
from rest_framework import serializers
2021-10-29 13:00:33 +07:00
from core.models import Invoice
from core.component import component
2021-08-31 11:11:51 +07:00
2021-10-29 13:00:33 +07:00
class InvoiceComponentSerializer(serializers.ModelSerializer):
2021-09-01 19:29:24 +07:00
adjusted_end_date = serializers.DateTimeField()
price_charged = MoneyField(max_digits=10, decimal_places=0)
price_charged_currency = serializers.CharField(source="price_charged.currency")
2021-08-31 11:11:51 +07:00
2021-10-29 13:00:33 +07:00
def generate_invoice_component_serializer(model):
"""
Generate Invoice Component Serializer for particular model
:param model: The invoice component model
:return: serializer for particular model
"""
name = type(model).__name__
meta_params = {
"model": model,
"fields": "__all__"
}
meta_class = type("Meta", (object,), meta_params)
serializer_class = type(f"{name}Serializer", (InvoiceComponentSerializer,), {"Meta": meta_class})
2021-08-31 11:11:51 +07:00
2021-10-29 13:00:33 +07:00
return serializer_class
2021-08-31 11:11:51 +07:00
class InvoiceSerializer(serializers.ModelSerializer):
2021-09-01 19:29:24 +07:00
subtotal = MoneyField(max_digits=10, decimal_places=0)
subtotal_currency = serializers.CharField(source="subtotal.currency")
2021-08-31 11:11:51 +07:00
2021-10-29 13:00:33 +07:00
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field, model in component.INVOICE_COMPONENT_MODEL.items():
self.fields[field] = generate_invoice_component_serializer(model)(many=True)
2021-08-31 11:11:51 +07:00
class Meta:
model = Invoice
fields = '__all__'
class SimpleInvoiceSerializer(serializers.ModelSerializer):
2022-02-14 16:11:54 +07:00
subtotal = MoneyField(max_digits=10, decimal_places=0)
subtotal_currency = serializers.CharField(source="subtotal.currency")
2021-08-31 11:11:51 +07:00
class Meta:
model = Invoice
2022-03-22 13:15:25 +07:00
fields = ['id', 'start_date', 'end_date', 'state', 'tax', 'subtotal', 'subtotal_currency', 'total']