validate([ 'dataSticker' => 'required|array', 'dataSticker.jenis_transaksi' => 'required', 'dataSticker.notrans' => 'required|string', 'dataSticker.no_id' => 'required|string', 'dataSticker.nama' => 'required|string', 'dataSticker.depart' => 'required', 'dataSticker.member' => 'required', 'dataSticker.awal' => 'required|date', 'dataSticker.akhir' => 'required|date|after:dataSticker.awal', 'dataVehicle' => 'required|array|min:1', 'dataVehicle.*.notrans' => 'required|string', 'dataVehicle.*.nopol' => 'required|string', 'dataVehicle.*.vehicle' => 'required', 'dataVehicle.*.member' => 'required|string', 'dataVehicle.*.merk' => 'nullable|string', 'dataCard' => 'nullable|array', ]); try { $result = $makeStiker->stikerCreate( $validated, Carbon::parse($validated['dataSticker']['awal']), Carbon::parse($validated['dataSticker']['akhir']), ); return $result; } catch (\Throwable $e) { Log::error('Memberin register confirmation failed', [ 'order_id' => $request->input('order_id'), 'error' => $e->getMessage(), ]); return response()->json([ 'status' => false, 'message' => 'Gagal membuat member: ' . $e->getMessage(), ], 500); } } /** * Confirm a paid renewal by extending the existing sticker transaction. */ public function renewConfirm(Request $request, MakeStikerServices $makeStiker) { $validated = $request->validate([ 'notrans' => 'required|string', 'awal' => 'required|date', 'akhir' => 'required|date|after:awal', ]); $sticker = TransaksiStiker::select('notrans') ->where('notrans', $validated['notrans']) ->first(); if (!$sticker) { return response()->json([ 'status' => false, 'message' => 'Transaksi member tidak ditemukan', ], 404); } try { $newTransactionNumber = $makeStiker->stikerExtend( $sticker, Carbon::parse($validated['awal']), Carbon::parse($validated['akhir']), ); return response()->json([ 'status' => true, 'message' => 'Perpanjangan member berhasil diproses', 'notrans' => $newTransactionNumber, ]); } catch (\Throwable $e) { Log::error('Memberin renewal confirmation failed', [ 'order_id' => $request->input('order_id'), 'notrans' => $validated['notrans'], 'error' => $e->getMessage(), ]); return response()->json([ 'status' => false, 'message' => 'Gagal memperpanjang member: ' . $e->getMessage(), ], 500); } } /** * 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, Request $request) { Log::info($id); Log::info($request->query("_filter")); Log::info($request->query("type")); $jenisMobil = JenisMobil::where("validasi", 1)->get(); Log::info("Kendaraan online : " . json_encode($jenisMobil)); $filterJenisLangganan = $request->query("_filter"); $filterStasiunkerjaId = $request->query("type"); // $tarifStiker = AppMasterTarifStiker::all(); if ($filterJenisLangganan) { $jLangganan = MasterJenisLangganan::where("id", $filterJenisLangganan)->first(); } if ($filterStasiunkerjaId) { $stasiunKerja = MasterStasiunKerja::with("tarifStiker") ->where("status", 1) // ->where("stasiunkerja_id", $data->unit_kerja) ->get(); } $dateNow = Carbon::now(); $data = StikerTrans // with("stiker_details.vehicle", "memberCard") ::select( // "transaksi_stiker.*", "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", "transaksi_stiker.unit_kerja", "dts.jenis_mobil as vehicle", "dts.nopol as nopol", "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") ->leftJoin("detail_transaksi_stiker as dts", "dts.notrans", "=", "transaksi_stiker.notrans") ->where("nopol", $id) ->first(); Log::info("Notransnya : " . json_encode($data)); if (!$data) { Log::info("No. Polisi/Data tidak ditemukan"); $data["jenisMobil"] = $jenisMobil ?? []; $data["jenisLangganan"] = $jLangganan ?? []; $data["stasiunKerja"] = $stasiunKerja ?? []; return response()->json([ "status" => "unregister", "expired" => false, "message" => "No. Pol tidak ditemukan", "data" => $data, ]); } $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", $data->notrans) ->get(); $jenisMobil = $vehicleDetails->pluck("jenis_mobil")->unique()->values(); Log::info("Cari jenis mobil : " . $jenisMobil); Log::info("Jenis member : " . $data->unit_kerja); $produkMember = MasterStasiunKerja::with("tarifStiker") ->where("status", 1) // ->where("stasiunkerja_id", $data->unit_kerja) ->get(); // $produkMember = MasterTarifStiker::whereIn("id_mobil", $jenisMobil) // ->where("stasiunkerja_id", $data->unit_kerja) // ->get(); $cardMember = MemberCard::where("notrans", $data->no_id)->get(); $data["stiker_details"] = $vehicleDetails; $data["memberCard"] = $cardMember; $data["produkMember"] = $produkMember; if (!$data) { return response()->json([ "status" => false, "message" => "Member tidak ditemukan", ]); } $akhir = Carbon::parse($data->akhir); // $produkMember = Tar if ($dateNow->greaterThan($akhir)) { Log::info("Data expired : " . json_encode($data)); return response()->json([ "status" => "expired", "expired" => true, "message" => "Member expired", "data" => $data, ]); } else { Log::info("Data active : " . json_encode($data)); return response()->json([ "status" => "active", "expired" => false, "message" => "Member aktif", "data" => $data, ]); } } /** * 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) { // } }