where("nama", "sticker")->lockForUpdate()->first(); // $mountYearNow = Carbon::now()->format("m-Y"); // $nextIndex = str_pad($index->value + 1, 4, "0", STR_PAD_LEFT); // Ambil sequence Stiker dan Identitas // $seqTrans = DB::table("indexnum")->select("value")->where("nama", "sticker")->first(); // $seqId = DB::table("indexnum")->select("value")->where("nama", "identitas")->first(); // Parsing format stiker dan identitas // $notrans = $seqTrans->value . "-STK-" . $mountYearNow; // $noid = $seqId->value . "-IDT-" . $mountYearNow; // $periode = explode(" - ", $dataStiker["periode"]); // $awal = Carbon::createFromFormat("d-m-Y H:i", $periode[0]); // $akhir = Carbon::createFromFormat("d-m-Y H:i", $periode[1]); $user = Auth::user(); $dateNow = Carbon::now()->format("Y-m-d H:i:s"); // Parcing data yang diterima $dataStiker = $request["dataSticker"]; $dataVehicle = $request["dataVehicle"]; $dataCard = $request["dataCard"]; try { $dataStiker = [ "jenis_transaksi" => $dataStiker["jenis_transaksi"], // 0 = transaksi baru , 1 = perpanjangan "notrans" => $dataStiker["notrans"], "no_id" => $dataStiker["no_id"], "nama" => $dataStiker["nama"], "alamat" => $dataStiker["address"] ?? "", "telepon" => $dataStiker["phone"] ?? "", "unit_kerja" => $dataStiker["depart"], "jenis_stiker" => $dataStiker["member"], "awal" => $dataStiker["awal"], "akhir" => $dataStiker["akhir"], "harga" => $dataStiker["harga"] ?? 0, "keterangan" => $dataStiker["note"] ?? "", "tanggal" => $dateNow, "operator" => $user?->nomer ?? "", ]; DB::table("transaksi_stiker")->insert($dataStiker); if (!empty($dataVehicle)) { foreach ($dataVehicle as $nopol) { Log::info(json_encode($nopol)); $produkMember = explode(" - ", $nopol["member"]); $insertVehicle = [ "notrans" => $nopol["notrans"], "nopol" => $nopol["nopol"], "jenis_mobil" => $nopol["vehicle"], "jenis_member" => $produkMember[0], "merk" => $nopol["merk"], ]; DB::table("detail_transaksi_stiker")->insert($insertVehicle); } } if (!empty($dataCard)) { foreach ($dataCard as $cardNumber) { $insertCard = [ "notrans" => $cardNumber["notrans"], "no_card" => $cardNumber["nocard"], "no_urut" => $cardNumber["nourut"], ]; DB::table("card_member")->insert($insertCard); } } // DB::table("indexnum") // ->where("nama", "sticker") // // ->update(["value" => DB::raw("lpad(to_number(value,'9999')+1)::text, 4, '0')")]); // ->update(["value" => $newNoTrans]); // DB::table("indexnum") // ->where("nama", "identitas") // // ->update(["value" => DB::raw("lpad(to_number(value,'9999')+1)::text, 4, '0')")]); // ->update(["value" => $newNoID]); return response()->json([ "status" => true, "message" => "Data berhasil di simpan", ]); } catch (\Exception $e) { return response()->json([ "status" => false, "message" => "Gagal menyimpan data " . $e->getMessage() . $e->getLine(), ]); } }); } public function stikerExtend($sticker, Carbon $awal, Carbon $akhir) { Log::info(json_encode($sticker)); return DB::transaction(function () use ($sticker) { // LOCK index agar aman $index = DB::table("indexnum")->where("nama", "sticker")->lockForUpdate()->first(); $nextIndex = str_pad($index->value + 1, 4, "0", STR_PAD_LEFT); // update index DB::table("indexnum") ->where("nama", "sticker") ->update(["value" => $nextIndex]); $notrans = sprintf("%s-STK-%s-%s", $nextIndex, Carbon::now()->format("m"), Carbon::now()->format("Y")); $transStiker = TransaksiStiker::where("notrans", $sticker->notrans)->first(); $detailTransStiker = DetailTransaksiStiker::where("notrans", $sticker->notrans)->first(); Log::info(json_encode($transStiker)); Log::info(json_encode($detailTransStiker)); // HEADER DB::table("transaksi_stiker")->insert([ "notrans" => $notrans, "nama" => $transStiker->nama, "alamat" => $transStiker->alamat, "telepon" => $transStiker->telepon, "jenis_transaksi" => $transStiker->jenis_transaksi, "harga" => $transStiker->harga, "keterangan" => $transStiker->keterangan, "tanggal" => Carbon::now(), "awal" => Carbon::now()->startOfMonth(), "akhir" => Carbon::now()->endOfMonth(), "maks" => $transStiker->maks, "no_id" => $transStiker->no_id, "unit_kerja" => $transStiker->unit_kerja, "no_induk" => $transStiker->no_induk, "area" => $transStiker->area, "jenis_stiker" => 1, "unitno" => $transStiker->unitno, "exit_pass" => $transStiker->exit_pass, "hari_ke" => $transStiker->hari_ke, "jenis_langganan" => $transStiker->jenis_langganan, "no_kuitansi" => $transStiker->no_kuitansi, "tgl_edited" => Carbon::now(), "tipe_exit_pass" => $transStiker->tipe_exit_pass, "seq_code" => $transStiker->seq_code, "reserved" => $transStiker->reserved, "batasan_jam" => $transStiker->batasan_jam, "batasan_awal" => $transStiker->batasan_awal, "batasan_akhir" => $transStiker->batasan_akhir, "asuransi" => $transStiker->asuransi, "visitor" => $transStiker->visitor, "operator" => "Automatic", ]); // DETAIL DB::table("detail_transaksi_stiker")->insert([ "notrans" => $notrans, "nopol" => $detailTransStiker->nopol, "jenis_mobil" => $detailTransStiker->jenis_mobil, "adm" => $detailTransStiker->adm, "kategori" => $detailTransStiker->kategori, "jenis_member" => $detailTransStiker->jenis_member, "akses" => $detailTransStiker->akses, "akses_out" => $detailTransStiker->akses_out, "status" => $detailTransStiker->status, "merk" => $detailTransStiker->merk, "tipe" => $detailTransStiker->tipe, "tahun" => $detailTransStiker->tahun, "warna" => $detailTransStiker->warna, "keterangan" => $detailTransStiker->keterangan, ]); DB::table("indexnum") ->where("nama", "sticker") ->update(["value" => $nextIndex]); return $notrans; }); } }