where("nama", "sticker")->lockForUpdate()->first(); $mountYearNow = Carbon::now()->format("m/Y"); $nextIndex = str_pad($index->value + 1, 4, "0", STR_PAD_LEFT); $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; $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 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); // 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("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(); } DB::table("indexnum") ->where("nama", "sticker") ->update(["value" => $nextIndex]); return $notrans; }); } 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; }); } }