diff --git a/backend/core/settings/base.py b/backend/core/settings/base.py index b793d4e..5c7c324 100644 --- a/backend/core/settings/base.py +++ b/backend/core/settings/base.py @@ -66,6 +66,7 @@ INSTALLED_APPS = [ "import_export", "django_jalali", 'django_celery_beat', + 'azbankgateways', # Custom Apps "product", "account", @@ -234,3 +235,20 @@ AWS_S3_OBJECT_PARAMETERS = { 'ACL': 'public-read', } +# ============================================================================== +# bank gateway configs +# ============================================================================== + +AZ_IRANIAN_BANK_GATEWAYS = { + 'GATEWAYS': { + 'ZARINPAL': { + 'MERCHANT_CODE': 'Merchant-Code', + 'SANDBOX': True, + } + }, + 'IS_SAMPLE_FORM_ENABLE': True, + 'DEFAULT_BANK': 'ZARINPAL', + 'CURRENCY': 'IRR', + 'TRACKING_CODE_QUERY_PARAM': 'tc', + 'BANK_PRIORITIES': ['ZARINPAL'], +} \ No newline at end of file diff --git a/backend/order/serializers.py b/backend/order/serializers.py index 390b43b..e0b3b2c 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -9,15 +9,23 @@ class ProductVariantSerialzier(serializers.ModelSerializer): image = serializers.SerializerMethodField() discount_amount = serializers.SerializerMethodField() title = serializers.SerializerMethodField() - price = serializers.CharField() + price = serializers.SerializerMethodField() + final_price = serializers.SerializerMethodField() category = serializers.SerializerMethodField() class Meta: model = ProductVariant - fields = ['title', 'product_attributes', 'in_stock', 'price', 'discount', 'color', 'image', 'discount_amount', 'category'] + fields = ['title', 'product_attributes', 'in_stock', 'price', 'discount', 'color', 'image', 'discount_amount', 'category', 'final_price'] def get_discount_amount(self, obj): discount_amount = int(obj.price * (obj.discount / 100)) - return f'{discount_amount}' + return f'{discount_amount:,.0f} تومان' + + def get_final_price(self, obj): + final_price = obj.price - int(obj.price * (obj.discount / 100)) + return f'{final_price:,.0f} تومان' + + def get_price(self, obj): + return f'{obj.price:,.0f} تومان' def get_image(self, obj): return self.context.get('request').build_absolute_uri(obj.images.all().first().image.url) @@ -64,7 +72,7 @@ class CartSerializer(serializers.ModelSerializer): return { 'code': f'{obj.discount_code.code}', 'percent': obj.discount_code.percent, - 'amount': '100000' + 'amount': f'{10000:,.0f} تومان' } else: return None @@ -74,14 +82,14 @@ class CartSerializer(serializers.ModelSerializer): def get_tax(self, obj): - return '1000' + return f'{1000:,.0f} تومان' def get_cart_total(self, obj): - return '10000' + return f'{10000:,.0f} تومان' def get_final_price(self, obj): - return '8000' + return f'{8000:,.0f} تومان' class OrderSerializer(serializers.ModelSerializer): diff --git a/backend/order/views.py b/backend/order/views.py index 64912a1..9c24245 100644 --- a/backend/order/views.py +++ b/backend/order/views.py @@ -107,4 +107,65 @@ class OrderlistView(APIView): user = request.user orders = OrderModel.objects.filter(user=user).exclude(status="CART") orders_ser = self.serializer_class(instance=orders, many=True, context={'request': request}) - return Response(orders_ser.data, status=status.HTTP_200_OK) \ No newline at end of file + return Response(orders_ser.data, status=status.HTTP_200_OK) + + + +# from rest_framework.views import APIView +# from rest_framework.response import Response +# from rest_framework import status +# from azbankgateways import bankfactories, models as bank_models + +# class PaymentView(APIView): +# def post(self, request): +# amount = request.data.get('amount') +# user = request.user + + +# payment = Payment.objects.create(amount=amount, bank_type='ZARINPAL') + + +# factory = bankfactories.ZarinpalBankFactory() +# try: +# bank = factory.create( +# amount=amount, +# user=user, +# callback_url='http://.com/callback/', +# reference_model=payment, +# ) +# bank.ready() +# return Response({'gateway_url': bank.redirect_url}, status=status.HTTP_200_OK) +# except Exception as e: +# return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST) + + + +# from django.views.decorators.csrf import csrf_exempt +# from rest_framework.decorators import api_view +# from rest_framework.response import Response +# from azbankgateways import bankfactories, models as bank_models + +# @csrf_exempt +# @api_view(['POST']) +# def callback_view(request): +# tracking_code = request.POST.get('tracking_code') +# payment_id = request.POST.get('payment_id') + +# payment = Payment.objects.get(id=payment_id) +# bank_type = payment.bank_type + + +# factory = bankfactories.BankFactory.get_bank(bank_type) +# try: +# result = factory.verify_transaction(tracking_code) +# if result.is_success: +# payment.status = 'Paid' +# payment.tracking_code = tracking_code +# payment.save() +# return Response({'status': 'Payment successful'}) +# else: +# payment.status = 'Failed' +# payment.save() +# return Response({'status': 'Payment failed'}) +# except Exception as e: +# return Response({'error': str(e)}) \ No newline at end of file