@@ -37,7 +37,7 @@ class Order(BaseModel):
|
||||
)
|
||||
|
||||
date = models.DateField(null=True, blank=True)
|
||||
quantity = models.PositiveBigIntegerField(default=1)
|
||||
quantity = models.FloatField(default=1)
|
||||
status = models.CharField(max_length=20, choices=STATUS, default="NEW")
|
||||
unit_amount = models.PositiveBigIntegerField(default=0, null=True, blank=True)
|
||||
currency = models.CharField(
|
||||
|
||||
@@ -21,7 +21,7 @@ from core.apps.counterparty.models import Counterparty
|
||||
class OrderCreateSerializer(serializers.Serializer):
|
||||
product_id = serializers.UUIDField()
|
||||
unity_id = serializers.UUIDField()
|
||||
quantity = serializers.IntegerField()
|
||||
quantity = serializers.FloatField()
|
||||
wherehouse_id = serializers.UUIDField()
|
||||
project_id = serializers.UUIDField(required=False)
|
||||
project_folder_id = serializers.UUIDField(required=False)
|
||||
|
||||
@@ -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
|
||||
@@ -44,6 +44,7 @@ urlpatterns = [
|
||||
path('statistics/', party_views.PartyStatisticsApiView.as_view()),
|
||||
path('bulk-delete/', party_views.DeleteMultiplePartyApiView.as_view()),
|
||||
path('<uuid:id>/change-confirmation/', party_views.ChangeConfirmationPartyApiView.as_view()),
|
||||
path('<uuid:id>/payment-history/', party_views.PartyPaymentHistoryApiView.as_view()),
|
||||
]
|
||||
)),
|
||||
]
|
||||
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user