Add sales types, party adjustments, FunZone party fields, and treasury fee support

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Shayan Azadi
2026-07-03 03:15:52 +03:30
parent 5dd29c41d6
commit 5fb79fb7f0
8 changed files with 366 additions and 3 deletions

View File

@@ -8,8 +8,10 @@ from .models import (
Invoice,
InvoiceLine,
Party,
PartyAdjustment,
Payslip,
Product,
SalesType,
TreasuryTxn,
Voucher,
VoucherLine,
@@ -31,10 +33,22 @@ class AccountSerializer(serializers.ModelSerializer):
class PartySerializer(serializers.ModelSerializer):
economicCode = serializers.CharField(source='economic_code', required=False, allow_blank=True)
openingBalance = serializers.FloatField(source='opening_balance', required=False)
externalId = serializers.UUIDField(source='external_id', required=False, allow_null=True)
externalSource = serializers.CharField(source='external_source', required=False, allow_blank=True)
firstName = serializers.CharField(source='first_name', required=False, allow_blank=True)
lastName = serializers.CharField(source='last_name', required=False, allow_blank=True)
nationalCode = serializers.CharField(source='national_code', required=False, allow_blank=True)
walletBalance = serializers.FloatField(source='wallet_balance', required=False)
isActive = serializers.BooleanField(source='is_active', required=False)
isVerified = serializers.BooleanField(source='is_verified', required=False)
class Meta:
model = Party
fields = ['id', 'kind', 'name', 'phone', 'economicCode', 'address', 'openingBalance']
fields = [
'id', 'kind', 'name', 'phone', 'economicCode', 'address', 'openingBalance',
'externalId', 'externalSource', 'firstName', 'lastName', 'username', 'email',
'nationalCode', 'iban', 'walletBalance', 'isActive', 'isVerified', 'birthday', 'venues',
]
class ProductSerializer(serializers.ModelSerializer):
@@ -87,6 +101,20 @@ class VoucherSerializer(serializers.ModelSerializer):
return instance
class SalesTypeSerializer(serializers.ModelSerializer):
class Meta:
model = SalesType
fields = ['id', 'code', 'name', 'description', 'active']
class PartyAdjustmentSerializer(serializers.ModelSerializer):
partyId = serializers.PrimaryKeyRelatedField(source='party', queryset=Party.objects.all())
class Meta:
model = PartyAdjustment
fields = ['id', 'number', 'partyId', 'kind', 'date', 'amount', 'description']
class InvoiceLineSerializer(serializers.ModelSerializer):
# Lenient: accepts client-generated ids (ignored on write, recreated server-side).
id = serializers.CharField(required=False)
@@ -105,11 +133,21 @@ class InvoiceSerializer(serializers.ModelSerializer):
partyId = serializers.PrimaryKeyRelatedField(
source='party', queryset=Party.objects.all(), allow_null=True, required=False
)
documentType = serializers.CharField(source='document_type', required=False)
salesTypeId = serializers.PrimaryKeyRelatedField(
source='sales_type', queryset=SalesType.objects.all(), allow_null=True, required=False
)
relatedInvoiceId = serializers.PrimaryKeyRelatedField(
source='related_invoice', queryset=Invoice.objects.all(), allow_null=True, required=False
)
lines = InvoiceLineSerializer(many=True)
class Meta:
model = Invoice
fields = ['id', 'kind', 'number', 'partyId', 'date', 'status', 'note', 'lines']
fields = [
'id', 'kind', 'documentType', 'number', 'partyId', 'salesTypeId',
'relatedInvoiceId', 'date', 'status', 'note', 'lines',
]
@transaction.atomic
def create(self, validated_data):
@@ -139,9 +177,18 @@ class TreasuryTxnSerializer(serializers.ModelSerializer):
source='party', queryset=Party.objects.all(), allow_null=True, required=False
)
amount = serializers.FloatField(required=False)
taxAmount = serializers.FloatField(source='tax_amount', required=False)
platformProfitAmount = serializers.FloatField(source='platform_profit_amount', required=False)
ownerNetAmount = serializers.FloatField(source='owner_net_amount', required=False)
class Meta:
model = TreasuryTxn
fields = ['id', 'number', 'kind', 'method', 'date', 'partyId', 'amount', 'reference', 'description']
fields = [
'id', 'number', 'kind', 'method', 'date', 'partyId', 'amount',
'taxAmount', 'platformProfitAmount', 'ownerNetAmount',
'reference', 'description', 'source',
]
class EmployeeSerializer(serializers.ModelSerializer):