Skip to content

Commit

Permalink
fixed dublication payment error
Browse files Browse the repository at this point in the history
  • Loading branch information
umer farooq committed Jan 28, 2021
1 parent de6ae2d commit f05b28f
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2021-01-27 13:22
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('catalogue', '0036_coupon_notify_email_attribute'),
('basket', '0012_basketchallanvoucher'),
]

operations = [
migrations.AddField(
model_name='basketchallanvoucher',
name='product',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='catalogue.Product', verbose_name='Product'),
),
]
8 changes: 8 additions & 0 deletions ecommerce/extensions/basket/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,15 @@ class Meta(object):


class BasketChallanVoucher(TimeStampedModel):
"""
Used to record the challan form created for a lumsxpay payment processor,
voucher is created through lumsx payment API and its code is stored in voucher__number
cron job is run over certain time that will update the pending orders.
model used in payment > views > lumsxpay view
"""
basket = models.ForeignKey('basket.Basket', verbose_name=_("Basket"), on_delete=models.CASCADE)
product = models.ForeignKey('catalogue.Product', verbose_name=_("Product"), null=True)
voucher_number = models.CharField(max_length=32, unique=True)
is_paid = models.BooleanField(default=False, null=False)
due_date = models.DateTimeField(null=False)

36 changes: 16 additions & 20 deletions ecommerce/extensions/payment/views/lumsxpay.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,11 @@ def extract_items_from_basket(self, basket):
for l in basket.all_lines()
]

def get_existing_basket(self, request):
courses = [i['id'] for i in self.extract_items_from_basket(request.basket)]
course_ids = []
def get_existing_basket_challan(self, request):
basket = request.basket
product = basket.lines.first().product

for course in courses:
product = Product.objects.filter(structure='child', course_id=course).first()
if product:
course_ids.append(product.id)

return Basket.objects.filter(owner_id=request.user, lines__product_id__in=course_ids).first()
return BasketChallanVoucher.objects.filter(basket=basket, product=product)

def get_due_date(self, configuration_helpers):
due_date_span_in_weeks = configuration_helpers.get('PAYMENT_DUE_DATE_SPAN', 52)
Expand All @@ -79,11 +74,9 @@ def fetch_context(self, request, response, configuration_helpers):
"support_email": request.site.siteconfiguration.payment_support_email,
}

def request_already_existing_challan(self, request):
challan_basket = BasketChallanVoucher.objects.filter(basket=self.get_existing_basket(request)).first()

def request_existing_challan_context(self, request, basket_challan):
configuration_helpers = request.site.siteconfiguration.edly_client_theme_branding_settings
url = '{}/{}'.format(configuration_helpers.get('LUMSXPAY_VOUCHER_API_URL'), challan_basket.voucher_number)
url = '{}/{}'.format(configuration_helpers.get('LUMSXPAY_VOUCHER_API_URL'), basket_challan.voucher_number)
headers = {
"Authorization": configuration_helpers.get('PAYMENT_AUTHORIZATION_KEY'),
"Content-Type": "application/json"
Expand All @@ -96,10 +89,11 @@ def request_already_existing_challan(self, request):
return {}

def get(self, request):
basket = request.basket
configuration_helpers = request.site.siteconfiguration.edly_client_theme_branding_settings
url = configuration_helpers.get('LUMSXPAY_VOUCHER_API_URL')

if request.user.is_anonymous or not (url and request.basket):
if request.user.is_anonymous or not (url and basket):
msg = 'user is anonymous cannot proceed to checkout page so redirecting to login. '
logger.info(msg)

Expand All @@ -109,19 +103,20 @@ def get(self, request):

return redirect_to_login(get_lms_dashboard_url)

if BasketChallanVoucher.objects.filter(basket=self.get_existing_basket(request)).exists():
context = self.request_already_existing_challan(request)
existing_basket_challan = self.get_existing_basket_challan(request)
if existing_basket_challan.exists():
context = self.request_existing_challan_context(request, existing_basket_challan.first())
if not context:
logger.exception('challan status API not working, no context found')
return HttpResponseNotFound()

return render_to_response('payment/lumsxpay.html', context)

items = self.extract_items_from_basket(request.basket)
items = self.extract_items_from_basket(basket)
payload = {
"name": request.user.username,
"email": request.user.email,
"order_id": request.basket.order_number,
"order_id": basket.order_number,
"items": items,
"due_date": self.get_due_date(configuration_helpers)
}
Expand All @@ -145,10 +140,11 @@ def get(self, request):
due_date = voucher_details['data']['due_date']

_, created = BasketChallanVoucher.objects.get_or_create(
basket=request.basket,
basket=basket,
voucher_number=voucher_number,
due_date=due_date,
is_paid=False
is_paid=False,
product=basket.lines.first().product
)

if created:
Expand Down

0 comments on commit f05b28f

Please sign in to comment.