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) 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") status = models.CharField(max_length=20, choices=STATUS, default="NEW")
unit_amount = models.PositiveBigIntegerField(default=0, null=True, blank=True) unit_amount = models.PositiveBigIntegerField(default=0, null=True, blank=True)
currency = models.CharField( currency = models.CharField(

View File

@@ -21,7 +21,7 @@ from core.apps.counterparty.models import Counterparty
class OrderCreateSerializer(serializers.Serializer): class OrderCreateSerializer(serializers.Serializer):
product_id = serializers.UUIDField() product_id = serializers.UUIDField()
unity_id = serializers.UUIDField() unity_id = serializers.UUIDField()
quantity = serializers.IntegerField() quantity = serializers.FloatField()
wherehouse_id = serializers.UUIDField() wherehouse_id = serializers.UUIDField()
project_id = serializers.UUIDField(required=False) project_id = serializers.UUIDField(required=False)
project_folder_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() cash_transaction.save()
payment_type.save() payment_type.save()
return expence 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('statistics/', party_views.PartyStatisticsApiView.as_view()),
path('bulk-delete/', party_views.DeleteMultiplePartyApiView.as_view()), path('bulk-delete/', party_views.DeleteMultiplePartyApiView.as_view()),
path('<uuid:id>/change-confirmation/', party_views.ChangeConfirmationPartyApiView.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.shortcuts import get_object_or_404
from django.db.models import Sum, Q, F from django.db.models import Sum, Q, F
from django.utils.timezone import now from django.utils.timezone import now
# django rest framework
from rest_framework import generics, views from rest_framework import generics, views
from rest_framework.response import Response from rest_framework.response import Response
# django filters
from django_filters.rest_framework.backends import DjangoFilterBackend from django_filters.rest_framework.backends import DjangoFilterBackend
# accounts app
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
# orders app
from core.apps.orders.serializers import party as serializers 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.filters.party import PartyFilter
from core.apps.orders.tasks.order import create_inventory from core.apps.orders.tasks.order import create_inventory
# finance app
from core.apps.finance.models import Expence from core.apps.finance.models import Expence
@@ -258,3 +264,21 @@ class ChangeConfirmationPartyApiView(views.APIView):
}, },
status=200 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
)