Added: mileage, average fuel consumption
All checks were successful
Build and Deploy Zola Website / build_and_deploy (push) Successful in 12s
All checks were successful
Build and Deploy Zola Website / build_and_deploy (push) Successful in 12s
This commit is contained in:
parent
64c7fd15a1
commit
ba11c41147
@ -10,21 +10,17 @@ 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', [
|
||||||
|
@ -18,6 +18,7 @@ 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();
|
||||||
@ -29,6 +30,7 @@ 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"]);
|
||||||
@ -57,6 +59,7 @@ 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) {
|
||||||
|
@ -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, created_at)
|
INSERT INTO refueling_records (user_id, vehicle_id, fuel_type, note, liters, price_per_liter, total_price, mileage, created_at)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, NOW())
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW())
|
||||||
");
|
");
|
||||||
|
|
||||||
$stmt->bind_param(
|
$stmt->bind_param(
|
||||||
"iissddd",
|
"iissdddi",
|
||||||
$data['user_id'],
|
$data['user_id'],
|
||||||
$data['vehicle_id'],
|
$data['vehicle_id'],
|
||||||
$data['fuel_type'],
|
$data['fuel_type'],
|
||||||
@ -23,6 +23,7 @@ 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()) {
|
||||||
@ -38,7 +39,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`, `created_at`
|
SELECT `liters`, `price_per_liter`, `total_price`, `mileage`, `created_at`
|
||||||
FROM `refueling_records`
|
FROM `refueling_records`
|
||||||
WHERE `vehicle_id` = ?
|
WHERE `vehicle_id` = ?
|
||||||
ORDER BY created_at DESC
|
ORDER BY created_at DESC
|
||||||
@ -68,6 +69,7 @@ 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`
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
<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>
|
||||||
|
|
||||||
@ -45,6 +47,13 @@
|
|||||||
<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>
|
||||||
@ -64,4 +73,28 @@
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
</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>
|
||||||
|
@ -52,6 +52,12 @@
|
|||||||
<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'])): ?>
|
||||||
|
@ -63,7 +63,6 @@ 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;";
|
||||||
|
|
||||||
@ -99,6 +98,7 @@ 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
|
||||||
|
@ -204,6 +204,12 @@ 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'])): ?> -->
|
||||||
@ -229,6 +235,7 @@ 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user