Kumpulan perubahan yang udah numpuk di working tree: refactor Setup (Gate/Vehicle/Member), rapihin memberin & stiker, service parking baru (ParkingUtilsServices, NetworkService), model/migration lot-parking & DHCP reservation, dan fitur baru Intercom (controller/model/migration/ view). ReportTransaksiController versi lokal ini WIP (~90%, masih didebug) - versi yang bener ada di server, jadi dikeluarin dari git (ditambahin ke .gitignore) biar gak numpuk nindihin punya server pas git pull di sana. Sekalian keluarin dump mentah tabel softseting (1.8MB, nyasar ke-commit), file .bak, dan arsip ad-hoc (api.tgz, c.zip) yang emang bukan source code. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01EAJc2mrpj2cSTe4oowLPzQ
430 lines
16 KiB
PHP
430 lines
16 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Parking;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\SoftSettings;
|
|
use App\Models\StikerTrans;
|
|
use App\Models\StikerTransDetail;
|
|
use App\Models\MemberCard;
|
|
use App\Services\MakeStikerServices;
|
|
use Carbon\Carbon;
|
|
use Exception;
|
|
use Illuminate\Support\Str;
|
|
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("stiker.stiker", compact(["vehicleSelect", "departmentSelect", "memberSelect", "jenisStiker"]));
|
|
}
|
|
|
|
public function getMember(Request $request)
|
|
{
|
|
Log::info(json_encode("nama : " . $request->input("search-by")));
|
|
Log::info(json_encode("value : " . $request->input("search_value")));
|
|
Log::info(json_encode("isActive : " . $request->input("isActive")));
|
|
// Log::info(json_encode("veh : " . $request->vehicle));
|
|
// Log::info(json_encode("dept : " . $request->depart));
|
|
// Log::info(json_encode("mem : " . $request->jenismember));
|
|
// Log::info(json_encode("trans : " . $request->notrans));
|
|
// Log::info(json_encode("isactive : " . gettype($request->isactive)));
|
|
$searchBy = $request->input("search-by");
|
|
$searchValue = trim($request->input("search_value", ""));
|
|
|
|
$memberType = $request->input("member_type");
|
|
$unitKerja = $request->input("departement");
|
|
$vehicle = $request->input("vehicle");
|
|
$isActive = $request->input("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();
|
|
|
|
if ($searchBy && $searchValue !== "") {
|
|
switch ($searchBy) {
|
|
case "nama":
|
|
$nama = strtolower($searchValue);
|
|
$NAMA = strtoupper($searchValue);
|
|
$dataStiker->where("ts.nama", "ILIKE", "%{$searchValue}%");
|
|
break;
|
|
case "alamat":
|
|
$dataStiker->where("ts.alamat", "like", "%{$searchValue}%");
|
|
break;
|
|
case "nopol":
|
|
$dataStiker->where("dts.nopol", "like", "%{$searchValue}%");
|
|
break;
|
|
case "nocard":
|
|
$dataStiker->where("cm.nocard", "like", "%{$searchValue}%");
|
|
break;
|
|
case "notrans":
|
|
$dataStiker->where("ts.notrans", "like", "%{$searchValue}%");
|
|
break;
|
|
// case "":
|
|
// $dataStiker->where("ts.nama", "like", "%{$searchValue}%");
|
|
// break;
|
|
}
|
|
}
|
|
|
|
if ($memberType) {
|
|
$dataStiker->where("ts.jenis_langganan", $memberType);
|
|
}
|
|
|
|
if ($unitKerja) {
|
|
$dataStiker->where("ts.unit_kerja", $unitKerja);
|
|
}
|
|
|
|
if ($vehicle) {
|
|
$dataStiker->where("dts.jenis_mobil", $vehicle);
|
|
}
|
|
|
|
if ($request->input("isActive") == "1") {
|
|
$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, MakeStikerServices $makeStiker)
|
|
{
|
|
Log::info("Data yang diterima : " . json_encode($request->all()));
|
|
$mountYearNow = Carbon::now()->format("m/Y");
|
|
|
|
// $cleanedData = stripslashes(trim($data));
|
|
// Log::debug('Modified : ' . json_encode($cleanedData));
|
|
// $dataStiker = json_decode($cleanedData, false);
|
|
// Log::info('Debuggind data : ' . json_encode($dataStiker));
|
|
$getTrans = DB::table("indexnum")
|
|
->whereIn("nama", ["TRX", "IDN"])
|
|
->pluck("value", "nama");
|
|
$noTrans = $getTrans->get("TRX");
|
|
$noID = $getTrans->get("IDN");
|
|
|
|
// Log::info("Get Trans : " . json_encode($getTrans));
|
|
// Log::info("No Trans : " . $noTrans);
|
|
// Log::info("No ID : " . $noID);
|
|
|
|
$noTransFormat = str_pad($noTrans, 5, "0", STR_PAD_LEFT);
|
|
$noIDFormat = str_pad($noID, 5, "0", STR_PAD_LEFT);
|
|
|
|
$getLocation = SoftSettings::first();
|
|
Log::info("Namalokasi : " . json_encode($getLocation->namalokasi));
|
|
$ignore = ["RS", "PT", "CV", "TBK"];
|
|
$nama = preg_replace("/[^A-Za-z0-9 ]/", "", $getLocation->namalokasi);
|
|
$kata = preg_split("/\s+/", trim($nama));
|
|
$identity = "";
|
|
foreach ($kata as $k) {
|
|
if (in_array(strtoupper($k), $ignore)) {
|
|
continue;
|
|
}
|
|
|
|
$identity .= strtoupper($k[0]);
|
|
}
|
|
|
|
$randomNumber = strtoupper(Str::random(6));
|
|
|
|
$newTrans = "TRX-" . $identity . "-" . Carbon::now()->format("Ymd-His") . "-" . $randomNumber;
|
|
$newID = "IDN-" . $identity . "-" . Carbon::now()->format("Ymd-His") . "-" . $randomNumber;
|
|
// $noid = $seqId->value . "-IDT-" . $mountYearNow;
|
|
// $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();
|
|
|
|
// // Log::info($user);
|
|
|
|
$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));
|
|
|
|
if ($dataStiker["periode"]) {
|
|
$periode = explode(" - ", $dataStiker["periode"]);
|
|
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]);
|
|
} else {
|
|
$awal = Carbon::createFromFormat("d-m-Y H:i", $dataStiker["awal"]);
|
|
$akhir = Carbon::createFromFormat("d-m-Y H:i", $dataStiker["akhir"]);
|
|
}
|
|
Log::info("Awal : " . $awal . " Akhir : " . $akhir);
|
|
|
|
$dataStiker["notrans"] = $newTrans;
|
|
$dataStiker["no_id"] = $newID;
|
|
$dataStiker["awal"] = $awal;
|
|
$dataStiker["akhir"] = $akhir;
|
|
|
|
if (!empty($dataVehicle)) {
|
|
foreach ($dataVehicle as &$vehicle) {
|
|
$vehicle["notrans"] = $newTrans;
|
|
}
|
|
}
|
|
|
|
if (!empty($dataCard)) {
|
|
foreach ($dataCard as &$cardNumber) {
|
|
$cardNumber["notrans"] = $newID;
|
|
}
|
|
}
|
|
|
|
$createData = $makeStiker->stikerCreate(
|
|
[
|
|
"dataSticker" => $dataStiker,
|
|
"dataVehicle" => $dataVehicle ?? null,
|
|
"dataCard" => $dataCard ?? null,
|
|
],
|
|
$awal,
|
|
$akhir,
|
|
);
|
|
|
|
Log::info("Status penyimpanan : " . $createData);
|
|
|
|
// 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 $createData;
|
|
// return response()->json([
|
|
// // "response" => $response,
|
|
// "response" => $createData,
|
|
// "pesan" => $createData,
|
|
// ]);
|
|
}
|
|
|
|
/**
|
|
* 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",
|
|
"transaksi_stiker.harga",
|
|
"jl.nama as jmember",
|
|
"sk.nama as dept",
|
|
// "detail_transaksi_stiker.nama",
|
|
// "detail_transaksi_stiker.tarif",
|
|
)
|
|
->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();
|
|
|
|
$vehicleDetails = StikerTransDetail::query()
|
|
->from("detail_transaksi_stiker as dts")
|
|
->select("jm.nama as vehicle", "ts.tarif", "dts.*")
|
|
->leftJoin("jenis_mobil as jm", "dts.jenis_mobil", "=", "jm.id")
|
|
->leftJoin("tarif_stiker as ts", function ($join) {
|
|
$join->on("dts.jenis_member", "=", "ts.jenis_langganan")->on("dts.jenis_mobil", "=", "ts.id_mobil");
|
|
})
|
|
->where("notrans", $dataStiker->notrans)
|
|
->get();
|
|
|
|
$cardMember = MemberCard::where("notrans", $dataStiker->no_id)->get();
|
|
|
|
$dataStiker["stiker_details"] = $vehicleDetails;
|
|
$dataStiker["memberCard"] = $cardMember;
|
|
// $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)
|
|
{
|
|
//
|
|
}
|
|
}
|