diff --git a/app/controllers/RefuelController.php b/app/controllers/RefuelController.php index 5b2e439..ffd8e64 100644 --- a/app/controllers/RefuelController.php +++ b/app/controllers/RefuelController.php @@ -46,6 +46,7 @@ class RefuelController extends Controller { 'validationErrors' => $validator->errors() ?: [], 'vehicles' => $vehicles, 'title' => 'New refuel record', + 'status' => '400' ]); return; } diff --git a/core/View.php b/core/View.php index 03a79ed..56c2337 100644 --- a/core/View.php +++ b/core/View.php @@ -7,6 +7,11 @@ class View // Store the data $this->data = $data; + // check for status code in data + if(isset($this->data['status'])){ + http_response_code($this->data['status']); + } + // Capture the view content ob_start(); require_once views . $view . '.php'; diff --git a/public/js/offline-records.js b/public/js/offline-records.js index fbadaa1..3eb1d1f 100644 --- a/public/js/offline-records.js +++ b/public/js/offline-records.js @@ -45,11 +45,15 @@ setInterval(async () => { showDashboard(); }); } + } - if (localStorage.getItem("refuelOfflineData")) { - btnOffline.textContent = "Sync data"; - btnOffline.setAttribute("disabled", "disabled"); - } + if (localStorage.getItem("refuelOfflineData")) { + Array.from(divActions.children).forEach( + (el) => (el.style.display = "none"), + ); + btnOffline.style.display = "block"; + btnOffline.textContent = "Sync data"; + btnOffline.setAttribute("disabled", "disabled"); } if (isOnline && !visible) { @@ -107,7 +111,18 @@ btnOffline.addEventListener("click", async (e) => { }); if (!res.ok) { - throw new Error(`Server error: ${res.statusText}`); + if (res.status == 400) { + const html = await res.text(); + + document.open(); + document.write(html); + document.close(); + + localStorage.removeItem("refuelOfflineData"); + return; + } else { + throw new Error(`Server error: ${res.statusText}`); + } } localStorage.removeItem("refuelOfflineData"); @@ -150,11 +165,6 @@ btnOffline.addEventListener("click", async (e) => {

Create offline record

- - - - -
- - - - - - - - - + - - - + - - - + - - - + - - - +
`; document.querySelector("main").appendChild(offline); + + const inp_lit = document.querySelector("input#liters"); + const inp_ppl = document.querySelector("input#price_per_liter"); + const inp_tot = document.querySelector("input#total_price"); + + const rnd = (num) => Math.round((num + Number.EPSILON) * 100) / 100; + + function calculate() { + let liters = Number(inp_lit.value); + let price_per_liter = Number(inp_ppl.value); + let total_price = Number(inp_tot.value); + + if (price_per_liter > 0 && liters > 0) { + total_price = rnd(liters * price_per_liter); + } + + if (price_per_liter > 0 && total_price > 0) { + liters = rnd(total_price / price_per_liter); + } + + if (liters > 0 && total_price > 0) { + price_per_liter = rnd(total_price / liters); + } + + inp_lit.value = liters; + inp_ppl.value = price_per_liter; + inp_tot.value = total_price; + } + + [inp_lit, inp_ppl, inp_tot].forEach((inp) => { + inp.addEventListener("change", () => { + calculate(); + }); + }); + const btnSubmit = document.querySelector("#btn-offline-submit"); btnSubmit.addEventListener("click", (e) => { e.preventDefault();