Penambahan login cashier via API, perhitungan tarif
This commit is contained in:
@@ -5,39 +5,49 @@
|
||||
use App\Models\MasterTarif;
|
||||
use App\Models\VehicleItem;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use function GuzzleHttp\json_encode;
|
||||
|
||||
class RateParkingService
|
||||
{
|
||||
public function calc ($transaksi, $times)
|
||||
public function parkingTimeCalc($vehicle, $times)
|
||||
{
|
||||
$duration = $times; ## Parse lama parkir berdasarkan detik
|
||||
$tarifVehicle = MasterTarif::find($transaksi);
|
||||
$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 .')');
|
||||
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;
|
||||
} else if ( $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);
|
||||
}
|
||||
// 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);
|
||||
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);
|
||||
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);
|
||||
@@ -46,41 +56,88 @@ public function calc ($transaksi, $times)
|
||||
// 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("");
|
||||
Log::info("Secondtime rules : " . $secondDuration);
|
||||
Log::info($secondPrice);
|
||||
do {
|
||||
$duration -= ($tarifVehicle->waktu2 * 60);
|
||||
$parkingPrice += $tarifVehicle->tarif_interval;
|
||||
$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);
|
||||
}
|
||||
|
||||
Log::info("Tarif jam kedua : " . $parkingPrice . " Sisa durasi : " . $duration);
|
||||
}
|
||||
|
||||
$nextDuration = 0;
|
||||
$lastDuration = $tarifVehicle->waktu_tarif * 60;
|
||||
if ($duration <= $lastDuration && $duration > 0) {
|
||||
Log::info('');
|
||||
Log::info('Sisa Durasi ' . $duration);
|
||||
if ($lastDuration <= $duration) {
|
||||
Log::info("");
|
||||
Log::info("Sisa Durasi " . $duration);
|
||||
do {
|
||||
$duration -= ($tarifVehicle->waktu_tarif * 60);
|
||||
$duration -= $tarifVehicle->waktu_tarif * 60;
|
||||
$parkingPrice += $tarifVehicle->tarif;
|
||||
// $nextDuration++;
|
||||
} while ($duration > 0);
|
||||
Log::info('Tarif jam berikutnya : ' . $parkingPrice . ' Sisa durasi : ' . $duration);
|
||||
Log::info("Tarif jam berikutnya : " . $parkingPrice . " Sisa durasi : " . $duration);
|
||||
}
|
||||
|
||||
Log::info('Tarif Parkir Anda : ' . $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 $parkingPrice;
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parking;
|
||||
|
||||
use App\Models\TransaksiParkir;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class geTransaksi
|
||||
{
|
||||
public function TransaksiParkir($idNopol)
|
||||
{
|
||||
Log::info("Mencari transaksi : " . $idNopol);
|
||||
|
||||
if (!$idNopol) {
|
||||
return;
|
||||
}
|
||||
|
||||
$getTransaksi = TransaksiParkir::selectRaw(
|
||||
'transaksi_parkir.id::VARCHAR as id,
|
||||
no_pol,
|
||||
id_kendaraan,
|
||||
id_pintu_masuk,
|
||||
id_pintu_keluar,
|
||||
waktu_masuk,
|
||||
waktu_keluar,
|
||||
bayar_keluar, jm.nama',
|
||||
)
|
||||
->leftJoin("jenis_mobil as jm", "transaksi_parkir.id_kendaraan", "=", "jm.id")
|
||||
->where("no_pol", "LIKE", $idNopol . "%")
|
||||
->where("status", 1)
|
||||
->orderByDesc("waktu_masuk")
|
||||
->first();
|
||||
|
||||
return $getTransaksi;
|
||||
}
|
||||
|
||||
public function TransaksiMember($nopolCardNumber)
|
||||
{
|
||||
Log::info("Mencari transaksi member : " . $nopolCardNumber);
|
||||
$getMember = DB::table("mergetransaksistikerdetail as mtsd")
|
||||
// $getMember = DB::table("transaksi_stiker as ts")
|
||||
// ->leftjoin("detail_transaksi_stiker as dts", "dts.notrans", "=", "ts.notrans")
|
||||
// ->leftJoin("card_member as cm", "cm.notrans", "=", "ts.no_id")
|
||||
// ->leftJoin("jenis_langganan as jl", "jl.id", "=", "ts.jenis_langganan")
|
||||
// ->leftJoin("stasiunkerja as sk", "sk.kode", "=", "ts.unit_kerja")
|
||||
// ->leftJoin("jenis_mobil as jm", "jm.id", "=", "dts.jenis_mobil")
|
||||
->select(
|
||||
DB::raw('
|
||||
mtsd.notrans, nama , alamat as alamat , telepon as telepon,
|
||||
awal , akhir as akhir, nopol, nama vehicle, mtsd.tanggal, cm.no_card as no_card'),
|
||||
)
|
||||
// ->distinct()
|
||||
->leftJoin("card_member as cm", "cm.notrans", "=", "mtsd.no_id")
|
||||
->where("nopol", $nopolCardNumber)
|
||||
// ->whereRaw("now() between awal and akhir")
|
||||
->orderByDesc("tanggal")
|
||||
->first();
|
||||
|
||||
if (!$getMember) {
|
||||
Log::info("Member aktif tidak ditemukan");
|
||||
return null;
|
||||
}
|
||||
|
||||
Log::info("Member ditemukan : " . json_encode($getMember));
|
||||
return $getMember;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user