Skip to content

Commit

Permalink
Add aggregator field and fix bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Suryansh5545 committed Aug 13, 2023
1 parent 53e8a4f commit 5ae721b
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 36 deletions.
2 changes: 2 additions & 0 deletions apps/event/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.db import models
from transactions.models import PaymentAggregator


class Event(models.Model):
Expand All @@ -12,6 +13,7 @@ class Event(models.Model):
sub_events_included_allowed = models.IntegerField(default=0)
is_active = models.BooleanField(default=False)
event_page = models.URLField(max_length=200, blank=True)
payment_gateway = models.ForeignKey(PaymentAggregator, default="razorpay", on_delete=models.SET_DEFAULT)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

Expand Down
2 changes: 1 addition & 1 deletion apps/ticket/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def post(self, request):
ticket_id = request.data.get('ticket_id')
if not ticket_id:
return Response({"message": "ticket_id is required"}, status=status.HTTP_400_BAD_REQUEST)
operator = request.user.id
operator = request.user.name
if len(ticket_id) == 10:
method = "QR"
else:
Expand Down
21 changes: 21 additions & 0 deletions apps/transactions/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


class Transaction(models.Model):
PaymentAggregator = models.ForeignKey('transactions.PaymentAggregator', on_delete=models.CASCADE)
payment_method = models.CharField(max_length=100, blank=True)
payment_status = models.CharField(max_length=100)
order_id = models.CharField(max_length=100, default="")
Expand All @@ -18,3 +19,23 @@ class Meta:

def __str__(self):
return self.order_id


class PaymentAggregator(models.Model):
options = (
('razorpay', 'Razorpay'),
('paytm', 'Paytm'),
('phonepe', 'Phonepe'),
('zaakpay', 'Zaakpay'),
)
name = models.CharField(max_length=100, choices=options)
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

class Meta:
db_table = "payment_aggregator"
ordering = ["-id"]

def __str__(self):
return self.name
49 changes: 48 additions & 1 deletion apps/transactions/utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
from event.models import Event, SubEvent, Addon, PromoCode
import os, razorpay, json
from transactions.models import Transaction
from ticket.utils import create_ticket
from base.utils import get_url_from_hostname
from django.conf import settings
from rest_framework.response import Response
from rest_framework import status


def HandlePriceCalculation(request):
Expand Down Expand Up @@ -27,4 +34,44 @@ def HandlePriceCalculation(request):
if promocode:
if (total_price- promocode.discount) < 0:
total_price = total_price - promocode.discount
return int(total_price)
return int(total_price)


def payment_gateway(request):
Total_amount = HandlePriceCalculation(request)
data = {
"amount": Total_amount * 100,
"currency": "INR",
"notes": {
"name": request.data.get('customer_name'),
"email": request.data.get('customer_email'),
"phone": request.data.get('customer_phone'),
"referral": request.data.get('referral'),
"event_id": request.data.get('event_id'),
"selected_sub_events": json.dumps(request.data.get('selected_sub_events')),
"selected_addons": json.dumps(request.data.get('selected_addons'))
}
}

event = Event.objects.get(pk=request.data.get('event_id'))
if event.payment_gateway.name == "razorpay":
client = razorpay.Client(auth=(settings.RAZORPAY_KEY, settings.RAZORPAY_SECRET))
order = client.order.create(data=data)
if "error" in order:
return Response({"message": "Backend Error"}, status=status.HTTP_400_BAD_REQUEST)
else:
Transaction.objects.create(payment_status="created",
order_id=order['id'],
payment_amount=order['amount']/100,
payment_currency=order['currency'])
create_ticket(request, order['id'])
payment_info = {"message": "Order Created",
"payment_id": order['id'],
"amount": order['amount'],
"currency": order['currency'],
"id": settings.RAZORPAY_KEY,
"Business": "JKLU",
"callback_url": get_url_from_hostname(settings.HOSTNAME) + "/api/transactions/handle-payment-success/",
"image": "https://sabrang.jklu.edu.in/wp-content/uploads/2022/10/sabrang-cover-text-e1664621537950.png"}

return payment_info
36 changes: 3 additions & 33 deletions apps/transactions/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from base.utils import get_url_from_hostname
from django.shortcuts import redirect, render
from django.shortcuts import redirect
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
Expand All @@ -10,7 +10,7 @@
from django.http import HttpResponse
import os, razorpay, json
from base.utils import EmailService
from .utils import HandlePriceCalculation
from .utils import payment_gateway


client = razorpay.Client(auth=(settings.RAZORPAY_KEY, settings.RAZORPAY_SECRET))
Expand All @@ -28,37 +28,7 @@ def post(self, request):
else:
return Response({"message": "Payment failed"}, status=status.HTTP_400_BAD_REQUEST)
else:
Total_amount = HandlePriceCalculation(request)
data = {
"amount": Total_amount * 100,
"currency": "INR",
"notes": {
"name": request.data.get('customer_name'),
"email": request.data.get('customer_email'),
"phone": request.data.get('customer_phone'),
"referral": request.data.get('referral'),
"event_id": request.data.get('event_id'),
"selected_sub_events": json.dumps(request.data.get('selected_sub_events')),
"selected_addons": json.dumps(request.data.get('selected_addons'))
}
}
order = client.order.create(data=data)
if "error" in order:
return Response({"message": "Backend Error"}, status=status.HTTP_400_BAD_REQUEST)
else:
Transaction.objects.create(payment_status="created",
order_id=order['id'],
payment_amount=order['amount']/100,
payment_currency=order['currency'])
create_ticket(request, order['id'])
return_data = {"message": "Order Created",
"payment_id": order['id'],
"amount": order['amount'],
"currency": order['currency'],
"id": settings.RAZORPAY_KEY,
"Business": "JKLU",
"callback_url": get_url_from_hostname(settings.HOSTNAME) + "/api/transactions/handle-payment-success/",
"image": "https://sabrang.jklu.edu.in/wp-content/uploads/2022/10/sabrang-cover-text-e1664621537950.png"}
return_data = payment_gateway(request)
return Response(return_data, status=status.HTTP_200_OK)


Expand Down
5 changes: 4 additions & 1 deletion requirements/common.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ hiredis==2.2.3
dj-rest-auth==4.0.1
djangorestframework-simplejwt==5.2.2
django-storages==1.13.2
paramiko==3.3.1
paramiko==3.3.1

--extra-index-url https://phonepe.mycloudrepo.io/public/repositories/phonepe-pg-sdk-python
phonepe_sdk==0.0.2

0 comments on commit 5ae721b

Please sign in to comment.