first cart buy

This commit is contained in:
Martin Quarda 2024-10-14 10:09:18 +02:00
parent 5f350b43c4
commit f2dc359c8e
3 changed files with 66 additions and 3 deletions

View File

@ -24,7 +24,7 @@ from alkatorapi.views import (
invoice, upload_files,
login_status, change_racer,
products, cart_add, cart, cart_delete,
cart_decrease,
cart_decrease, cart_buy
)
urlpatterns = [
@ -35,7 +35,6 @@ urlpatterns = [
path('api/login_status', login_status),
path('api/logout', logout),
path('api/change_racer', change_racer),
#path('api/register', register),
path('api/results', results),
path('api/photos', photos),
path('api/payment_result', payment_result),
@ -47,4 +46,5 @@ urlpatterns = [
path('api/cart', cart),
path('api/cart/delete', cart_delete),
path('api/cart/decrease', cart_decrease),
path('api/cart/buy', cart_buy)
]

View File

@ -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.core.mail import send_mail, mail_admins, EmailMessage
from django.db.utils import IntegrityError
from django.db import transaction
from django.utils.datastructures import MultiValueDictKeyError
from datetime import date, datetime, timedelta
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)
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):
_id = request.GET['id']
user = request.user

View File

@ -338,7 +338,7 @@ class Main extends Component {
<td>Celkem</td>
<td></td>
<td>{this.calculateTotalPrice()} </td>
<td></td>
<td><form action='/api/cart/buy' onSubmit={(e) => this.onSubmit(e)}><button type="submit">Koupit</button></form></td>
</tr>
</tbody>
</table>