From c3a97a56880a456cff41a312f2e6363c529bc967 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Sat, 6 Sep 2025 16:37:31 +0500 Subject: [PATCH] add payment type api --- ...ashtransaction_expence_balance_and_more.py | 28 ++++++++++ ...ransaction_expence_balance_usd_and_more.py | 43 ++++++++++++++ core/apps/finance/models/cash_transaction.py | 7 +++ core/apps/finance/serializers/payment_type.py | 12 ++++ core/apps/finance/urls.py | 9 +++ core/apps/finance/views/payment_type.py | 56 +++++++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 core/apps/finance/migrations/0004_cashtransaction_expence_balance_and_more.py create mode 100644 core/apps/finance/migrations/0005_rename_expence_balance_cashtransaction_expence_balance_usd_and_more.py create mode 100644 core/apps/finance/serializers/payment_type.py create mode 100644 core/apps/finance/views/payment_type.py diff --git a/core/apps/finance/migrations/0004_cashtransaction_expence_balance_and_more.py b/core/apps/finance/migrations/0004_cashtransaction_expence_balance_and_more.py new file mode 100644 index 0000000..ed049d7 --- /dev/null +++ b/core/apps/finance/migrations/0004_cashtransaction_expence_balance_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2.4 on 2025-09-05 18:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('finance', '0003_cashtransactionfolder_cashtransaction_folder'), + ] + + operations = [ + migrations.AddField( + model_name='cashtransaction', + name='expence_balance', + field=models.PositiveBigIntegerField(default=0), + ), + migrations.AddField( + model_name='cashtransaction', + name='income_balance', + field=models.PositiveBigIntegerField(default=0), + ), + migrations.AddField( + model_name='cashtransaction', + name='total_balance', + field=models.PositiveBigIntegerField(default=0), + ), + ] diff --git a/core/apps/finance/migrations/0005_rename_expence_balance_cashtransaction_expence_balance_usd_and_more.py b/core/apps/finance/migrations/0005_rename_expence_balance_cashtransaction_expence_balance_usd_and_more.py new file mode 100644 index 0000000..56ee26a --- /dev/null +++ b/core/apps/finance/migrations/0005_rename_expence_balance_cashtransaction_expence_balance_usd_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 5.2.4 on 2025-09-05 19:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('finance', '0004_cashtransaction_expence_balance_and_more'), + ] + + operations = [ + migrations.RenameField( + model_name='cashtransaction', + old_name='expence_balance', + new_name='expence_balance_usd', + ), + migrations.RenameField( + model_name='cashtransaction', + old_name='income_balance', + new_name='expence_balance_uzs', + ), + migrations.RenameField( + model_name='cashtransaction', + old_name='total_balance', + new_name='income_balance_usd', + ), + migrations.AddField( + model_name='cashtransaction', + name='income_balance_uzs', + field=models.PositiveBigIntegerField(default=0), + ), + migrations.AddField( + model_name='cashtransaction', + name='total_balance_usd', + field=models.PositiveBigIntegerField(default=0), + ), + migrations.AddField( + model_name='cashtransaction', + name='total_balance_uzs', + field=models.PositiveBigIntegerField(default=0), + ), + ] diff --git a/core/apps/finance/models/cash_transaction.py b/core/apps/finance/models/cash_transaction.py index 63b3105..894ec12 100644 --- a/core/apps/finance/models/cash_transaction.py +++ b/core/apps/finance/models/cash_transaction.py @@ -28,6 +28,13 @@ class CashTransaction(BaseModel): CashTransactionFolder, on_delete=models.SET_NULL, related_name='cash_transactions', null=True, blank=True ) + total_balance_usd = models.PositiveBigIntegerField(default=0) + income_balance_usd = models.PositiveBigIntegerField(default=0) + expence_balance_usd = models.PositiveBigIntegerField(default=0) + + total_balance_uzs = models.PositiveBigIntegerField(default=0) + income_balance_uzs = models.PositiveBigIntegerField(default=0) + expence_balance_uzs = models.PositiveBigIntegerField(default=0) def __str__(self): return self.name diff --git a/core/apps/finance/serializers/payment_type.py b/core/apps/finance/serializers/payment_type.py new file mode 100644 index 0000000..19fe8d6 --- /dev/null +++ b/core/apps/finance/serializers/payment_type.py @@ -0,0 +1,12 @@ +from rest_framework import serializers + +from core.apps.finance.models import PaymentType + + +class PaymentTypeSerializer(serializers.ModelSerializer): + class Meta: + model = PaymentType + fields = [ + 'id', 'name' + ] + \ No newline at end of file diff --git a/core/apps/finance/urls.py b/core/apps/finance/urls.py index 1ccbc14..96067d6 100644 --- a/core/apps/finance/urls.py +++ b/core/apps/finance/urls.py @@ -2,6 +2,7 @@ from django.urls import path, include from core.apps.finance.views import cash_transaction as cash_views from core.apps.finance.views import cash_transaction_folder as folder_views +from core.apps.finance.views import payment_type as pt_views urlpatterns = [ @@ -19,4 +20,12 @@ urlpatterns = [ path('/update/', folder_views.CashTransactionFolderUpdateApiView.as_view()), ] )), + path('payment_type/', include( + [ + path('create/', pt_views.PaymentTypeCreateApiView.as_view()), + path('list/', pt_views.PaymentListApiView.as_view()), + path('/delete/', pt_views.PaymentDeleteApiView.as_view()), + path('/update/', pt_views.PaymentUpdateApiView.as_view()), + ] + )) ] \ No newline at end of file diff --git a/core/apps/finance/views/payment_type.py b/core/apps/finance/views/payment_type.py new file mode 100644 index 0000000..b79a944 --- /dev/null +++ b/core/apps/finance/views/payment_type.py @@ -0,0 +1,56 @@ +from django.shortcuts import get_object_or_404 + +from rest_framework import generics, views +from rest_framework.response import Response + +from core.apps.accounts.permissions.permissions import HasRolePermission +from core.apps.finance.models import PaymentType +from core.apps.finance.serializers.payment_type import PaymentTypeSerializer + + +class PaymentTypeCreateApiView(generics.GenericAPIView): + serializer_class = PaymentTypeSerializer + queryset = PaymentType.objects.all() + permission_classes = [HasRolePermission] + + def post(self, request): + ser = self.serializer_class(data=request.data) + if ser.is_valid(raise_exception=True): + ser.save() + return Response({'success': True}, status=201) + return Response(ser.errors, status=400) + + +class PaymentListApiView(views.APIView): + permission_classes = [HasRolePermission] + + def get(self, request): + queryset = PaymentType.objects.all() + ser = PaymentTypeSerializer(queryset, many=True) + return Response(ser.data, status=200) + + +class PaymentDeleteApiView(views.APIView): + permission_classes = [HasRolePermission] + + def delete(self, request, id): + obj = get_object_or_404(PaymentType, id=id) + obj.delete() + return Response(status=204) + + +class PaymentUpdateApiView(generics.GenericAPIView): + permission_classes = [HasRolePermission] + queryset = PaymentType.objects.all() + serializer_class = PaymentTypeSerializer + + def patch(self, request, id): + obj = get_object_or_404(PaymentType, id=id) + ser = self.serializer_class(data=request.data, instance=obj, partial=True) + if ser.is_valid(): + ser.save() + return Response({'success': True}, status=200) + return Response(ser.errors, status=400) + + + \ No newline at end of file