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, 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)
] ]

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.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

View File

@ -338,7 +338,7 @@ class Main extends Component {
<td>Celkem</td> <td>Celkem</td>
<td></td> <td></td>
<td>{this.calculateTotalPrice()} </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> </tr>
</tbody> </tbody>
</table> </table>