diff --git a/core/apps/orders/serializers/party.py b/core/apps/orders/serializers/party.py index ead0848..e78e5eb 100644 --- a/core/apps/orders/serializers/party.py +++ b/core/apps/orders/serializers/party.py @@ -480,3 +480,27 @@ class PartyExpenceCreateSerializer(serializers.ModelSerializer): cash_transaction.save() payment_type.save() return expence + + +class PartyPaymentHistorySerializer(serializers.ModelSerializer): + counterparty = serializers.SerializerMethodField(method_name='get_counterparty') + user = serializers.SerializerMethodField(method_name='get_user') + + class Meta: + model = Expence + fields = [ + 'id', 'counterparty', 'price', 'created_at', 'date', 'user' + ] + + def get_counterparty(self, obj): + return { + 'id': obj.counterparty.id, + 'name': obj.counterparty.name, + } if obj.counterparty else None + + def get_user(self, obj): + return { + 'id': obj.user.id, + 'full_name': obj.user.full_name, + 'profile_image': obj.user.profile_image, + } if obj.user else None \ No newline at end of file diff --git a/core/apps/orders/urls.py b/core/apps/orders/urls.py index 17ad467..57be84d 100644 --- a/core/apps/orders/urls.py +++ b/core/apps/orders/urls.py @@ -44,6 +44,7 @@ urlpatterns = [ path('statistics/', party_views.PartyStatisticsApiView.as_view()), path('bulk-delete/', party_views.DeleteMultiplePartyApiView.as_view()), path('/change-confirmation/', party_views.ChangeConfirmationPartyApiView.as_view()), + path('/payment-history/', party_views.PartyPaymentHistoryApiView.as_view()), ] )), ] \ No newline at end of file diff --git a/core/apps/orders/views/party.py b/core/apps/orders/views/party.py index 60c99bc..9998a6e 100644 --- a/core/apps/orders/views/party.py +++ b/core/apps/orders/views/party.py @@ -1,17 +1,23 @@ +# django from django.shortcuts import get_object_or_404 from django.db.models import Sum, Q, F from django.utils.timezone import now +# django rest framework from rest_framework import generics, views from rest_framework.response import Response +# django filters from django_filters.rest_framework.backends import DjangoFilterBackend +# accounts app from core.apps.accounts.permissions.permissions import HasRolePermission +# orders app from core.apps.orders.serializers import party as serializers -from core.apps.orders.models import Party, PartyAmount, DeletedParty, Order +from core.apps.orders.models import Party, DeletedParty from core.apps.orders.filters.party import PartyFilter from core.apps.orders.tasks.order import create_inventory +# finance app from core.apps.finance.models import Expence @@ -258,3 +264,21 @@ class ChangeConfirmationPartyApiView(views.APIView): }, status=200 ) + + +class PartyPaymentHistoryApiView(generics.GenericAPIView): + permission_classes = [HasRolePermission] + serializer_class = serializers.PartyPaymentHistorySerializer + queryset = Expence.objects.select_related('counterparty', 'user') + pagination_class = None + + def get(self, request, id): + party = get_object_or_404(Party, id=id) + expences = self.queryset.filter(party=party) + serializer = self.serializer_class(expences, many=True) + return Response( + { + 'success': True, + 'data': serializer.data, + }, status=200 + ) \ No newline at end of file