From efdea9d73975cfee17a19ac62236d8e463524ee7 Mon Sep 17 00:00:00 2001 From: pand03-CEO Date: Mon, 31 Aug 2026 19:42:09 +0700 Subject: [PATCH] update api memberin --- .../Api/V1/Memberin/MemberinController.php | 310 ++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 app/Http/Controllers/Api/V1/Memberin/MemberinController.php diff --git a/app/Http/Controllers/Api/V1/Memberin/MemberinController.php b/app/Http/Controllers/Api/V1/Memberin/MemberinController.php new file mode 100644 index 0000000..495da61 --- /dev/null +++ b/app/Http/Controllers/Api/V1/Memberin/MemberinController.php @@ -0,0 +1,310 @@ +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) + { + // + } +}