Files
backend_parkir/app/Http/Controllers/Api/V1/Cashier/CashierOperationController.php
T

188 lines
6.0 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1\Cashier;
use App\Http\Controllers\Controller;
use App\Models\JenisMobil;
use App\Models\NamaPos;
use App\Models\Pegawai;
use App\Models\Softseting;
use App\Services\Parking\geTransaksi;
use App\Services\Parking\RateParkingService;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use function GuzzleHttp\json_encode;
class CashierOperationController extends Controller
{
public function login(Request $request)
{
$username = $request->username;
$password = $request->password;
$gateStatus = $request->idpintu;
$user = Pegawai::where("username", $username)->where("password", $password)->first();
$gateId = NamaPos::with("posHardware", "posParams")->where("id", $gateStatus)->first();
if (!$gateId) {
return response()->json([
"status" => false,
"message" => "ID Pintu tidak ditemukan",
]);
}
$globalSetting = Softseting::first();
$shortcutVeh = explode(",", $gateId->posParams->kend_valid);
$kendValid = JenisMobil::whereIn("id", $shortcutVeh)->orderBy("id")->get();
if (!$user) {
return response()->json([
"status" => false,
"message" => "Username dan Password salah atau user tidak aktif",
]);
}
Log::info("Login user " . $user->nama . " berhasil.");
$fotoPegawai = $user->foto;
Log::info([
"type" => gettype($fotoPegawai),
"resource" => is_resource($fotoPegawai),
"length" => is_string($fotoPegawai) ? strlen($fotoPegawai) : null,
]);
if (is_resource($fotoPegawai)) {
// $pegawaiFilename = $user->username;
rewind($fotoPegawai);
$fotoPegawai = stream_get_contents($fotoPegawai);
} else {
$user->foto = url(Storage::url("images/pegawai/no-image.jpg"));
}
// $fotoPegawai = pg_unescape_bytea($fotoPegawai);
// $foto = stream_get_contents($fotoPegawai);
// file_put_contents(storage_path("app/debug_before.bin"), $foto);
// file_put_contents(
// storage_path("app/debug_after.bin"),
// pg_unescape_bytea($foto),
// );
// $raw = stream_get_contents($fotoPegawai);
// Log::info([
// "raw_size" => strlen($raw),
// ]);
// $binary = pg_unescape_bytea($raw);
// Log::info([
// "binary_size" => strlen($binary),
// ]);
// Log::info([
// "resource" => is_resource($fotoPegawai),
// "type" => gettype($fotoPegawai),
// "size" => is_string($fotoPegawai) ? strlen($fotoPegawai) : null,
// "hex" => bin2hex(substr($fotoPegawai, 0, 100)),
// "before" => bin2hex(substr($fotoPegawai, 0, 16)),
// // "after" => bin2hex(substr($decoded, 0, 16)),
// ]);
if (!empty($fotoPegawai)) {
$filename = "pegawai_" . $user->nomer . ".jpg";
$result = Storage::disk("public")->put("images/pegawai/" . $filename, $fotoPegawai);
Log::info(["save" => $result]);
$user->foto = url(Storage::url("images/pegawai/" . $filename));
}
// Log::info($user->toArray());
return response()->json([
"status" => true,
"message" => "Login berhasil",
"data" => [
"user" => $user,
"gate" => $gateId,
"settings" => $globalSetting,
"vehicleValid" => $kendValid,
],
]);
}
function checkMember(Request $request)
{
Log::info($request->input("transaksi"));
$getMember = new geTransaksi();
$data = $getMember->TransaksiMember($request->input("transaksi"));
if (!$data) {
return response()->json([
"success" => false,
"message" => "Transaksi member tidak ditemukan",
]);
}
return response()->json([
"success" => true,
"data" => $data,
]);
}
function transaksiInside(Request $request)
{
Log::info("Transaksi di input : " . $request->input("transaksi"));
$gateOut = $request->input("idpintu");
$vehicle = $request->input("kendaraan");
$licensePlate = $request->input("platNomer");
$gettransaksi = new geTransaksi();
$dateNow = Carbon::now()->format("Y-m-d HH:mm:ss");
Log::info("Kendaraan di pilih : " . $vehicle);
$Transaksi = $gettransaksi->TransaksiParkir($request->input("transaksi"));
if (!$Transaksi) {
Log::info("Transaksi tidak ditemukan : " . json_encode($Transaksi));
return response()->json([
"success" => false,
"message" => "Transaksi tidak ditemukan",
]);
}
Log::info("Transaksi ditemukan : " . json_encode($Transaksi));
$waktu_masuk = Str::of($Transaksi->waktu_masuk)->trim();
$timeInSecond = Carbon::parse($waktu_masuk);
$timeOutSecond = Carbon::now();
$duration = $timeInSecond->diffInSeconds($timeOutSecond);
$hitungTarif = new RateParkingService();
[$duration, $tarifParkir] = $hitungTarif->parkingTimeCalc($vehicle, $duration);
$Transaksi["waktu_keluar"] = $timeOutSecond->format("Y-m-d H:i:s");
$Transaksi["bayar_keluar"] = (int) $tarifParkir;
$Transaksi["id_pintu_keluar"] = $gateOut;
Log::info("jam masuk : " . $timeInSecond);
Log::info("jam keluar : " . $timeOutSecond);
Log::info("Lama parkir dalam detik : " . $duration);
Log::info("Tarif transaksi : " . $tarifParkir);
return response()->json([
"success" => true,
"data" => $Transaksi,
]);
}
// function transaksiProcess(Request $request)
}