Files
backend_parkir/app/Services/Parking/RateParkingService.php
T

144 lines
5.1 KiB
PHP

<?php
namespace App\Services\Parking;
use App\Models\MasterTarif;
use App\Models\VehicleItem;
use Illuminate\Support\Facades\Log;
use function GuzzleHttp\json_encode;
class RateParkingService
{
public function parkingTimeCalc($vehicle, $times)
{
$duration = $times; ## Parse lama parkir berdasarkan detik
$tarifVehicle = MasterTarif::find($vehicle);
Log::info(json_encode($tarifVehicle));
$parkingPrice = 0; //Tarif pertama
Log::info("\n" . "------------------======== Starting tarif Begin ==============----------------------");
Log::info("Mulai perhitungan tarif dengan durasi : " . $duration . " (Rp. " . $parkingPrice . ")");
// Grace Periode
// if ($duration < $tarifVehicle->waktu_gratis) {
// Log::info("GP Rules : ");
// return $parkingPrice;
// } elseif (
// $tarifVehicle->waktu_gratis !== 0 &&
// $tarifVehicle->tarif_periode !== 0
// ) {
// Log::info("GP Rules : ");
// $parkingPrice = $parkingPrice + $tarifVehicle->tarif_period;
// $duration = $duration - $tarifVehicle->waktu_gratis;
// Log::info(
// "Setelah GP : " .
// $parkingPrice .
// " Durasi parkir : " .
// $duration,
// );
// }
## Hitung Tarif pertama
$firstPrice = 0;
$firstDuration = $tarifVehicle->frek_interval * ($tarifVehicle->interval * 60);
Log::info("Firstime rules : " . $firstDuration);
// if ($duration >= $firstDuration) {
do {
$duration -= $tarifVehicle->interval * 60;
$parkingPrice += $tarifVehicle->tarif_interval;
$firstPrice++;
} while ($firstPrice < $tarifVehicle->frek_interval);
Log::info("Tarif jam pertama : " . $parkingPrice . " Sisa durasi : " . $duration);
// }
// Log::info($firstDuration);
## Hitung tarif kedua
$secondPrice = 1;
// Log::info($tarifVehicle->frek_waktu2 . ' - ' . $tarifVehicle->waktu2);
$secondDuration = $tarifVehicle->frek_waktu2 * ($tarifVehicle->waktu2 * 60);
if ($duration >= $secondDuration) {
Log::info("");
Log::info("Secondtime rules : " . $secondDuration);
Log::info($secondPrice);
do {
$duration -= $tarifVehicle->waktu2 * 60;
Log::info($parkingPrice);
Log::info($tarifVehicle->tarif);
$parkingPrice += $tarifVehicle->tarif;
$secondPrice++;
Log::info($secondPrice);
} while ($secondPrice < $tarifVehicle->frek_waktu2);
Log::info("Tarif jam kedua : " . $parkingPrice . " Sisa durasi : " . $duration);
}
$nextDuration = 0;
$lastDuration = $tarifVehicle->waktu_tarif * 60;
if ($lastDuration <= $duration) {
Log::info("");
Log::info("Sisa Durasi " . $duration);
do {
$duration -= $tarifVehicle->waktu_tarif * 60;
$parkingPrice += $tarifVehicle->tarif;
// $nextDuration++;
} while ($duration > 0);
Log::info("Tarif jam berikutnya : " . $parkingPrice . " Sisa durasi : " . $duration);
}
$tarifMaks = $tarifVehicle->maksimum;
if ($tarifMaks != 0) {
if ($parkingPrice > $tarifMaks) {
$parkingPrice = $tarifMaks;
}
}
Log::info(
"Tarif Parkir Anda : " .
// $parkingPrice .
" Sisa durasi : " .
$duration,
);
// if ($tarifVehicle->time_base_maks == 1) {
// if ($parkingPrice > $tarifVehicle->maksimum) {
// $parkingPrice = $tarifVehicle->maksimum;
// }
// }
return [$duration, $parkingPrice];
}
public function parkingDailysCalc($vehicle, $times)
{
if ($times < 86400) {
$parkingPrice = $this->parkingTimeCalc($vehicle, $times);
return $parkingPrice;
}
$tarifVehicle = MasterTarif::find($vehicle);
$parkingPrice = 0;
Log::info("Parameter tarif : " . json_encode($tarifVehicle));
Log::info("Memulai hitung tarif : " . $parkingPrice);
Log::info("Base time : " . $times);
if ($tarifVehicle->time_base == 1) {
$durationDailys = $tarifVehicle->time_base_maks * 60 * 60;
Log::info("Waktu 1 hari : " . $durationDailys);
$parkingDuration = $times;
do {
$parkingDuration -= $durationDailys;
$parkingPrice += $tarifVehicle->maksimum;
} while ($parkingDuration >= 86400);
$result = $this->parkingTimeCalc($vehicle, $parkingDuration);
$parkingDuration = $result[0];
$parkingPrice = $result[1];
}
Log::info("Sisa waktu : " . $parkingDuration);
Log::info("Tarif nya jadi : " . $parkingPrice);
return [$parkingDuration, (int) $parkingPrice];
}
}