first cart buy
This commit is contained in:
parent
5f350b43c4
commit
f2dc359c8e
@ -24,7 +24,7 @@ from alkatorapi.views import (
|
|||||||
invoice, upload_files,
|
invoice, upload_files,
|
||||||
login_status, change_racer,
|
login_status, change_racer,
|
||||||
products, cart_add, cart, cart_delete,
|
products, cart_add, cart, cart_delete,
|
||||||
cart_decrease,
|
cart_decrease, cart_buy
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@ -35,7 +35,6 @@ urlpatterns = [
|
|||||||
path('api/login_status', login_status),
|
path('api/login_status', login_status),
|
||||||
path('api/logout', logout),
|
path('api/logout', logout),
|
||||||
path('api/change_racer', change_racer),
|
path('api/change_racer', change_racer),
|
||||||
#path('api/register', register),
|
|
||||||
path('api/results', results),
|
path('api/results', results),
|
||||||
path('api/photos', photos),
|
path('api/photos', photos),
|
||||||
path('api/payment_result', payment_result),
|
path('api/payment_result', payment_result),
|
||||||
@ -47,4 +46,5 @@ urlpatterns = [
|
|||||||
path('api/cart', cart),
|
path('api/cart', cart),
|
||||||
path('api/cart/delete', cart_delete),
|
path('api/cart/delete', cart_delete),
|
||||||
path('api/cart/decrease', cart_decrease),
|
path('api/cart/decrease', cart_decrease),
|
||||||
|
path('api/cart/buy', cart_buy)
|
||||||
]
|
]
|
||||||
|
@ -9,6 +9,7 @@ from django.contrib.auth import authenticate
|
|||||||
from django.contrib.auth import login as auth_login, logout as auth_logout
|
from django.contrib.auth import login as auth_login, logout as auth_logout
|
||||||
from django.core.mail import send_mail, mail_admins, EmailMessage
|
from django.core.mail import send_mail, mail_admins, EmailMessage
|
||||||
from django.db.utils import IntegrityError
|
from django.db.utils import IntegrityError
|
||||||
|
from django.db import transaction
|
||||||
from django.utils.datastructures import MultiValueDictKeyError
|
from django.utils.datastructures import MultiValueDictKeyError
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from weasyprint import HTML
|
from weasyprint import HTML
|
||||||
@ -374,6 +375,68 @@ def cart_add(request):
|
|||||||
return HttpResponse('{"status":"success", "reason":"Úspěšně přidáno do košíku."}', status=200)
|
return HttpResponse('{"status":"success", "reason":"Úspěšně přidáno do košíku."}', status=200)
|
||||||
|
|
||||||
|
|
||||||
|
def select_delivery(request):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
@transaction.atomic
|
||||||
|
def cart_buy(request):
|
||||||
|
cart = request.user.cart
|
||||||
|
user = request.user
|
||||||
|
profile = user.profile
|
||||||
|
cart_products = CartProduct.objects.filter(cart=cart)
|
||||||
|
|
||||||
|
for cp in cart_products:
|
||||||
|
if cp.quantity > cp.product.quantity:
|
||||||
|
return HttpResponse('{"status": "failed", "reason": "Nemáme dostatek ' + cp.product.name + ' na skladě!"}', status=400)
|
||||||
|
|
||||||
|
invoice = Invoice(
|
||||||
|
user=user,
|
||||||
|
address=user.profile.address,
|
||||||
|
invoice_id=Invoice.next_invoice_id()
|
||||||
|
)
|
||||||
|
invoice.save()
|
||||||
|
|
||||||
|
for cp in cart_products:
|
||||||
|
ip = InvoiceProduct(
|
||||||
|
invoice=invoice,
|
||||||
|
price=cp.product.price,
|
||||||
|
quantity=cp.quantity,
|
||||||
|
product=cp.product,
|
||||||
|
)
|
||||||
|
cp.product.quantity -= cp.quantity
|
||||||
|
cp.product.save()
|
||||||
|
ip.save()
|
||||||
|
|
||||||
|
payment_data = {
|
||||||
|
'merchant': COMGATE_MERCHANT,
|
||||||
|
'test': 'true' if COMGATE_TEST else 'false',
|
||||||
|
'price': invoice.calculate_total_price() * 100,
|
||||||
|
'curr': 'CZK',
|
||||||
|
'method': 'ALL',
|
||||||
|
'label': 'Merch Alkátor Race',
|
||||||
|
'email': user.email,
|
||||||
|
'fullName': f"{profile.first_name} {profile.last_name}",
|
||||||
|
'refId': f'{invoice.invoice_id}',
|
||||||
|
'secret': COMGATE_SECRET,
|
||||||
|
'prepareOnly': 'true',
|
||||||
|
}
|
||||||
|
result = requests.post('https://payments.comgate.cz/v1.0/create', data=payment_data)
|
||||||
|
|
||||||
|
result = parse_qs(result.text)
|
||||||
|
|
||||||
|
if result['code'][0] != '0':
|
||||||
|
racer.delete()
|
||||||
|
invoice.delete()
|
||||||
|
return HttpResponse('{"reason":"Chyba na straně platební brány: ' + result['message'][0] + ', zkuste prosím nákup později."}', status=400, content_type='application/json')
|
||||||
|
|
||||||
|
invoice.trans_id = result['transId'][0]
|
||||||
|
invoice.save()
|
||||||
|
|
||||||
|
return HttpResponse('{"success":"", "redirect":"' + result['redirect'][0] + '"}', content_type='application/json')
|
||||||
|
|
||||||
|
|
||||||
def cart_delete(request):
|
def cart_delete(request):
|
||||||
_id = request.GET['id']
|
_id = request.GET['id']
|
||||||
user = request.user
|
user = request.user
|
||||||
|
@ -338,7 +338,7 @@ class Main extends Component {
|
|||||||
<td>Celkem</td>
|
<td>Celkem</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>{this.calculateTotalPrice()} Kč</td>
|
<td>{this.calculateTotalPrice()} Kč</td>
|
||||||
<td></td>
|
<td><form action='/api/cart/buy' onSubmit={(e) => this.onSubmit(e)}><button type="submit">Koupit</button></form></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user