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 { return {
'id': obj.user.id, 'id': obj.user.id,
'full_name': obj.user.full_name 'full_name': obj.user.full_name
} } if obj.user else None
def get_counterparty(self, obj): def get_counterparty(self, obj):
return { return {

View File

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

View File

@@ -38,6 +38,7 @@ urlpatterns = [
), ),
path('<uuid:party_id>/is_made/', party_views.PartyChangeStatusToIsMadeApiView.as_view()), path('<uuid:party_id>/is_made/', party_views.PartyChangeStatusToIsMadeApiView.as_view()),
path('pay/', party_views.PartyPaymentApiView.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.shortcuts import get_object_or_404
from django.db.models import Sum, Q
from rest_framework import generics, views from rest_framework import generics, views
from rest_framework.response import Response from rest_framework.response import Response
@@ -190,4 +191,35 @@ class PartyPaymentApiView(generics.GenericAPIView):
'error': ser.errors, 'error': ser.errors,
}, },
status=400 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)