Penambahan login cashier via API, perhitungan tarif

This commit is contained in:
2026-07-24 14:04:49 +07:00
parent 3ea7367255
commit 8bd2d0c542
63 changed files with 1979 additions and 309 deletions
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ApiV1MemberController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function index()
{
return view('dashboard');
}
}
@@ -0,0 +1,163 @@
<?php
namespace App\Http\Controllers\Parking\FrontOffice;
use App\Http\Controllers\Controller;
use App\Models\TransaksiParkir;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class FrontOfficeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view ('frontoffice.index');
}
public function search(Request $request)
{
// Log::info($request->all());
$keyword = $request->q;
Log::info($keyword);
if (!$keyword) {
return response()->json([
'status' => false,
'message' => 'Input kosong'
]);
}
// $data = TransaksiParkir::where('no_pol', $keyword)
$data = DB::table('transaksi_parkir')->where('no_pol', $keyword)
->select(DB::raw(
'CAST(id AS TEXT) as id, no_pol, waktu_masuk, id_kendaraan, pic_body_masuk'
))
// ->where('status', 1)
// ->orWhere('no_pol', $keyword)
->orderByDesc('waktu_masuk')
->first();
if (!empty($data->pic_body_masuk) && is_resource($data->pic_body_masuk)) {
$data->pic_body_masuk = base64_encode(stream_get_contents($data->pic_body_masuk)) ?? 'Not Image';
} else {
$data->pic_body_masuk = 'No Image';
}
// $pic_body_masuk = (string) $data->pic_body_masuk;
// $data->pic_body_masuk_base64 = $data->pic_body_masuk
// ? 'data:image/jpeg;base64,' . base64_encode($pic_body_masuk )
// : null;
// Log::info($data);
if (!$data) {
return response()->json([
'status' => false,
'message' => 'Data tidak ditemukan'
]);
}
return response()->json([
'status' => true,
// 'data' => $data
'data' => [
'id' => (string) $data->id,
'no_pol' => $data->no_pol,
'waktu_masuk' => $data->waktu_masuk,
'vehicle_capt' => $data->pic_body_masuk
]
]);
}
public function image($id)
{
$picture = TransaksiParkir::select('pic_body_masuk')->where('no_pol', $id)
->where('status', 1)
->orderByDesc('waktu_masuk')
->first();
// return response($picture->pic_body_masuk)
// ->header('Content-Type', 'image/jpeg');
// ❌ kalau tidak ada data
if (!$picture || !$picture->pic_body_masuk) {
return response()->file(public_path('images/no-image.jpg'));
}
return response($picture->pic_body_masuk)
->header('Content-Type', 'image/jpeg')
->header('Cache-Control', 'public, max-age=86400'); // cache 1 hari
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
Log::info('Method Store : ' . json_encode($request->all()));
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
Log::info($request->all());
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use App\Models\TransaksiParkir;
use Carbon\Carbon;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
$dateNow = Carbon::now()->format('Y-m-d');
$data = TransaksiParkir::get();
$VeriTrans = TransaksiParkir::where('veri_check', 2)->whereDate('veri_date', $dateNow)->count();
$incidenTrans = TransaksiParkir::where('veri_check', 0)->whereDate('veri_date', $dateNow)->count();
$pendingTrans = TransaksiParkir::where('veri_check', 1)->whereDate('veri_date', $dateNow)->count();
$inSite = TransaksiParkir::where('status', 1)->count();
// $VeriTrans = $data->where('veri_check', 2)->whereDate('veri_date', $dateNow)->count();
// $incidenTrans = $data->where('veri_check', 0)->whereDate('veri_date', $dateNow)->count();
// $pendingTrans = $data->where('veri_check', 1)->whereDate('veri_date', $dateNow)->count();
// $inSite = $data->where('status',1)->count();
// dd($dateNow, $VeriTrans,$incidenTrans);
return view('home', compact('VeriTrans','incidenTrans', 'pendingTrans','inSite'));
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class LostiketController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
return view ('lostiket');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class MemberProduct extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,88 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use App\Models\ProdukPrice;
use Illuminate\Http\Request;
class MemberProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$products = ProdukPrice::getProduct();
return view('register', compact('products'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,312 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use App\Models\MemberCard;
use App\Models\StikerTrans;
use App\Models\StikerTransDetail;
use Carbon\Carbon;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Js;
use Yajra\DataTables\Facades\DataTables;
class MemberStikerController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$vehicleSelect = DB::table('jenis_mobil')->get();
$departmentSelect = DB::table('stasiunkerja')->get();
$memberSelect = DB::table('jenis_langganan')->get();
$jenisStiker = DB::table('tarif_stiker')->get();
return view('member.member', compact([
'vehicleSelect',
'departmentSelect',
'memberSelect',
'jenisStiker',
]));
}
public function getMember (Request $request)
{
Log::info(json_encode('nopol : ' .$request->nopol));
Log::info(json_encode('veh : ' .$request->vehicle));
Log::info(json_encode('dept : ' .$request->depart));
Log::info(json_encode('mem : ' .$request->member));
Log::info(json_encode('trans : ' .$request->notrans));
Log::info(json_encode('isactive : ' .gettype($request->isactive)));
if ($request->ajax() ) {
$dataStiker = 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('
ts.notrans as notrans , ts.nama , ts.alamat as alamat , ts.telepon as telepon,
ts.awal as awal , ts.akhir as akhir, jl.nama as jmember, sk.nama as dept, dts.nopol,
jm.nama vehicle, dts.jenis_member, cm.no_card as no_card'))
->distinct();
// ->select(DB::raw('ts.notrans as notrans , ts.nama , ts.alamat as alamat , ts.telepon as telepon , ts.awal as awal , ts.akhir as akhir, sk.nama as unit_kerja, jl.nama as jenis_member, ts.no_id'))
if ($request->nama) {
$dataStiker = $dataStiker->where('ts.nama', 'like', '%' . $request->nama . '%');
}
if ( $request->notrans) {
$dataStiker = $dataStiker->where('ts.notrans', 'like', '%' . $request->notrans . '%');
}
if ($request->nopol) {
$dataStiker = $dataStiker->where('ts.unit_kerja', 'like', '%' . $request->depart . '%');
}
if ($request->member) {
$dataStiker = $dataStiker->where('ts.jenis_langganan', 'like', '%' . $request->member . '%');
}
if ($request->nopol) {
$dataStiker = $dataStiker->where('dts.nopol', 'like', '%' . $request->nopol . '%');
}
if ($request->vehicle) {
$dataStiker = $dataStiker->where('dts.jenis_mobil', 'like', '%' . $request->vehicle . '%');
}
if ($request->nocard) {
$dataStiker = $dataStiker->where('cm.no_card', 'like', '%' . $request->nocard . '%');
}
if ($request->isactive === '1') {
$dataStiker = $dataStiker->whereRaw('now() between ts.awal and ts.akhir');
}
Log::info($dataStiker->toSql());
$dataStiker = $dataStiker->get();
return response()->json($dataStiker);
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
Log::info('Data yang diperpanjang : ' . json_encode($request->all()));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function checkField (Request $request)
{
Log::info('Data yang diterima : ' . json_encode($request->all()));
$validate = Validator::make($request->all(),[
'nopol' => 'required|string|unique:detail_transaksi_stiker,nopol',
// 'nocard' => 'string|exists:card_member,no_card',
]);
$nocard = $request->input('nocard');
$nocardExists = DB::table('card_member')
->where('no_card', $nocard)
->exists();
if ($validate->fails()) {
return response()->json(['response' => false, 'message' => 'Data sudah ada, coba yang lain']);
}
return response()->json(['response' => true, 'message' => 'Data sudah ada']);
}
public function store(Request $request)
{
Log::info('Data yang diterima : ' . json_encode($request->all()));
$mountYearNow = Carbon::now()->format('m/Y');
$dataStiker = $request->input('formData');
$dataVehicle = $request->input('nopolData');
$dataCard = $request->input('cardNumber');
Log::info('Data Stiker : ' . json_encode($dataStiker));
Log::info('Data Kendaraan : ' . json_encode($dataVehicle));
Log::info('Data kartu : ' . json_encode($dataCard));
// $cleanedData = stripslashes(trim($data));
// Log::debug('Modified : ' . json_encode($cleanedData));
// $dataStiker = json_decode($cleanedData, false);
// Log::info('Debuggind data : ' . json_encode($dataStiker));
// $validate = Validator::make($request->all(),[
// 'nama' => 'required|string|unique',
// // 'nopol' => 'required|string|unique:detail_transaksi_stiker,nopol',
// // 'nocard' => 'string|exists:card_member,no_card',
// ]);
// if ($validate->fails()) {
// return response()->json(['response' => false, 'message' => 'pastikan nama, Nomor Polisi, dan data kartu sudah terisi']);
// }
$dateNow = Carbon::now()->format('Y-m-d H:m:s');
$seqTrans = DB::table('indexnum')->select('value')->where('nama', 'sticker')->first();
$seqId = DB::table('indexnum')->select('value')->where('nama', 'identitas')->first();
$notrans = $seqTrans->value . "/STK/" . $mountYearNow;
$noid = $seqId->value . "/IDT/" . $mountYearNow;
$user = Auth::user();
$periode = explode(" - ", $dataStiker['daterange']);
Log::info('Parcing Periode : ' . json_encode($periode));
$awal = Carbon::createFromFormat('d-m-Y H:i', $periode[0]);
$akhir = Carbon::createFromFormat('d-m-Y H:i', $periode[1]);
Log::info('Awal : ' . $awal . ' Akhir : ' . $akhir);
// Log::info($user);
try {
$dataStiker = [
'jenis_transaksi' => $dataStiker['jenis_transaksi'], // 0 = transaksi baru , 1 = perpanjangan
'notrans' => $notrans,
'no_id' => $noid,
'nama' => $dataStiker['nama'],
'alamat' => $dataStiker['address'] ?? '',
'telepon' => $dataStiker['phone'] ?? '',
'unit_kerja' => $dataStiker['depart'],
'jenis_stiker' => $dataStiker['member'],
'awal' => $awal,
'akhir' => $akhir,
'harga' => $dataStiker['harga'] ?? 0,
'keterangan' => $dataStiker['note'] ?? '',
'tanggal' => $dateNow,
'operator' => $user->nomer,
];
DB::table('transaksi_stiker')->insert($dataStiker);
if($dataVehicle) {
foreach ($dataVehicle as $nopol) {
$dataVehicle = [
'notrans' => $notrans,
'nopol' => $nopol['nopol'],
'jenis_mobil' => $nopol['vehicle'],
'jenis_member' => $nopol['member'],
'merk' => $nopol['merk'],
];
DB::table('detail_transaksi_stiker')->insert($dataVehicle);
}
} else {
return 0;;
}
if ($dataCard) {
foreach ($dataCard as $cardNumber) {
$dataCard = [
'notrans' => $noid,
'no_card' => $cardNumber['nocard'],
'no_urut' => $cardNumber['nourut'],
];
DB::table('card_member')->insert($dataCard);
}
} else {
return 0;
}
DB::table('indexnum')->where('nama', 'sticker' )->update(['value' => DB::raw("lpad(to_number(value,'9999')+1)::text, 4, '0')")]);
DB::table('indexnum')->where('nama', 'identitas' )->update(['value' => DB::raw("lpad(to_number(value,'9999')+1)::text, 4, '0')")]);
$response = true;
$msg = 'Data berhasil di simpan';
} catch (Exception $e) {
$response = false;
$msg = 'Gagal menyimpan data ' . $e->getMessage() . $e->getLine();
}
return response()->json(['response' => $response, 'pesan' => $msg]);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
Log::info('Data yang diterima : ' . json_encode($id));
$dataStiker = StikerTrans::with('stiker_details.vehicle', 'memberCard')
->select('transaksi_stiker.notrans', 'transaksi_stiker.nama', 'transaksi_stiker.alamat', 'transaksi_stiker.telepon', 'transaksi_stiker.awal', 'transaksi_stiker.akhir', 'transaksi_stiker.jenis_langganan',
'transaksi_stiker.unit_kerja', 'transaksi_stiker.no_id', 'jl.nama as jmember', 'sk.nama as dept')
->leftJoin('jenis_langganan as jl','jl.id','=','transaksi_stiker.jenis_langganan')
->leftJoin('stasiunkerja as sk','sk.kode','=','transaksi_stiker.unit_kerja')
->where('notrans', 'like', '%' . $id . '%')
->first();
// $dataStiker = DB::table('transaksi_stiker as ts')
// ->leftjoin('detail_transaksi_stiker as dts','dts.notrans','=','ts.notrans')
// ->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')
// ->leftJoin('card_member as cm','cm.notrans','=','ts.no_id')
// ->select(DB::raw('
// ts.notrans as notrans , ts.nama , ts.alamat as alamat , ts.telepon as telepon,
// ts.awal as awal , ts.akhir as akhir, jl.nama as jmember, sk.nama as dept, dts.nopol,
// jm.nama vehicle, dts.jenis_member, cm.no_card as no_card')
// )->where('ts.notrans', 'like', '%' . $id . '%')
// ->get();
Log::info('Data Stiker : ' . json_encode($dataStiker));
return response()->json($dataStiker);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Parking\Operasional;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class TransaksiParkirController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view ('operasional.transaksi-parkir');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,139 @@
<?php
namespace App\Http\Controllers\Parking\Report;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class LaporanStiker extends Controller
{
public function laporanStikerHarian()
{
return view('report.stiker.stiker-harian', [
'filterSelect' => [
'jenisLangganan' => DB::table('jenis_langganan')->get(),
'jenisStiker' => DB::table('stasiunkerja')->get(),
'softsetting' => DB::table('softseting')->first(),
]
]);
}
public function dataStiker(Request $request)
{
// 🔐 Validasi dasar
$validated = $request->validate([
'tanggalAwal' => 'required|date',
'tanggalAkhir' => 'required|date',
'jenis_langganan' => 'array|nullable',
'jenis_stiker' => 'array|nullable',
'name' => 'string|nullable',
'no_pol' => 'string|nullable',
]);
$query = DB::table('transaksi_stiker as a')
->leftJoin('detail_transaksi_stiker as b', 'a.notrans', '=', 'b.notrans')
->leftJoin('jenis_langganan as c', 'a.jenis_langganan', '=', 'c.id')
->leftJoin('stasiunkerja as d', 'a.unit_kerja', '=', 'd.kode')
->leftJoin('pegawai as p', 'a.operator', '=', 'p.nomer')
// ->leftJoin('tarif_stiker as ts','ts.id_mobil','=','a.jenis_mobil')
->leftJoin('tarif_stiker as ts', function ($join) {
$join->on('ts.id_mobil', '=', 'b.jenis_mobil')
->on('ts.jenis_langganan', '=', 'b.jenis_member');
})
->select('a.*', 'b.*', 'c.nama as jenis_langganan','d.nama as stasiunkerja','p.nama as petugas','ts.tarif')
->whereBetween('a.tanggal', [
$validated['tanggalAwal'] . ' 00:00:00',
$validated['tanggalAkhir'] . ' 23:59:59'
])
->where('b.status', 1)
// 🔹 Conditional filters
->when($request->name, fn ($q, $v) =>
$q->where('a.nama', 'ILIKE', "%{$v}%")
)
->when($request->no_pol, fn ($q, $v) =>
$q->where('a.nopol', 'ILIKE', "%{$v}%")
)
->when($request->jenis_langganan, fn ($q, $v) =>
$q->whereIn('a.jenis_langganan', $v)
)
->when($request->jenis_stiker, fn ($q, $v) =>
$q->whereIn('a.unit_kerja', $v)
)
->orderBy('a.nama');
// 🪵 Debug (aktifkan hanya saat local)
if (app()->isLocal()) {
// Log::info('SQL Bindings', $query->getBindings());
// Log::info('SQL Query', $query->toSql());
// dd($query->toSql(), $query->getBindings());
}
return response()->json([
'success' => true,
'data' => $query->get(),
]);
}
}
// public function laporanStikerHarian()
// {
// $jenisLangganan = DB::table('jenis_langganan')->get();
// $jenisStiker = DB::table('stasiunkerja')->get();
// $filterSelect = [
// 'jenisLangganan' => $jenisLangganan,
// 'jenisStiker' => $jenisStiker
// ];
// return view ('report.stiker.stiker-harian', compact('filterSelect'));
// }
// public function dataStiker (Request $request)
// {
// Log::info($request->jenis_langganan);
// $jenisLangganan = $request->jenis_langganan;
// $stasiunKerja = $request->jenis_stiker;
// $nama = $request->name;
// $nopol = $request->no_pol;
// $startDate = $request->tanggalAwal;
// $endDate = $request->tanggalAKhir;
// Log::info($startDate);
// Log::info($endDate);
// $query = DB::table('mergetransaksistikerdetail as a')
// ->leftJoin('stasiunkerja as b', 'a.unit_kerja', '=', 'b.kode')
// ->whereBetween('a.tgl_edited', [
// $startDate . ' 00:00:00',
// $endDate . ' 23:59:59'])
// ->select(
// 'a.*',
// 'b.nama as jenis_langganan'
// );
// if (!empty($nama)) {
// $query->where('a.nama', 'LIKE', '%' . $nama . '%');
// }
// if (!empty($nopol)) {
// $query->where('a.nopol', 'LIKE', '%' . $nopol . '%');
// }
// if (!empty($jenisLangganan)) {
// $query->whereIn('a.jenis_langganan', $jenisLangganan);
// }
// if (!empty($stasiunKerja)) {
// $query->whereIn('a.unit_kerja', $stasiunKerja);
// }
// Log::info($query->getBindings());
// $data = $query->get();
// return response()->json([
// 'success' => true,
// 'data' => $data,
// ]);
// }
@@ -0,0 +1,470 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use App\Models\TransaksiParkir;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class ReportTransaksiController extends Controller
{
public function byGate ()
{
return view ('report.by-gate');
}
public function gateData(Request $request)
{
Log::info($request->all());
$awal = $request->tanggal_mulai;
$akhir = $request->tanggal_selesai;
$isShift = $request->shift === 'on';
$dateBy = $isShift ? 'pklogin' : 'waktu_keluar';
$paymentMethod = $request->payment_method === 'null' ? null : $request->payment_method;
// 🔹 Base select
$select = [
'np.nama as gate',
'tp.id_pintu_keluar',
'p.nama as petugas',
'tp.id_op_keluar',
'jm.nama as kendaraan',
'tp.status_transaksi',
DB::raw('count(*) as jumlah_transaksi'),
DB::raw('sum(tp.bayar_keluar) as income_transaksi'),
];
// 🔹 Tambah shift kalau aktif
if ($isShift) {
$select[] = 'tp.id_shift_keluar';
}
// 🔹 Base group
$groupBy = [
'tp.id_pintu_keluar',
'np.nama',
'p.nama',
'tp.id_op_keluar',
'jm.nama',
'tp.status_transaksi',
];
if ($isShift) {
$groupBy[] = 'tp.id_shift_keluar';
}
$query = DB::table('transaksi_parkir as tp')
->leftJoin('pegawai as p','p.nomer','=','tp.id_op_keluar')
->leftJoin('nama_pos as np','np.id','=','tp.id_pintu_keluar')
->leftJoin('jenis_mobil as jm','jm.id','=','tp.id_kendaraan')
->select($select)
// 🔹 Filter tanggal (dynamic field)
->where('tp.status', 0)
->whereBetween($dateBy, [
$awal . ' 00:00:00',
$akhir . ' 23:59:59'
])
// // 🔹 STATUS
// ->when($request->status_transaksi, fn($q, $v) =>
// $q->where('tp.status_transaksi', $v)
// )
// 🔹 PINTU
->when($request->id_pintu_keluar, fn($q, $v) =>
$q->whereIn('tp.id_pintu_keluar', (array) $v)
)
// 🔹 Status Transaksi
// ->when($request->status_transaksi, function ($q) use ($request) {
->when(isset($request->status_transaksi), function ($q) use ($request) {
return match ($request->status_transaksi) {
// '0' => $q->whereNotIn('tp.status_transaksi', ['3','-1'])->whereNotNull('alasan'),
'0' => $q->where('tp.status_transaksi', '0')->whereNull('alasan'),
'3' => $q->where('tp.status_transaksi', '3')->whereNull('alasan'),
'-1' => $q->where('tp.status_transaksi', '-1')->whereNotNull('alasan'),
'null' => $q->whereNull('alasan')
};
})
// 🔹 CARA BAYAR
->when($request->cara_bayar, function ($q) use ($request) {
return match ($request->cara_bayar) {
'cash' => $q->where('tp.cara_bayar', '!=', 3),
'cashless' => $q->where('tp.cara_bayar', 3),
default => $q
};
})
->when($paymentMethod, function ($q) use ($paymentMethod) {
return $q->where('tp.rep_bank', $paymentMethod);
// return match ($request->payment_method) {
// 2 => $q->where('tp.rep_bank', 2),
// 3 => $q->where('tp.rep_bank', 3),
// 4 => $q->where('tp.rep_bank', 4),
// 5 => $q->where('tp.rep_bank', 5),
// 9 => $q->where('tp.rep_bank', 9),
// default => $q
// };
})
// // 🔹 PETUGAS
// ->when($request->id_op_keluar, fn($q, $v) =>
// $q->whereIn('tp.id_op_keluar', (array) $v)
// )
// // 🔹 KENDARAAN
// ->when($request->id_kendaraan, fn($q, $v) =>
// $q->whereIn('tp.id_kendaraan', (array) $v)
// )
->groupBy($groupBy)
->orderBy('tp.id_pintu_keluar')
->when($isShift, fn($q) =>
$q->orderBy('tp.id_shift_keluar')
)
->orderBy('tp.id_op_keluar')
->orderBy('jm.nama')
->orderBy('tp.status_transaksi');
return response()->json([
'byGateData' => $query->get()
]);
}
public function allReport ()
{
return view ('report.all-report');
}
public function allReportData(Request $request)
{
Log::info('== allReportData START ==');
Log::info($request->harian);
Log::info($request->tanggal);
$selectDate = $request->tanggal;
$start = microtime(true);
$harian = $request->harian ?? 1;
// $dateNow = Carbon::now()->format('Y-m-d');
$dateNow = '2026-01-25';
// $startDate = Carbon::today()->startOfDay();
// $endDate = Carbon::today()->endOfDay();
// $startDate = $selectDate . ' 00:00:00';
// $endDate = $selectDate . ' 23:59:59';
$startDate = $selectDate ? $selectDate : $dateNow;
$endDate = $selectDate ? $selectDate : $dateNow;
Log::info('Tanggal laporan', [
'start' => $startDate,
'end' => $endDate
]);
// =========================
// QUERY UTAMA (LEFT JOIN)
// =========================
Log::info('Query transaksi dimulai');
// $dateColumn = $harian == 1
// ? 'tp.waktu_keluar'
// : 'tp.pklogin';
if ($harian == 1) {
// $dateColumn = ['tp.waktu_masuk', 'tp.waktu_keluar'];
$dateColumn = ['tp.waktu_keluar'];
} else {
// $dateColumn = ['tp.pmlogin', 'tp.pklogin'];
$dateColumn = ['tp.pklogin'];
}
$transactions = DB::table('transaksi_parkir as tp')
->leftJoin('jenis_mobil as jm', 'jm.id', '=', 'tp.id_kendaraan')
->leftJoin('pegawai as pm', 'pm.nomer', '=', 'tp.id_op_masuk')
->leftJoin('pegawai as pk', 'pk.nomer', '=', 'tp.id_op_keluar')
->where(function ($q) use ($dateColumn, $startDate, $endDate, $selectDate) {
$q->whereBetween($dateColumn[0], [$startDate . ' 00:00:00', $endDate . ' 23:59:59'])
->orWhereBetween($dateColumn[0], [$startDate . ' 00:00:00', $endDate . ' 23:59:59']);
// $q->whereRaw('DATE(tp.waktu_masuk) = ?', [$selectDate])
// ->orWhereRaw('DATE(tp.waktu_keluar) = ?', [$selectDate]);
})
// ->whereRaw("DATE($dateColumn) = ?", [$dateNow])
// ->whereBetween($dateColumn, [$startDate, $endDate])
->select(
'tp.id',
'jm.nama as jenis_mobil',
'tp.id_kendaraan',
'pm.nama as kasir_masuk',
'pk.nama as kasir_keluar',
'tp.id_op_masuk',
'tp.waktu_masuk',
'tp.waktu_keluar',
'tp.status',
'tp.bayar_masuk',
'tp.bayar_keluar',
'tp.status_transaksi',
'tp.cara_bayar',
)
->get();
Log::info('Query transaksi selesai', [
'rows' => $transactions->count(),
'query_time_ms' => round((microtime(true) - $start) * 1000, 2)
]);
// =========================
// REKAP PER KENDARAAN
// =========================
Log::info('Rekap kendaraan dimulai');
$tunai = $transactions
->sortBy('id_kendaraan')
->groupBy('id_kendaraan')
->map(function ($items, $idKendaraan) {
// ======================
// PISAH MASUK & KELUAR
// ======================
// $masuk = $items->where('status', 1);
// $keluar = $items->where('status', 0);
$keluar = $items->filter(fn ($r) => (int) $r->status === 0);
// $tunai = $keluar->where('cara_bayar', '!=', 3);
$tunai = $keluar->filter(fn ($row) =>
in_array(data_get($row, 'cara_bayar'), [null, 0, '0'], true)
);
// ======================
// MASUK
// ======================
// $masukCasual = $masuk->where('status_transaksi', '0');
// $masukMember = $masuk->where('status_transaksi', '3');
// ======================
// KELUAR
// ======================
// $keluarCasual = $tunai->where('status_transaksi', '0');
// $keluarMember = $tunai->where('status_transaksi', '3');
// $keluarLost = $tunai->where('status_transaksi', '32');
$keluarCasual = $tunai->filter(fn ($r) =>
(string) data_get($r, 'status_transaksi') === '0'
&& data_get($r, 'id_op_masuk') !== null
);
$keluarMember = $tunai->filter(fn ($r) => (string) data_get($r, 'status_transaksi') === '3');
$keluarLost = $tunai->filter(fn ($r) => (string) data_get($r, 'status_transaksi') === '32');
$keluarManual = $tunai->filter(fn ($r) => data_get($r, 'id_op_masuk') === null);
$keluarMasalah = $tunai->filter(fn ($r) => (string) data_get($r, 'status_transaksi') === '-1');
// ======================
// PEMBAYARAN (KELUAR)
// ======================
// $nonTunai = $keluar->where('cara_bayar', 3);
// $tunai = $keluar->where('cara_bayar', '!=', 3);
$totalCash = $keluarCasual->sum('bayar_keluar') + $keluarLost->sum('bayar_keluar') + $keluarMember->sum('bayar_keluar') + $keluarManual->sum('bayar_keluar');
return [
'id_kendaraan' => $idKendaraan,
'jenis_mobil' => $items->first()->jenis_mobil,
'total' => $items->count(),
'tunaiOut' => $tunai->count(),
// ========= MASUK =========
// 'masuk' => [
// 'casual' => [
// 'jumlah' => $masukCasual->count(),
// 'income' => $masukCasual->sum('bayar_masuk'),
// ],
// 'member' => [
// 'jumlah' => $masukMember->count(),
// 'income' => $masukMember->sum('bayar_masuk'),
// ],
// ],
// ========= KELUAR =========
'keluar' => [
'casual' => [
'jumlah' => $keluarCasual->count(),
'income' => $keluarCasual->sum('bayar_keluar'),
],
'lost' => [
'jumlah' => $keluarLost->count(),
'income' => $keluarLost->sum('bayar_keluar'),
],
'member' => [
'jumlah' => $keluarMember->count(),
'income' => $keluarMember->sum('bayar_keluar'),
],
'manual' => [
'jumlah' => $keluarManual->count(),
'income' => $keluarManual->sum('bayar_keluar'),
],
'masalah' => [
'jumlah' => $keluarMasalah->count(),
'income' => $keluarMasalah->sum('bayar_keluar'),
],
],
'totalCash' => $totalCash,
];
}
)->values();
$cashless = $transactions
->sortBy('id_kendaraan')
->groupBy('id_kendaraan')
->map(function ($items, $idKendaraan) {
// ======================
// PISAH MASUK & KELUAR
// ======================
// $masuk = $items->where('status', 1);
// $keluar = $items->where('status', 0);
// $nonTunai = $keluar->where('cara_bayar', 3);
$keluar = $items->filter(fn ($r) => (int) $r->status === 0);
// $tunai = $keluar->where('cara_bayar', '!=', 3);
$nonTunai = $keluar->filter(fn ($row) =>
(string) data_get($row, 'cara_bayar') === '3'
);
// ======================
// MASUK
// ======================
// $masukCasual = $masuk->where('status_transaksi', '0');
// $masukMember = $masuk->where('status_transaksi', '3');
// ======================
// KELUAR
// ======================
// $keluarCasual = $nonTunai->where('status_transaksi', '0');
// $keluarMember = $nonTunai->where('status_transaksi', '3');
// $keluarLost = $nonTunai->where('status_transaksi', '32');
$keluarCasual = $nonTunai->filter(fn ($r) =>
(string) data_get($r, 'status_transaksi') === '0'
&& data_get($r, 'id_op_masuk') !== null
);
$keluarMember = $nonTunai->filter(fn ($r) => (string) data_get($r, 'status_transaksi') === '3');
$keluarLost = $nonTunai->filter(fn ($r) => (string) data_get($r, 'status_transaksi') === '32');
$keluarManual = $nonTunai->filter(fn ($r) => data_get($r, 'id_op_masuk') === null);
$totalCashless = $keluarCasual->sum('bayar_keluar') + $keluarLost->sum('bayar_keluar') + $keluarMember->sum('bayar_keluar') + $keluarManual->sum('bayar_keluar');
// ======================
// PEMBAYARAN (KELUAR)
// ======================
return [
'id_kendaraan' => $idKendaraan,
'jenis_mobil' => $items->first()->jenis_mobil,
'total' => $items->count(),
'nonTunaiOut' => $nonTunai->count(),
// ========= MASUK =========
// 'masuk' => [
// 'casual' => [
// 'jumlah' => $masukCasual->count(),
// 'income' => $masukCasual->sum('bayar_masuk'),
// ],
// 'member' => [
// 'jumlah' => $masukMember->count(),
// 'income' => $masukMember->sum('bayar_masuk'),
// ],
// ],
// ========= KELUAR =========
'keluar' => [
'casual' => [
'jumlah' => $keluarCasual->count(),
'income' => $keluarCasual->sum('bayar_keluar'),
],
'lost' => [
'jumlah' => $keluarLost->count(),
'income' => $keluarLost->sum('bayar_keluar'),
],
'member' => [
'jumlah' => $keluarMember->count(),
'income' => $keluarMember->sum('bayar_keluar'),
],
'manual' => [
'jumlah' => $keluarManual->count(),
'income' => $keluarManual->sum('bayar_keluar'),
],
],
'totalCashless' => $totalCashless,
];
}
)->values();
$transactions = DB::table('transaksi_parkir as tp')
->leftJoin('jenis_mobil as jm', 'jm.id', '=', 'tp.id_kendaraan')
->leftJoin('pegawai as pm', 'pm.nomer', '=', 'tp.id_op_masuk')
->leftJoin('pegawai as pk', 'pk.nomer', '=', 'tp.id_op_keluar')
->whereDate('waktu_masuk', '<', $dateNow)
->select(
'tp.id_kendaraan',
'jm.nama as jenis_mobil',
DB::raw("SUM(CASE WHEN tp.status = 1 THEN 1 ELSE 0 END) as overnight"),
DB::raw("SUM(CASE WHEN tp.status = 3 THEN 1 ELSE 0 END) as onexpired")
)
->groupBy('tp.id_kendaraan', 'jm.nama')
->orderBy('tp.id_kendaraan')
// dd($transactions->toSql());
->get();
$onCheck = $transactions
// ->sortBy('id_kendaraan')
// ->groupBy('id_kendaraan')
->map(function ($items) {
// $overNight = $items->filter(fn ($r) => (int) $r->status === 1);
// $onExpired = $items->filter(fn ($r) => (int) $r->status === 3);
return [
'id_kendaraan' => $items->id_kendaraan,
'jenis_mobil' => $items->jenis_mobil,
'overNight' => (int) $items->overnight,
'onExpired' => (int) $items->onexpired,
];
}
)->values();
Log::info('Rekap kendaraan selesai', [
'total_kendaraan' => $tunai->count()
]);
Log::info('== allReportData END ==', [
'total_time_ms' => round((microtime(true) - $start) * 1000, 2)
]);
return response()->json([
// 'date' => $startDate->format('Y-m-d'),÷
'date' => $startDate,
'tunai' => $tunai,
'nontunai' => $cashless,
'overNight' => $onCheck
// 'transactions' => $transactions->groupBy('id_kendaraan')
]);
}
}
@@ -0,0 +1,88 @@
<?php
namespace App\Http\Controllers\Parking\Setup\Gate;
use App\Http\Controllers\Controller;
use App\Models\NamaPos;
use Illuminate\Http\Request;
class MasterGateController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$Gate = NamaPos::orderBy('id')->get();
return view ('setup.gate.gate', compact('Gate'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,90 @@
<?php
namespace App\Http\Controllers\Parking\Setup\Gate;
use App\Http\Controllers\Controller;
use App\Models\ConfigHardware;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class MasterGateHardwareController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
Log::info($id);
$gateDetails = ConfigHardware::where('id_pos', $id)->first();
return $gateDetails;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
Log::info($id);
Log::info($request->all());
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Parking\Setup\Gate;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class MasterGateParameterController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,93 @@
<?php
namespace App\Http\Controllers\Parking\Setup\UserLevel;
use App\Http\Controllers\Controller;
use App\Models\LevelPegawai;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class LevelUserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$leveluser = Auth()->User()->level_pegawai;
Log::info((int) $leveluser);
$levelAvail = LevelPegawai::where("level_code", ">=", $leveluser)->orderBy("level_id")->get();
return view("setup.UserLevel.level-user", compact("levelAvail"));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,90 @@
<?php
namespace App\Http\Controllers\Parking\Setup\Vehicle;
use App\Http\Controllers\Controller;
use App\Models\VehicleItem;
use Illuminate\Http\Request;
class MasterVehicleController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$vehicle = VehicleItem::orderBy('id')->get();
// dd($vehicle);
return view ('setup.vehicle.vehicle', compact('vehicle'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,128 @@
<?php
namespace App\Http\Controllers\Parking\Setup\Vehicle;
use App\Http\Controllers\Controller;
use App\Models\MasterTarif;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class ModifiedVehiclepriceController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
// Log::info($id);
$id = str($id);
$vehicleRates = DB::table("tarif")->where("id_mobil", $id)->first();
Log::info(json_encode($vehicleRates));
return $vehicleRates;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
Log::info($request->all());
// $id = $request->id_mobil;
$dataQuery = MasterTarif::find($id);
try {
Log::info($request->all());
$dataQuery->fill($request->all());
if (!$dataQuery->isDirty()) {
return response()->json([
"status" => false,
"message" => "Tidak ada perubahan data",
]);
}
Log::info(
"Data yang di simpan" . json_encode($dataQuery->getDirty()),
);
$dataQuery->save();
return response()->json([
"status" => true,
"message" => "Data berhasil di ubah",
]);
} catch (\Throwable $th) {
Log::info(
"Data yang di simpan" . json_encode($dataQuery->getDirty()),
);
// Log::info($request->all());
return response()->json([
"status" => false,
"message" => "Gagal menyimpan data " . $th->getMessage(),
]);
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,135 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class SetupController extends Controller
{
public function index()
{
$status = [
'pgcrypto' => $this->checkPgcrypto(),
'pegawai_columns' => $this->checkPegawaiColumns(),
'users_view' => $this->checkUsersView(),
'veri_time' => Schema::hasColumn('transaksi_parkir', 'veri_time'),
];
return view('welcome', compact('status'));
}
public function run()
{
DB::beginTransaction();
try {
// 1. pgcrypto
if (!$this->checkPgcrypto()) {
DB::statement('CREATE EXTENSION IF NOT EXISTS pgcrypto');
}
// 2. Kolom tabel pegawai
$this->ensurePegawaiColumn('id', "ALTER TABLE pegawai ADD COLUMN id SERIAL PRIMARY KEY");
$this->ensurePegawaiColumn('email', "ALTER TABLE pegawai ADD COLUMN email VARCHAR(64)");
$this->ensurePegawaiColumn('email_verified_at', "ALTER TABLE pegawai ADD COLUMN email_verified_at VARCHAR(64)");
$this->ensurePegawaiColumn('remember_token', "ALTER TABLE pegawai ADD COLUMN remember_token VARCHAR(64)");
// 3. View users
if (!$this->checkUsersView()) {
DB::statement("
CREATE OR REPLACE VIEW users AS
SELECT
id,
nomer,
nama,
username,
crypt(password, gen_salt('bf')) AS password,
email,
email_verified_at,
foto,
bisalogin,
status,
statusabsen,
level_pegawai,
remember_token
FROM pegawai
");
}
// 4. Kolom veri_time
if (!Schema::hasColumn('transaksi_parkir', 'veri_time')) {
Schema::table('transaksi_parkir', function ($table) {
$table->timestamp('veri_time')->nullable();
});
}
DB::commit();
// return redirect()->back()->with('success', 'Setup berhasil dijalankan ✅');
return response()->json([
'success' => true,
'redirect' => url('/login') // ganti ke /dashboard kalau mau
]);
} catch (\Throwable $e) {
DB::rollBack();
// return redirect()->back()->with('error', $e->getMessage());
return response()->json([
'success' => false,
'message' => $e->getMessage()
], 500);
}
}
/* =========================
Helper
========================= */
private function checkPgcrypto()
{
// $result = DB::select("
// SELECT 1
// FROM pg_extension
// WHERE extname = 'pgcrypto'
// ");
// return !empty($result);
try {
DB::select("SELECT digest('test','sha1')");
return true;
} catch (\Exception $e) {
return false;
}
}
private function checkPegawaiColumns()
{
return [
'id' => Schema::hasColumn('pegawai', 'id'),
'email' => Schema::hasColumn('pegawai', 'email'),
'email_verified_at' => Schema::hasColumn('pegawai', 'email_verified_at'),
'remember_token' => Schema::hasColumn('pegawai', 'remember_token'),
];
}
private function checkUsersView()
{
$result = DB::select("
SELECT 1
FROM information_schema.views
WHERE table_name = 'users'
");
return !empty($result);
}
private function ensurePegawaiColumn($column, $sql)
{
if (!Schema::hasColumn('pegawai', $column)) {
DB::statement($sql);
}
}
}
@@ -0,0 +1,99 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class StikerController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$vehicleSelect = DB::table('jenis_mobil')->orderBy('id')->get();
$departmentSelect = DB::table('stasiunkerja')->get();
$memberSelect = DB::table('jenis_langganan')->get();
$jenisStiker = DB::table('tarif_stiker')->get();
return view('stiker.stiker', compact([
// return view('member.member', compact([
'vehicleSelect',
'departmentSelect',
'memberSelect',
'jenisStiker',
]));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
Log::info($id);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,52 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
class StreamerController extends Controller
{
public function index ()
{
$urlGet = DB::table('config_pos_hardware')
->select('video1_conn')
->where('id_pos', 'PK1')
->first();
// Log::info(json_encode($$urlStream->video1_conn));
$urlStream = $urlGet->video1_conn;
return view('streaming', compact('urlStream'));
}
public function streamSnapshot()
{
// Ambil URL kamera dan autentikasi
// $url = "http://192.168.200.211/ISAPI/streaming/channels/1/picture"; // Contoh hardcoded
// $url = "http://192.168.10.61/cgi-bin/snapshot.cgi"; // Contoh hardcoded
$url = "http://admin:[email protected]/cgi-bin/snapshot.cgi"; // Contoh hardcoded
$username = "admin"; // Ganti dengan username
$password = "metal4RC"; // Ganti dengan password kantor
$password = "admin12345"; // Ganti dengan password
try {
// Menggunakan Digest Authentication
$response = Http::withDigestAuth($username, $password)->get($url); //Auth Digest
$response = Http::get($url); //Auth Basic
if ($response->successful()) {
// Kirimkan gambar langsung ke browser
return response($response->body(), 200)
->header('Content-Type', 'image/jpeg');
} else {
return response("Gagal mendapatkan snapshot", 500);
}
} catch (\Exception $e) {
return response("Error: " . $e->getMessage(), 500);
}
}
}
@@ -0,0 +1,147 @@
<?php
namespace App\Http\Controllers\Parking\Tools;
use App\Http\Controllers\Controller;
use App\Models\TransaksiStiker;
use App\Services\MakeStikerServices;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class StikerExtendedController extends Controller
{
// protected function ;
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$jenisLangganan = DB::table('jenis_langganan')->get();
// dd($jenisLangganan);
return view ('tools.stiker-extend', compact('jenisLangganan'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request, MakeStikerServices $makeStiker)
{
$request->validate([
'jenis_langganan' => 'required|array|min:1',
'jenis_langganan.*' => 'string',
'tanggal_mulai' => 'required|date',
'tanggal_selesai' => 'required|date|after:tanggal_mulai',
]);
$blnKemarin = Carbon::now()->subMonth()->format('Y-m');
$start = Carbon::now()->subMonth()->startOfMonth();
$end = Carbon::now()->subMonth()->endOfMonth();
$tanggalMulai = Carbon::parse($request->tanggal_mulai);
$tanggalSelesai = Carbon::parse($request->tanggal_selesai);
$sticker = TransaksiStiker::select('notrans')
->whereIn('jenis_langganan', $request->jenis_langganan)
// ->whereRaw("to_char(tgl_edited, 'YYYY-MM') = ?", [$blnKemarin])
->whereBetween('tgl_edited', [$start, $end])
->get();
// $sticker = DB::table('mergetransaksistikerdetail')->whereIn('jenis_langganan', $request->jenis_langganan)->get();
$jumlah = $sticker->count();
foreach ($sticker as $row) {
// $makeStiker->stikerExtend($sticker);
$makeStiker->stikerExtend(
$row,
$tanggalMulai,
$tanggalSelesai
);
}
return response()->json([
'status' => true,
'message' => 'Stiker berhasil diproses',
'jumlah' => $jumlah,
]);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id, Request $request)
{
Log::info($id);
$start = Carbon::now()->subMonth()->startOfMonth();
$end = Carbon::now()->subMonth()->endOfMonth();
Log::info($start);
Log::info($end);
$blnKemarin = Carbon::now()->subMonth()->format('Y-m');
Log::info($blnKemarin);
// $selected = $request->pilihannya;
$selected = $id;
$count = DB::table('transaksi_stiker')
->where('jenis_langganan', $selected)
// ->whereRaw("to_char(tgl_edited, 'YYYY-MM') = ?", [$blnKemarin])
->whereBetween('tgl_edited', [$start, $end])
->get();
$jumlah = $count->count();
return response()->json([
'jumlah' => $jumlah
]);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers\Parking\Tools;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class TransactionChangeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view ('tools.koreksi-transaksi');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,559 @@
<?php
namespace App\Http\Controllers\Parking;
use App\Http\Controllers\Controller;
use App\Models\TransaksiParkir;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Yajra\DataTables\Facades\DataTables;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\Http;
class VerifyTransController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function skipMember ()
{
$transaksi = TransaksiParkir::leftjoin('jenis_mobil as jm','transaksi_parkir.id_kendaraan','=','jm.id')
->leftjoin('nama_pos as np_masuk', 'transaksi_parkir.id_pintu_masuk','=','np_masuk.id')
->leftjoin('nama_pos as np_keluar', 'transaksi_parkir.veri_kode','=','np_keluar.id')
->select('transaksi_parkir.id','transaksi_parkir.no_pol','jm.nama as jenis_mobil','transaksi_parkir.waktu_masuk','transaksi_parkir.status_transaksi',
'np_masuk.nama as id_pintu_masuk','np_keluar.nama as veri_kode',
'transaksi_parkir.veri_date as waktu_keluar','transaksi_parkir.veri_check')
/* --- Production -----*/
->where('transaksi_parkir.veri_check','1')
// ->whereNotNull('transaksi_parkir.veri_check')
->orderbydesc('transaksi_parkir.veri_date')
/* --- debuging -----*/
// ->where('transaksi_parkir.status','0')
// ->where('transaksi_parkir.id_kendaraan', 'Mobil')
// ->where('transaksi_parkir.id_pintu_masuk', '01')
// ->orderbydesc('transaksi_parkir.waktu_masuk')
/* ------------------*/
->limit(3)
->get();
Log::info(json_encode($transaksi));
if ($transaksi->status_transaksi && $transaksi->status_transaksi == 3) {
$dateNow = Carbon::now();
DB::table('transaksi_parkir')
->where('no_pol', $transaksi->no_pol )
->update(['veri_check' => 2,
'veri_date' => $dateNow,
'veri_adm' => 'SYSTEM'
]);
// $response = true;
// $message = [
// 'no_pol' => $RealtimeTrans->no_pol,
// 'message' => 'member skipped'
// ];
}
return $transaksi;
}
public function index(Request $request)
{
if ($request->ajax()) {
$transaksi = TransaksiParkir::leftjoin('jenis_mobil as jm','transaksi_parkir.id_kendaraan','=','jm.id')
->leftjoin('nama_pos as np_masuk', 'transaksi_parkir.id_pintu_masuk','=','np_masuk.id')
->leftjoin('nama_pos as np_keluar', 'transaksi_parkir.id_pintu_keluar','=','np_keluar.id')
->select('transaksi_parkir.id','transaksi_parkir.no_pol','jm.nama','transaksi_parkir.waktu_masuk',
'transaksi_parkir.veri_date as waktu_keluar',
// 'transaksi_parkir.id_pintu_masuk','transaksi_parkir.id_pintu_keluar',
'np_masuk.nama as id_pintu_masuk','np_keluar.nama as id_pintu_keluar',
'transaksi_parkir.veri_check','transaksi_parkir.veri_kode','transaksi_parkir.status_transaksi')
/* --- Production -----*/
->where('transaksi_parkir.veri_check','1')
// ->whereNotNull('transaksi_parkir.veri_check')
->orderbydesc('transaksi_parkir.veri_date')
/* --- debuging -----*/
// ->where('transaksi_parkir.status','0')
// ->where('transaksi_parkir.id_kendaraan', 'Mobil')
// ->where('transaksi_parkir.id_pintu_masuk', '01')
// ->orderbydesc('transaksi_parkir.waktu_masuk')
/* ------------------*/
->limit(3)
->get();
// Log::info($transaksi);
// $data = [];
foreach ($transaksi as $data) {
if ($data->status_transaksi && $data->status_transaksi == '3') {
$dateNow = Carbon::now();
$query = DB::table('transaksi_parkir')
->where('no_pol', $data->no_pol )
->where('status', 1)
->update(['veri_check' => 2,
'veri_date' => $dateNow,
'veri_adm' => 'SYSTEM'
]);
Log::info('Member update ' . $query);
// $response = true;
// $message = [
// 'no_pol' => $RealtimeTrans->no_pol,
// 'message' => 'member skipped'
// ];
}
// $transaksi = $data;
Log::info($transaksi);
}
$data = $transaksi;
// Log::info($transaksi);
$table = DataTables::of($data)
->addIndexColumn()
->addColumn('id', function($row){
return $row->id;
})
->addColumn('no_pol', function($row){
return $row->no_pol ?? '';
})
->addColumn('jenis_mobil', function($row){
return $row->jenis_mobil ?? '';
})
->addColumn('waktu_masuk', function($row){
return $row->waktu_masuk ?? '';
})
->addColumn('waktu_keluar', function($row){
return $row->waktu_keluar ?? '';
})
->addColumn('id_pintu_masuk', function($row){
// return $row->id_pintu_masuk ?? '';
return '<span class="badge badge-pill badge-secondary">'.$row->id_pintu_masuk.'</span>' ?? '';
})
->addColumn('out_gate', function($row){
// return $row->veri_kode ?? '';
return '<span class="badge badge-pill badge-success">'.$row->veri_kode.'</span>' ?? '';
})
->addColumn('status', function($row){
return $row->veri_check ?? '';
})
->rawColumns(['id_pintu_masuk','out_gate']);
return $table->make(true);
}
return view('verify');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
// private function getCurlImage ($url)
// {
// $ch = curl_init();
// curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// $result = curl_exec($ch);
// if (curl_errno($ch)) {
// Log::error('cURL error: ' . curl_error($ch));
// $result = false;
// }
// curl_close($ch);
// return $result;
// Log::info($result);
// }
// private function getCurlImage($url)
// {
// // Decode URL to ensure it's correctly formatted
// $url = htmlspecialchars_decode($url);
// $parsedUrl = parse_url($url);
// // Mengambil bagian 'user' dan 'pass' dari URL
// $user = $parsedUrl['user'] ?? null;
// $pass = $parsedUrl['pass'] ?? null;
// $ch = curl_init();
// curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
// curl_setopt($ch, CURLOPT_USERPWD, $user . ':' . $pass); // Username dan password
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// curl_setopt($ch, CURLOPT_HTTPHEADER, [
// 'Content-Type: image/jpeg', // Ubah sesuai tipe konten yang diharapkan
// 'Accept: image/jpeg'
// // 'WWW-Authenticate: Digest'
// ]);
// $result = curl_exec($ch);
// if (curl_errno($ch)) {
// Log::error('cURL error: ' . curl_error($ch));
// $result = false;
// } else {
// $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// if ($http_code != 200) {
// Log::error('HTTP error: ' . $http_code);
// $result = false;
// }
// }
// curl_close($ch);
// // Log response headers
// Log::info('cURL response headers: ' . json_encode(curl_getinfo($ch)));
// // Optional: Log the response if it's not an image
// if ($result !== false && @imagecreatefromstring($result) === false) {
// Log::error('Invalid image data received');
// $result = false;
// }
// return $result;
// }
private function getCurlImage($url)
{
// Decode URL to ensure it's correctly formatted
$url = htmlspecialchars_decode($url);
$parsedUrl = parse_url($url);
// Mengambil bagian 'user' dan 'pass' dari URL
$user = $parsedUrl['user'] ?? null;
$pass = $parsedUrl['pass'] ?? null;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, $user . ':' . $pass); // Username dan password
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: image/jpeg', // Ubah sesuai tipe konten yang diharapkan
'Accept: image/jpeg'
]);
$result = curl_exec($ch);
if (curl_errno($ch)) {
Log::error('cURL error: ' . curl_error($ch));
$result = false;
} else {
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code != 200) {
Log::error('HTTP error: ' . $http_code);
$result = false;
}
}
curl_close($ch);
// Log response headers
Log::info('cURL response headers: ' . json_encode(curl_getinfo($ch)));
// Optional: Log the response if it's not an image
// if ($result !== false) {
// // Check if the result is a valid image
// if (@imagecreatefromstring($result) === false) {
// Log::error('Invalid image data received');
// $result = false;
// } else {
// Convert the image data to base64
$result = base64_encode($result);
// $path = storage_path('app/public'); // Path direktori
// $imagePath = $path . '/image.jpeg';
// // Buat direktori jika belum ada
// if (!file_exists($path)) {
// mkdir($path, 0755, true); // Buat direktori dengan izin 0755, dan buat sub-direktori jika diperlukan
// }
// // Optionally, save the image to a file for testing
// // file_put_contents('storage/app/public/image.jpeg', $result); // Adjust path and filename
// file_put_contents($imagePath, $result);
// }
// }
return $result;
}
public function showImages(Request $request)
{
try {
$transaksi = TransaksiParkir::where('id', $request->id)
->select('id','no_pol','pic_body_masuk','pic_body_keluar','pic_driver_masuk',
'pic_driver_keluar','pic_no_pol_masuk','pic_no_pol_keluar','veri_kode')
->where('no_pol', $request->no_pol)
->firstOrFail();
Log::info(json_encode($transaksi));
$getCamera = DB::table('config_pos_hardware')
->select('video1_conn as body_cam','video2_conn as drive_cam')
->where('id_pos', $transaksi->veri_kode)
->first();
Log::info(json_encode($getCamera));
// Log::info($getCamera);
/* Body Masuk */
if (!empty($transaksi->pic_body_masuk) && is_resource($transaksi->pic_body_masuk)) {
$transaksi->pic_body_masuk = base64_encode(stream_get_contents($transaksi->pic_body_masuk)) ?? 'Tidak ada FOTO';
} else {
$transaksi->pic_body_masuk = 'Tidak ada foto';
}
$baseIn =
Log::info(json_encode('foto masuk' .$transaksi->pic_body_masuk));
/* Driver Masuk */
if (!empty($transaksi->pic_driver_masuk) && is_resource($transaksi->pic_driver_masuk)) {
$transaksi->pic_driver_masuk = base64_encode(stream_get_contents($transaksi->pic_driver_masuk)) ?? 'Tidak ada FOTO';
} else {
$transaksi->pic_driver_masuk = 'Tidak ada foto';
}
Log::info(json_encode($transaksi->pic_driver_masuk));
$ImgBodyOut = $this->getCurlImage($getCamera->body_cam);
$ImgDriveOut = $this->getCurlImage($getCamera->drive_cam);
// Log::info([$ImgBodyOut]);
// Log untuk memastikan URL benar
// Log::info('Body Cam URL: ' . $getCamera->body_cam);
// Log::info('Drive Cam URL: ' . $getCamera->drive_cam);
// $ImgBodyOut = $this->getCurlImage($getCamera->body_cam);
// // try {
// $ImgBodyOut = Http::accept('image/jpeg')
// ->withOptions(['verify' => false,])
// ->withHeaders(['Authorization' => 'Digest username="admin", realm="your_realm", nonce="nonce_value", response="response_hash"'])
// ->get('http://192.168.200.64/ISAPI/streaming/channels/1/picture');
// if ($ImgBodyOut->successful()) {
// Konversi gambar ke base64
// $ImgBodyOut = base64_encode($ImgBodyOut->body());
// } else {
// Log::error('Failed to get image. Status code: ' . $ImgBodyOut->status());
// return 'Tidak ada foto';
// }
// } catch (\Exception $e) {
// return response()->json([
// 'message' => 'Gagal mengambil gambar',
// 'error' => $e->getMessage(),
// ], 500);
// }
// ])->get($getCamera->body_cam);
// ])->get('http://192.168.200.64/ISAPI/streaming/channels/1/picture&auth=digest&username=admin&password=rootjuga1');
// $ImgDriveOut = $this->getCurlImage($getCamera->drive_cam);
// Log hasil cURL
Log::info('ImgBodyOut: ' . ($ImgBodyOut ? 'Image received' : 'Failed to get image'));
// Log::info('ImgDriveOut: ' . ($ImgDriveOut ? 'Image received' : 'Failed to get image'));
// dd($transaksi);
return response()->json([
'pic_masuk' => $transaksi->pic_body_masuk,
'driver_masuk' => $transaksi->pic_driver_masuk,
'pic_keluar' => $ImgBodyOut,
'driver_keluar' => $ImgDriveOut,
]);
} catch (\Exception $e) {
Log::error('Error fetching data: ' . $e->getMessage());
return response()->json(['error' => 'Data not found or other error'], 500);
}
}
// $transaksi = TransaksiParkir::where('id', $request->id)->where('no_pol', $request->no_pol)->firstOrfail();
// // $pic_masuk = $transaksi->pic_body_masuk ? base64_encode(stream_get_contents($transaksi->pic_body_masuk)) : null;
// $transaksi->pic_body_masuk = base64_encode(stream_get_contents($transaksi->pic_body_masuk));
// // } catch (\Exception $e) {
// // return response()->json([
// // 'message' => 'Gagal mengambil gambar',
// // 'error' => $e->getMessage(),
// // ], 500);
// // }
// return response()->json([
// 'transaksi' => $transaksi,
// // 'pic_masuk' => $pic_masuk,
// // // 'pic_keluar' => $pic_keluar,
// ]);
// public function show($no_pol)
// {
// $transaksi = TransaksiParkir::where('no_pol', $no_pol)->orderBy('waktu_masuk','desc')->first();
// // if($transaksi->veri_kode) {
// // $paramsBodyKeluar = DB::table('config_pos_hardware')->select('video1_conn')->where('id_pos', $transaksi->veri_kode)->first();
// // }
// dd($no_pol,json_encode($transaksi));
// try {
// $pic_masuk = $transaksi->pic_body_masuk ? base64_encode(stream_get_contents($transaksi->pic_body_masuk)) : null;
// } catch (\Exception $e) {
// return response()->json([
// 'message' => 'Gagal mengambil gambar',
// 'error' => $e->getMessage(),
// ], 500);
// }
// if($paramsBodyKeluar) {
// // $pic_keluar = file_get_contents ($paramsBodyKeluar->video1_conn);
// $pic_keluar = $this->getCurlImage($paramsBodyKeluar->video1_conn);
// } else {
// }
// $pic_masuk = '';
// if ($transaksi->pic_body_masuk) {
// try {
// $pic_masuk = base64_encode(stream_get_contents($transaksi->pic_body_masuk));
// } catch (\Exception $e) {
// // Tangani kesalahan saat mengambil gambar
// Log::error('Gagal mengambil gambar masuk: ' . $e->getMessage());
// }
// }
// $pic_keluar = null;
// // Mengambil gambar keluar dari koneksi video1_conn jika ada
// if ($paramsBodyKeluar && $paramsBodyKeluar->video1_conn) {
// try {
// $pic_keluar = $this->getCurlImage($paramsBodyKeluar->video1_conn);
// // $pic_keluar_content = file_get_contents($paramsBodyKeluar->video1_conn);
// // if ($pic_keluar_content !== false) {
// // $pic_keluar = base64_encode($pic_keluar_content);
// // }
// } catch (\Exception $e) {
// // Tangani kesalahan saat mengambil gambar
// $pic_keluar = null;
// Log::error('Gagal mengambil gambar keluar: ' . $e->getMessage());
// }
// }
// dd($transaksi);
// $pic_masuk = base64_encode(stream_get_contents($transaksi->pic_body_masuk));
// dd($transaksi,$pic_masuk);
// // $pic_keluar = base64_encode(stream_get_contents($transaksi->pic_body_keluar));
// // $pic_keluar = $transaksi->pic_body_keluar ? base64_encode(stream_get_contents($transaksi->pic_body_keluar)) : null;
// // Mengembalikan gambar dalam format JSON
// return response()->json([
// 'pic_masuk' => $pic_masuk,
// // 'pic_keluar' => $pic_keluar,
// ]);
// // return view('verify', [
// // 'transaksi' => $transaksi,
// // 'pic_masuk' => $pic_masuk,
// // 'pic_keluar' => $pic_keluar,
// // ]);
// // return response()->json($transaksi);
// }
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
try {
Log::info([$id, $request->no_pol]);
$no_pol = $request->input('no_pol');
$user = Auth::user()->nomer;
$dateNow = Carbon::now();
$data = TransaksiParkir::where('id',$id)->where('no_pol',$no_pol)->orderBy('waktu_masuk','desc')->first(); // Ganti YourModel dengan nama model Anda
// $data->veri_check = 2;
$data->veri_check = $request->input('veri_check');
$data->veri_adm = $user;
$data->veri_time = $dateNow;
$data->save();
return response()->json([
'message' => 'Data berhasil diperbarui',
]);
} catch (Exception $e) {
return response()->json([
'message' => 'Gagal melakukan update',
'error' => $e->getMessage(),
], 500);
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}