192 lines
8.4 KiB
PHP
Executable File
192 lines
8.4 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\DetailTransaksiStiker;
|
|
use App\Models\TransaksiStiker;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class MakeStikerServices
|
|
{
|
|
public function stikerCreate($request, Carbon $awal, Carbon $akhir)
|
|
{
|
|
Log::info("Data yang akan di proses : " . json_encode($request));
|
|
return DB::transaction(function () use ($request) {
|
|
// LOCK index agar aman
|
|
// $index = DB::table("indexnum")->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;
|
|
});
|
|
}
|
|
}
|