Skip to content

Commit

Permalink
Added peridic task celery
Browse files Browse the repository at this point in the history
  • Loading branch information
Suryansh5545 committed Aug 5, 2023
1 parent 0687923 commit 011ba46
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 24 deletions.
27 changes: 27 additions & 0 deletions apps/transactions/tasks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import razorpay
from celery import shared_task
from .models import Transaction
from ticket.models import Ticket
from django.conf import settings
from ticket.utils import generate_ticket_image

client = razorpay.Client(auth=(settings.RAZORPAY_KEY, settings.RAZORPAY_SECRET))

@shared_task
def check_all_transaction_status():
transactions = Transaction.objects.all
for transaction in transactions:
payment = client.payment.fetch(transaction.order_id)
if payment["status"] != transaction.payment_status:
transaction.payment_status = payment["status"]
transaction.save()
ticket = Ticket.objects.get(transaction_id=transaction)
if ticket.is_active == False and transaction.payment_status == "captured":
ticket.is_active = True
if ticket.ticket_image_generated == False:
generate_ticket_image(ticket)
ticket.save()
elif ticket.is_active == True and transaction.payment_status != "captured":
ticket.is_active = False
ticket.save()

21 changes: 21 additions & 0 deletions apps/transactions/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from event.models import Event, SubEvent, Addon


def HandlePriceCalculation(request):
event_id = request.data.get('event_id')
selected_sub_events = request.data.get('selected_sub_events', []),
selected_addons = request.data.get('selected_addons', [])
total_sub_event_allowed = Event.objects.get(pk=event_id).sub_events_included_allowed
sub_event_count = 0
sub_event_price = 0
addon_price = 0
for sub_event in selected_sub_events[0]:
if sub_event_count < total_sub_event_allowed:
sub_event_count += 1
else:
sub_event_price += SubEvent.objects.get(pk=sub_event).price
for addon in selected_addons:
addon_price += Addon.objects.get(pk=addon).price
event_price = Event.objects.get(pk=event_id).price
total_price = event_price + sub_event_price + addon_price
return int(total_price)
26 changes: 3 additions & 23 deletions apps/transactions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
from .models import Transaction
from ticket.utils import create_ticket, generate_ticket_image
from ticket.models import Ticket
from event.models import Event, SubEvent, Addon
from django.http import HttpResponse
import os, razorpay, json
from base.utils import EmailService
from .utils import HandlePriceCalculation


client = razorpay.Client(auth=(os.environ.get("RAZORPAY_KEY"), os.environ.get("RAZORPAY_SECRET")))
client = razorpay.Client(auth=(settings.RAZORPAY_KEY, settings.RAZORPAY_SECRET))

class HandlePayment(APIView):
def post(self, request):
Expand Down Expand Up @@ -55,33 +55,13 @@ def post(self, request):
"payment_id": order['id'],
"amount": order['amount'],
"currency": order['currency'],
"id": (os.environ.get("RAZORPAY_KEY")),
"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 Response(return_data, status=status.HTTP_200_OK)


def HandlePriceCalculation(request):
event_id = request.data.get('event_id')
selected_sub_events = request.data.get('selected_sub_events', []),
selected_addons = request.data.get('selected_addons', [])
total_sub_event_allowed = Event.objects.get(pk=event_id).sub_events_included_allowed
sub_event_count = 0
sub_event_price = 0
addon_price = 0
for sub_event in selected_sub_events[0]:
if sub_event_count < total_sub_event_allowed:
sub_event_count += 1
else:
sub_event_price += SubEvent.objects.get(pk=sub_event).price
for addon in selected_addons:
addon_price += Addon.objects.get(pk=addon).price
event_price = Event.objects.get(pk=event_id).price
total_price = event_price + sub_event_price + addon_price
return int(total_price)


class HandlePaymentSuccess(APIView):
def post(self, request):
razorpay_payment_id = request.data.get('razorpay_payment_id')
Expand Down
6 changes: 5 additions & 1 deletion settings/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,4 +191,8 @@

HOSTNAME = os.environ.get("HOSTNAME", "localhost:8000")

FRONTEND_URL = os.environ.get("FRONTEND_URL", "localhost:4200")
FRONTEND_URL = os.environ.get("FRONTEND_URL", "localhost:4200")

# Razorpay settings
RAZORPAY_KEY = os.environ.get("RAZORPAY_KEY", "")
RAZORPAY_SECRET = os.environ.get("RAZORPAY_SECRET", "")
8 changes: 8 additions & 0 deletions ticketify/celery.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
# should have a `CELERY_` prefix.
app.config_from_object("django.conf:settings", namespace='CELERY')

# Celery Periodic Tasks
app.conf.beat_schedule = {
'check-all-transaction-status': {
'task': 'transactions.tasks.check_all_transaction_status',
'schedule': 1800.0, # 30 minutes
},
}

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

Expand Down

0 comments on commit 011ba46

Please sign in to comment.