mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 06:03:20 +00:00
Hotfix: better handle atomicity in eboutic basket validation
This commit is contained in:
parent
9f4f3bf436
commit
11c263b6e7
@ -9,6 +9,7 @@ from django.shortcuts import render
|
|||||||
from django.core.urlresolvers import reverse_lazy
|
from django.core.urlresolvers import reverse_lazy
|
||||||
from django.views.generic import TemplateView, View
|
from django.views.generic import TemplateView, View
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
|
from django.core.exceptions import SuspiciousOperation
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.db import transaction, DataError
|
from django.db import transaction, DataError
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
@ -177,20 +178,23 @@ class EtransactionAutoAnswer(View):
|
|||||||
except:
|
except:
|
||||||
return HttpResponse("Bad signature", status=400)
|
return HttpResponse("Bad signature", status=400)
|
||||||
if request.GET['Error'] == "00000":
|
if request.GET['Error'] == "00000":
|
||||||
with transaction.atomic():
|
try:
|
||||||
b = Basket.objects.filter(id=request.GET['BasketID']).first()
|
with transaction.atomic():
|
||||||
if b is None:
|
b = Basket.objects.filter(id=request.GET['BasketID']).first()
|
||||||
return HttpResponse("Basket does not exists", status=400)
|
if b is None:
|
||||||
i = Invoice()
|
raise SuspiciousOperation("Basket does not exists")
|
||||||
i.user = b.user
|
i = Invoice()
|
||||||
i.payment_method = "CARD"
|
i.user = b.user
|
||||||
i.save()
|
i.payment_method = "CARD"
|
||||||
for it in b.items.all():
|
i.save()
|
||||||
InvoiceItem(invoice=i, product_id=it.product_id, product_name=it.product_name, type_id=it.type_id,
|
for it in b.items.all():
|
||||||
product_unit_price=it.product_unit_price, quantity=it.quantity).save()
|
InvoiceItem(invoice=i, product_id=it.product_id, product_name=it.product_name, type_id=it.type_id,
|
||||||
i.validate()
|
product_unit_price=it.product_unit_price, quantity=it.quantity).save()
|
||||||
b.delete()
|
i.validate()
|
||||||
|
b.delete()
|
||||||
|
except Exception as e:
|
||||||
|
return HttpResponse("Payment failed with error: "+repr(e), status=400)
|
||||||
return HttpResponse()
|
return HttpResponse()
|
||||||
else:
|
else:
|
||||||
return HttpResponse("Payment failed with error: "+request.GET['Error'])
|
return HttpResponse("Payment failed with error: "+request.GET['Error'], status=400)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user