Files
backend_parkir/app/Services/MakeStikerServices.php
T

204 lines
8.7 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;
class MakeStikerServices
{
public function stikerCreate($request, 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();
$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;
});
}
}