Compare commits

..

No commits in common. "ba11c4114736990b630147436b150e89b0649fe8" and "ea3afa2507281dc69d727c3b258c52a4ceb1e909" have entirely different histories.

12 changed files with 19 additions and 117 deletions

View File

@ -25,8 +25,8 @@
## What has to be done ## What has to be done
- [x] Vehicle delete - [x] Vehicle delete
- [ ] intro tutorial when no car exist or just dont show anything - [ ] intro tutorial when no car exist or just dont show anything
- [x] change/set default car - [ ] change/set default car
- [x] hide errors - [ ] hide errors
## Nice to have ## Nice to have
- [ ] specific car view - charts, fuel records - [ ] specific car view - charts, fuel records

View File

@ -10,17 +10,21 @@ class DashboardController extends Controller {
$data = [ $data = [
"date" => [], "date" => [],
"price" => [], "price" => [],
"mileage" => [],
"liters" => []
]; ];
$raw_data = $refuel->latest_data($default_car['id'], 5); $raw_data = $refuel->latest_data($default_car['id'], 5);
foreach($raw_data as $one) { foreach($raw_data as $one) {
array_push($data['date'], date('d. m.', strtotime($one['created_at']))); array_push($data['date'], date('d. m.', strtotime($one['created_at'])));
array_push($data['price'], $one['price_per_liter']); array_push($data['price'], $one['price_per_liter']);
array_push($data['mileage'], $one['mileage']);
array_push($data['liters'], $one['liters']);
} }
$latest_record = [
'name',
'liters',
'price_per_liter',
'total_price',
'created_at'
];
$latest_record = $refuel->latest_one($_SESSION['user']['id'])[0]; $latest_record = $refuel->latest_one($_SESSION['user']['id'])[0];
$this->view('dashboard/index', [ $this->view('dashboard/index', [

View File

@ -18,7 +18,6 @@ class RefuelController extends Controller {
$liters = $_POST['liters'] ?? ''; $liters = $_POST['liters'] ?? '';
$price_per_liter = $_POST['price_per_liter'] ?? ''; $price_per_liter = $_POST['price_per_liter'] ?? '';
$total_price = $_POST['total_price'] ?? ''; $total_price = $_POST['total_price'] ?? '';
$mileage = $_POST['mileage'] ?? '';
$note = $_POST['note'] ?? ''; $note = $_POST['note'] ?? '';
$validator = new Validator(); $validator = new Validator();
@ -30,7 +29,6 @@ class RefuelController extends Controller {
$validator->number('liters', $liters); $validator->number('liters', $liters);
$validator->number('price_per_liter', $price_per_liter); $validator->number('price_per_liter', $price_per_liter);
$validator->number('total_price', $total_price); $validator->number('total_price', $total_price);
$validator->number('mileage', $mileage);
if (round($liters * $price_per_liter, 2) != $total_price) { if (round($liters * $price_per_liter, 2) != $total_price) {
$validator->setErrors(["total_price" => "Price calculation is wrong"]); $validator->setErrors(["total_price" => "Price calculation is wrong"]);
@ -59,7 +57,6 @@ class RefuelController extends Controller {
'liters' => $liters, 'liters' => $liters,
'price_per_liter' => $price_per_liter, 'price_per_liter' => $price_per_liter,
'total_price' => $total_price, 'total_price' => $total_price,
'mileage' => $mileage,
]); ]);
if ($result === true) { if ($result === true) {

View File

@ -75,18 +75,6 @@ class VehicleController extends Controller {
$this->view('vehicles/index', ['title' => 'Vehicles', 'vehicles' => $vehicles]); $this->view('vehicles/index', ['title' => 'Vehicles', 'vehicles' => $vehicles]);
} }
public function setDefault() {
$vehicle = new Vehicle();
// TODO: Validate the request
$result = $vehicle->setDefaultVehicle($_POST['vehicle_id'], $_SESSION['user']['id']);
if($result != true) {
echo "Something went wrong";
return;
}
$this->view('vehicles/index', ['title' => 'Vehicles', 'vehicles' => $vehicles]);
}
public function api_get() { public function api_get() {
if(!$_SERVER['REQUEST_METHOD'] === 'GET') { if(!$_SERVER['REQUEST_METHOD'] === 'GET') {
echo "Wrong method, use GET"; echo "Wrong method, use GET";

View File

@ -10,12 +10,12 @@ class Refuel {
public function create($data) { public function create($data) {
try{ try{
$stmt = $this->db->prepare(" $stmt = $this->db->prepare("
INSERT INTO refueling_records (user_id, vehicle_id, fuel_type, note, liters, price_per_liter, total_price, mileage, created_at) INSERT INTO refueling_records (user_id, vehicle_id, fuel_type, note, liters, price_per_liter, total_price, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW()) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())
"); ");
$stmt->bind_param( $stmt->bind_param(
"iissdddi", "iissddd",
$data['user_id'], $data['user_id'],
$data['vehicle_id'], $data['vehicle_id'],
$data['fuel_type'], $data['fuel_type'],
@ -23,7 +23,6 @@ class Refuel {
$data['liters'], $data['liters'],
$data['price_per_liter'], $data['price_per_liter'],
$data['total_price'], $data['total_price'],
$data['mileage'],
); );
if ($stmt->execute()) { if ($stmt->execute()) {
@ -39,7 +38,7 @@ class Refuel {
public function latest_data($vehicle_id, $record_count) { public function latest_data($vehicle_id, $record_count) {
try { try {
$stmt = $this->db->prepare(" $stmt = $this->db->prepare("
SELECT `liters`, `price_per_liter`, `total_price`, `mileage`, `created_at` SELECT `liters`, `price_per_liter`, `total_price`, `created_at`
FROM `refueling_records` FROM `refueling_records`
WHERE `vehicle_id` = ? WHERE `vehicle_id` = ?
ORDER BY created_at DESC ORDER BY created_at DESC
@ -69,7 +68,6 @@ class Refuel {
`r`.`liters`, `r`.`liters`,
`r`.`price_per_liter`, `r`.`price_per_liter`,
`r`.`total_price`, `r`.`total_price`,
`r`.`mileage`,
`r`.`created_at` `r`.`created_at`
FROM `refueling_records` AS `r` FROM `refueling_records` AS `r`
JOIN `vehicles` AS `v` ON `r`.`vehicle_id` = `v`.`id` JOIN `vehicles` AS `v` ON `r`.`vehicle_id` = `v`.`id`

View File

@ -61,39 +61,6 @@ class Vehicle {
return $result->fetch_assoc(); return $result->fetch_assoc();
} }
public function setDefaultVehicle($vehicle_id, $user_id) {
try {
$this->db->begin_transaction();
$stmt = $this->db->prepare("
UPDATE `vehicles`
SET `is_default` = 0
WHERE `user_id` = ? AND `is_default` = 1
");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$stmt->close();
$stmt = $this->db->prepare("
UPDATE `vehicles`
SET `is_default` = 1
WHERE `id` = ? AND `user_id` = ?
");
$stmt->bind_param("ii", $vehicle_id, $user_id);
if ($stmt->execute()) {
$this->db->commit();
return true;
} else {
$this->db->rollback();
return "Error: " . $stmt->error;
}
} catch (mysqli_sql_exception $e) {
$this->db->rollback();
return $e->getMessage();
}
}
public function delete($vehicle_id, $user_id) { public function delete($vehicle_id, $user_id) {
try { try {
$stmt = $this->db->prepare("SELECT id FROM vehicles WHERE id = ? AND user_id = ?"); $stmt = $this->db->prepare("SELECT id FROM vehicles WHERE id = ? AND user_id = ?");

View File

@ -23,8 +23,6 @@
<p><?= $data['latest_record']['price_per_liter'] ?>,-/liter</p> <p><?= $data['latest_record']['price_per_liter'] ?>,-/liter</p>
<b>Total price:</b> <b>Total price:</b>
<p><?= $data['latest_record']['total_price'] ?>,-</p> <p><?= $data['latest_record']['total_price'] ?>,-</p>
<b>Mileage:</b>
<p><?= $data['latest_record']['mileage'] ?> km</p>
</div> </div>
</section> </section>
@ -47,13 +45,6 @@
<p><?= $data['default_car']['name'] . " | " . $data['default_car']['registration_plate']?></p> <p><?= $data['default_car']['name'] . " | " . $data['default_car']['registration_plate']?></p>
<canvas id="chart-gas-price"></canvas> <canvas id="chart-gas-price"></canvas>
</section> </section>
<section class="card history-graph">
<h2>Average fuel consumption</h2>
<hr>
<p><?= $data['default_car']['name'] . " | " . $data['default_car']['registration_plate']?></p>
<b id="avg-fl-cnsmp"></b>
</section>
</div> </div>
</section> </section>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
@ -73,28 +64,4 @@
}, },
}); });
</script> </script>
<script>
const data2 = <?= json_encode($data['date_price_data']); ?>;
let cnt_ltr = 0
let cnt_km = 0
let first_km = 0
console.log(data2)
for(let i = 0; i < data2['liters'].length; i++) {
if(i == 0) {
first_km = data2['mileage'][i]
}
cnt_ltr += data2['liters'][i]
cnt_km =+ data2['mileage'][i]
}
console.log("Liters", cnt_ltr, cnt_km, first_km)
console.log("Avg", (cnt_km - first_km) / cnt_ltr)
document.querySelector("#avg-fl-cnsmp").textContent = Math.floor((cnt_km - first_km) / cnt_ltr) + " l/100km"
</script>
<script defer src="/js/offline-records.js"></script> <script defer src="/js/offline-records.js"></script>

View File

@ -52,12 +52,6 @@
<small class="error"><?= $this->get('validationErrors')['total_price'] ?></small> <small class="error"><?= $this->get('validationErrors')['total_price'] ?></small>
<?php endif; ?> <?php endif; ?>
<label for="mileage">Mileage</label>
<input type="number" name="mileage" id="mileage" min="0" step="1" value="<?= htmlspecialchars($_POST['mileage'] ?? '0') ?>">
<?php if (isset($this->get('validationErrors')['mileage'])): ?>
<small class="error"><?= $this->get('validationErrors')['mileage'] ?></small>
<?php endif; ?>
<label for="note">Note</label> <label for="note">Note</label>
<input type="text" name="note" id="note" value="<?= htmlspecialchars($_POST['note'] ?? '') ?>"> <input type="text" name="note" id="note" value="<?= htmlspecialchars($_POST['note'] ?? '') ?>">
<?php if (isset($this->get('validationErrors')['note'])): ?> <?php if (isset($this->get('validationErrors')['note'])): ?>

View File

@ -14,15 +14,10 @@
<p><?= htmlspecialchars($vehicle['fuel_type']) ?></p> <p><?= htmlspecialchars($vehicle['fuel_type']) ?></p>
<p><?= htmlspecialchars($vehicle['note'] ?? "") ?></p> <p><?= htmlspecialchars($vehicle['note'] ?? "") ?></p>
<div class="actions"> <div class="actions">
<form method="POST" action="/vehicles/delete"> <form method="POST" action="/vehicles/delete">
<input type="number" name="vehicle_id" value="<?= $vehicle['id'] ?>" style="display: none"> <input type="number" name="vehicle_id" value="<?= $vehicle['id'] ?>" style="display: none">
<input type="submit" value="Delete vehicle" class="btn-danger"> <input type="submit" value="Delete vehicle" class="btn-danger">
</form> </form>
<form method="POST" action="/vehicles/default">
<input type="number" name="vehicle_id" value="<?= $vehicle['id'] ?>" style="display: none">
<input type="submit" value="Set default" class="btn-primary">
</form>
</div> </div>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>

View File

@ -63,6 +63,7 @@ class Database {
username VARCHAR(50) NOT NULL, username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL,
points INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;"; ) ENGINE=InnoDB;";
@ -98,7 +99,6 @@ class Database {
liters DOUBLE(10, 2) NOT NULL, liters DOUBLE(10, 2) NOT NULL,
price_per_liter DOUBLE(10, 2) NOT NULL, price_per_liter DOUBLE(10, 2) NOT NULL,
total_price DOUBLE(10, 2) NOT NULL, total_price DOUBLE(10, 2) NOT NULL,
mileage INT UNSIGNED NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE CASCADE, FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE

View File

@ -47,7 +47,6 @@ $router->group('/vehicles', ['RequireAuth'], function ($router) {
$router->add('/create', 'VehicleController@create'); $router->add('/create', 'VehicleController@create');
$router->add('/edit/{id}', 'VehicleController@edit'); $router->add('/edit/{id}', 'VehicleController@edit');
$router->add('/delete', 'VehicleController@delete'); $router->add('/delete', 'VehicleController@delete');
$router->add('/default', 'VehicleController@setDefault');
}); });
$router->group('/refuel', ['RequireAuth'], function ($router) { $router->group('/refuel', ['RequireAuth'], function ($router) {

View File

@ -204,12 +204,6 @@ btnOffline.addEventListener("click", async (e) => {
<!-- <small class="error"><?= $this->get('validationErrors')['total_price'] ?></small> --> <!-- <small class="error"><?= $this->get('validationErrors')['total_price'] ?></small> -->
<!-- <?php endif; ?> --> <!-- <?php endif; ?> -->
<label for="mileage">Mileage</label>
<input type="number" name="mileage" id="mileage" min="0" step="1" value="0">
<!-- <?php if (isset($this->get('validationErrors')['mileage'])): ?> -->
<!-- <small class="error"><?= $this->get('validationErrors')['mileage'] ?></small> -->
<!-- <?php endif; ?> -->
<label for="note">Note</label> <label for="note">Note</label>
<input type="text" name="note" id="note"> <input type="text" name="note" id="note">
<!-- <?php if (isset($this->get('validationErrors')['note'])): ?> --> <!-- <?php if (isset($this->get('validationErrors')['note'])): ?> -->
@ -235,7 +229,6 @@ btnOffline.addEventListener("click", async (e) => {
total_price: document.querySelector( total_price: document.querySelector(
"form#offline_refuel_add #total_price", "form#offline_refuel_add #total_price",
).value, ).value,
mileage: document.querySelector("form#offline_refuel_add #mileage").value,
note: document.querySelector("form#offline_refuel_add #note").value, note: document.querySelector("form#offline_refuel_add #note").value,
}; };