diff --git a/core/apps/orders/migrations/0011_rename_coled_date_party_closed_date.py b/core/apps/orders/migrations/0011_rename_coled_date_party_closed_date.py new file mode 100644 index 0000000..9690b86 --- /dev/null +++ b/core/apps/orders/migrations/0011_rename_coled_date_party_closed_date.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.4 on 2025-08-21 14:37 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0010_party_coled_date_party_confirmation_party_number_and_more'), + ] + + operations = [ + migrations.RenameField( + model_name='party', + old_name='coled_date', + new_name='closed_date', + ), + ] diff --git a/core/apps/orders/models/party.py b/core/apps/orders/models/party.py index b81f4c5..6aeb64b 100644 --- a/core/apps/orders/models/party.py +++ b/core/apps/orders/models/party.py @@ -11,7 +11,7 @@ class Party(BaseModel): mediator = models.ForeignKey(User, on_delete=models.CASCADE, related_name='parties') # dates delivery_date = models.DateField() - coled_date = models.DateField(null=True, blank=True) + closed_date = models.DateField(null=True, blank=True) order_date = models.DateField(auto_now_add=True) payment_date = models.DateField() diff --git a/core/apps/orders/serializers/party.py b/core/apps/orders/serializers/party.py index 941641d..bd8968c 100644 --- a/core/apps/orders/serializers/party.py +++ b/core/apps/orders/serializers/party.py @@ -3,7 +3,7 @@ from django.db import transaction from rest_framework import serializers from core.apps.orders.models import Party, PartyAmount, Order -from core.apps.orders.serializers.order import MultipleOrderAddSerializer +from core.apps.orders.serializers.order import MultipleOrderAddSerializer, OrderListSerializer from core.apps.accounts.models import User @@ -44,6 +44,7 @@ class PartyCreateSerializer(serializers.Serializer): currency=resource.get('currency'), total_price=resource.get('amount'), date=resource.get('date'), + employee=self.context.get('user'), )) total_price += resource.get('amount') created_orders = Order.objects.bulk_create(orders) @@ -61,4 +62,25 @@ class PartyCreateSerializer(serializers.Serializer): total_price=total_price, party=party, ) - return party \ No newline at end of file + return party + + +class PartyAmountSerializer(serializers.ModelSerializer): + class Meta: + model = PartyAmount + fields = [ + 'id', 'total_price', 'cost_amount', 'calculated_amount', 'paid_amount', 'payment_amount' + ] + + +class PartyListSerializer(serializers.ModelSerializer): + orders = OrderListSerializer(many=True) + party_amount = PartyAmountSerializer() + + class Meta: + model = Party + fields = [ + 'id', 'number', 'delivery_date', 'closed_date', 'order_date', 'payment_date', 'status', + 'payment_status', 'process', 'confirmation', 'comment', 'audit', 'audit_comment', + 'orders', 'party_amount' + ] \ No newline at end of file diff --git a/core/apps/orders/urls.py b/core/apps/orders/urls.py index 5ec1fe6..1d20cad 100644 --- a/core/apps/orders/urls.py +++ b/core/apps/orders/urls.py @@ -28,6 +28,7 @@ urlpatterns = [ path('party/', include( [ path('create/', party_views.PartyCreateApiView.as_view()), + path('list/', party_views.PartyListApiView.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 1c5c5d4..7d20895 100644 --- a/core/apps/orders/views/party.py +++ b/core/apps/orders/views/party.py @@ -13,7 +13,7 @@ class PartyCreateApiView(generics.GenericAPIView): required_permissions = [] def post(self, request): - serializer = self.serializer_class(data=request.data) + serializer = self.serializer_class(data=request.data, context={'user': request.user}) if serializer.is_valid(raise_exception=True): serializer.save() return Response( @@ -23,4 +23,17 @@ class PartyCreateApiView(generics.GenericAPIView): return Response( {'success': False, 'message': 'error while party created', 'error': serializer.errors}, status=400 - ) \ No newline at end of file + ) + + +class PartyListApiView(generics.GenericAPIView): + serializer_class = serializers.PartyListSerializer + queryset = Party.objects.select_related('party_amount').prefetch_related('orders') + permission_classes = [HasRolePermission] + required_permissions = [] + + def get(self, request): + parties = self.get_queryset() + serializer = self.serializer_class(parties, many=True) + return Response(serializer.data, status=200) + \ No newline at end of file