Merge pull request #17 from xoliqberdiyev/test

Test
This commit is contained in:
xolikberdiyev
2025-10-08 14:30:03 +05:00
committed by GitHub
5 changed files with 52 additions and 3 deletions

View File

@@ -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(

View File

@@ -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)

View File

@@ -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

View File

@@ -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()),
]
)),
]

View File

@@ -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
)