188 lines
6.0 KiB
PHP
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)
|
|
}
|