fix, add: fix income expence contract list error, add party statistics api

This commit is contained in:
behruz-dev
2025-09-15 16:31:11 +05:00
parent b264bf632b
commit 8af117db99
4 changed files with 37 additions and 3 deletions

View File

@@ -27,7 +27,7 @@ class ExpenceContractSerializer(serializers.ModelSerializer):
return {
'id': obj.user.id,
'full_name': obj.user.full_name
}
} if obj.user else None
def get_counterparty(self, obj):
return {

View File

@@ -10,6 +10,7 @@ class IncomeContractSerializer(serializers.ModelSerializer):
project = serializers.SerializerMethodField(method_name='get_project')
income_type = serializers.SerializerMethodField(method_name='get_income_type')
counterparty = serializers.SerializerMethodField(method_name='get_counterparty')
user = serializers.SerializerMethodField(method_name='get_user')
class Meta:
model = IncomeContract
@@ -23,7 +24,7 @@ class IncomeContractSerializer(serializers.ModelSerializer):
return {
'id': obj.user.id,
'full_name': obj.user.full_name,
}
} if obj.user else None
def get_counterparty(self, obj):
return {

View File

@@ -38,6 +38,7 @@ urlpatterns = [
),
path('<uuid:party_id>/is_made/', party_views.PartyChangeStatusToIsMadeApiView.as_view()),
path('pay/', party_views.PartyPaymentApiView.as_view()),
path('statistics/', party_views.PartyStatisticsApiView.as_view()),
]
)),
]

View File

@@ -1,4 +1,5 @@
from django.shortcuts import get_object_or_404
from django.db.models import Sum, Q
from rest_framework import generics, views
from rest_framework.response import Response
@@ -191,3 +192,34 @@ class PartyPaymentApiView(generics.GenericAPIView):
},
status=400
)
class PartyStatisticsApiView(generics.GenericAPIView):
permission_classes = [HasRolePermission]
serializer_class = None
queryset = Party.objects.all()
filter_backends = [DjangoFilterBackend]
filterset_class = PartyFilter
pagination_class = None
def get(self, request):
qeryset = self.filter_queryset(self.queryset)
usd = qeryset.filter(currency='usd').aggregate(
total_price_usd=Sum('party_amount__total_price'),
cost_amount_usd=Sum('party_amount__cost_amount'),
calculated_amount_usd=Sum('party_amount__calculated_amount'),
paid_amount_usd=Sum('party_amount__paid_amount'),
payment_amount_usd=Sum('party_amount__payment_amount'),
)
uzs = qeryset.filter(currency='uzs').aggregate(
total_price_uzs=Sum('party_amount__total_price'),
cost_amount_uzs=Sum('party_amount__cost_amount'),
calculated_amount_uzs=Sum('party_amount__calculated_amount'),
paid_amount_uzs=Sum('party_amount__paid_amount'),
payment_amount_uzs=Sum('party_amount__payment_amount'),
)
res = {
'usd': usd,
'uzs': uzs
}
return Response(res, status=200)