From 5c4a96afcc75717ce258f8bbf4538113b00ab188 Mon Sep 17 00:00:00 2001 From: Martin Quarda Date: Tue, 15 Oct 2024 16:40:42 +0200 Subject: [PATCH] complex_status --- alkator/urls.py | 3 ++- alkatorapi/models.py | 2 ++ alkatorapi/views.py | 11 +++++++++++ frontend/src/scripts/index.js | 26 +++----------------------- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/alkator/urls.py b/alkator/urls.py index 298041c..07a8b7c 100644 --- a/alkator/urls.py +++ b/alkator/urls.py @@ -25,7 +25,7 @@ from alkatorapi.views import ( login_status, change_racer, products, cart_add, cart, cart_delete, cart_decrease, cart_buy, select_delivery, - delivery, + delivery, complex_status ) urlpatterns = [ @@ -50,4 +50,5 @@ urlpatterns = [ path('api/cart/buy', cart_buy), path('api/cart/select_delivery', select_delivery), path('api/cart/delivery', delivery), + path('api/complex_status', complex_status), ] diff --git a/alkatorapi/models.py b/alkatorapi/models.py index 36221bc..ea86f73 100644 --- a/alkatorapi/models.py +++ b/alkatorapi/models.py @@ -90,6 +90,7 @@ class CartProduct(models.Model): quantity = models.IntegerField() def clean(self): + super(self).clean() data = self.cleaned_data if data['quantity'] <= 0: raise ValidationError("Počet předmětů v košíku musí být kladný!") @@ -136,6 +137,7 @@ class InvoiceProduct(models.Model): price = models.IntegerField(default=1) def clean(self): + super(self).clean() data = self.cleaned_data if data['quantity'] <= 0: raise ValidationError("Počet předmětů ve faktuře musí být kladný!") diff --git a/alkatorapi/views.py b/alkatorapi/views.py index 9ade74d..787d73c 100644 --- a/alkatorapi/views.py +++ b/alkatorapi/views.py @@ -395,6 +395,17 @@ def delivery(request): return HttpResponse("undefined", status=200, content_type='application/json') +def complex_status(request): + return HttpResponse(json.dumps({ + "products": products(request).content, + "cart": cart(request).content, + "results": results(request).content, + "delivery": delivery(request).content, + "photos": photos(request).content, + "login_status": login_status(request).content, + })) + + @csrf_exempt @transaction.atomic def cart_buy(request): diff --git a/frontend/src/scripts/index.js b/frontend/src/scripts/index.js index 237146f..c1839eb 100644 --- a/frontend/src/scripts/index.js +++ b/frontend/src/scripts/index.js @@ -35,27 +35,7 @@ class Main extends Component { cart: [], delivery: undefined, }; - fetch(addr_prefix + "/api/results").then(resp => resp.json()).then(json => { - this.setState({results: json}) - }) - fetch(addr_prefix + "/api/photos").then(resp => resp.json()).then(json => { - this.setState({photos: json}) - }) - fetch(addr_prefix + "/api/products").then(resp => resp.json()).then(json => { - this.setState({products: json}) - }) - fetch(addr_prefix + "/api/cart").then(resp => resp.json()).then(json => { - this.setState({cart: json}) - }) - fetch(addr_prefix + "/api/login_status").then(resp => resp.json()).then(json => { - this.setState({login_status: json}) - }) - fetch(addr_prefix + "/api/cart/delivery").then(resp => resp.json()).then(json => { - this.setState({ - cart: [...this.state.cart, {"name": "Doprava na " + json, "id": 2, "price": delivery_cost, "locked": true, "quantity": 1}], - delivery: json, - }) - }) + fetch(addr_prefix + "/api/complex_status").then(resp => resp.json()).then(json => this.setState(json)); if(window.location.search){ let searchParams = new URLSearchParams(window.location.search); for(const [key, value] of searchParams){ @@ -150,7 +130,7 @@ class Main extends Component { } onSubmit(event){ event.preventDefault(); - let form = document.getElementById("form"); + let form = event.target; let api_endpoint = form.action; let formData = new FormData(form); if(this.state.progress){ @@ -204,7 +184,7 @@ class Main extends Component { }; selectDeliveryCallback(point){ if(point){ - fetch(addr_prefix + '/api/cart/select_delivery?delivery=' + point.name).then(resp => resp.json()).then(json => { + fetch(addr_prefix + '/api/cart/select_delivery?delivery=' + encodeURIComponent(point.name)).then(resp => resp.json()).then(json => { if(json.status == "failed"){ this.setState({ status_text: json.reason,