diff --git a/app/Console/Commands/CreateRoutePermissionCommand.php b/app/Console/Commands/CreateRoutePermissionCommand.php index fcef81e..dd35267 100644 --- a/app/Console/Commands/CreateRoutePermissionCommand.php +++ b/app/Console/Commands/CreateRoutePermissionCommand.php @@ -31,19 +31,24 @@ class CreateRoutePermissionCommand extends Command $routes = Route::getRoutes()->getRoutesByName(); // dd($routes); foreach ($routes as $route) { - if ($route->getName() != '' && count($route->getAction()['middleware']) >= 2) { - $permission = Permission::where('name', $route->getName())->first(); - - $data = $route->getName(); - [$first_group] = explode('.', $data); - $comment = $route->getComment(); - if (is_null($comment)) { - $comment = Str::title(str_replace('.', ' ', $route->getName())); - } - if (is_null($permission)) { - permission::create(['name' => $data, 'group_name' => $first_group, 'desc' => $comment]); - $this->info('Permission routes ' . $route->getName() . ' added successfully.'); + try { + if ($route->getName() != '' && count($route->getAction()['middleware']) >= 2) { + $permission = Permission::where('name', $route->getName())->first(); + $data = $route->getName(); + [$first_group] = explode('.', $data); + $comment = $route->getComment(); + if (is_null($comment)) { + $comment = Str::title(str_replace('.', ' ', $route->getName())); + } + if (is_null($permission)) { + permission::create(['name' => $data, 'group_name' => $first_group, 'desc' => $comment]); + $this->info('Permission routes ' . $route->getName() . ' added successfully.'); + } + } else { + $this->info('Permission routes ' . $route->getName() . ' not added.'); } + } catch (\Throwable $th) { + $this->info('Permission routes ' . $route->getName() . ' not added.'); } } diff --git a/app/Http/Controllers/Admins/Penjualan/PenjualanController.php b/app/Http/Controllers/Admins/Penjualan/PenjualanController.php index 1fb2645..1916dbf 100644 --- a/app/Http/Controllers/Admins/Penjualan/PenjualanController.php +++ b/app/Http/Controllers/Admins/Penjualan/PenjualanController.php @@ -9,6 +9,7 @@ use App\Models\RekeningCoa; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Session; class PenjualanController extends Controller { @@ -26,7 +27,7 @@ class PenjualanController extends Controller $filter_tanggal_2 = $request->filter_tanggal_2; $akun_coa = $request->akun_coa; if ($request->akun_coa == null) { - $data = Pesanan::with(['detailPesanan', 'user', 'rekening_coa']) + $data = Pesanan::with(['detailPesanan', 'user']) ->when($filter_tanggal_1, function ($query) use ($filter_tanggal_1) { return $query->whereDate('tanggal_pesanan', '>=', $filter_tanggal_1); }) @@ -76,7 +77,7 @@ class PenjualanController extends Controller return 'Rp ' . number_format($data->grand_total, 0, ',', '.'); }) ->addColumn('jenis_pembayarannya', function ($data) { - return $data->jenis_pembayaran == 1 ? 'Tunai' : 'Non-Tunai' . ' (' . $data->rekening_coa->keterangan_coa . ')'; + return $data->jenis_pembayaran == 1 ? 'Tunai' : ($data->jenis_pembayaran == null ? 'Tunai' : 'Non-Tunai' . ' (' . ($data->rekening_coa?->keterangan_coa ?? '') . ')'); }) ->addColumn('ubah', function ($data) { return '
@@ -103,44 +104,61 @@ class PenjualanController extends Controller public function laporan(Request $request) { - $mpdf = new \Mpdf\Mpdf([ - 'mode' => 'utf-8', - 'format' => 'A4', - 'orientation' => 'portrait', - 'margin_left' => 15, - 'margin_right' => 15, - 'margin_top' => 10, - 'margin_bottom' => 10, - 'default_font_size' => 9, - 'default_font' => 'arial', - ]); - $mpdf->AddPage(); - $mpdf->setFooter('{PAGENO}'); + try { + $mpdf = new \Mpdf\Mpdf([ + 'mode' => 'utf-8', + 'format' => 'A4', + 'orientation' => 'portrait', + 'margin_left' => 15, + 'margin_right' => 15, + 'margin_top' => 10, + 'margin_bottom' => 10, + 'default_font_size' => 9, + 'default_font' => 'arial', + ]); + $mpdf->AddPage(); + $mpdf->setFooter('{PAGENO}'); + $filter_tanggal_1 = $request->filter_tanggal_1; + $filter_tanggal_2 = $request->filter_tanggal_2; + if ($request->jenis_coa == null) { + $keterangan_coa = 'Semua'; + $data = Pesanan::with(['user', 'bukuBesar', 'rekening_coa'])->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1) + ->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2) + ->get(); + } else { + $keterangan_coa = RekeningCoa::find($request->jenis_coa)->keterangan_coa; + $data = Pesanan::with(['user', 'bukuBesar', 'rekening_coa'])->where('rekening_coa_id', $request->jenis_coa)->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1) + ->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2) + ->get(); + } - $filter_tanggal_1 = $request->filter_tanggal_1; - $filter_tanggal_2 = $request->filter_tanggal_2; - if ($request->jenis_coa == null) { - $keterangan_coa = 'Semua'; - $data = Pesanan::with(['user', 'bukuBesar', 'rekening_coa'])->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1) - ->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2) - ->get(); - } else { - $keterangan_coa = RekeningCoa::find($request->jenis_coa)->keterangan_coa; - $data = Pesanan::with(['user', 'bukuBesar', 'rekening_coa'])->where('rekening_coa_id', $request->jenis_coa)->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1) - ->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2) - ->get(); + $alldata = [ + 'data' => $data, + 'filter_tanggal_1' => $filter_tanggal_1, + 'filter_tanggal_2' => $filter_tanggal_2, + 'keterangan_coa' => $keterangan_coa + ]; + + $html = view('pages.admin.penjualan.laporan', $alldata); + // $html->render(); + // $mpdf->WriteHTML($html); + + // $mpdf->chunkLoadView('', 'pages.admin.penjualan.laporan', $alldata); + // return $mpdf->stream('document.pdf'); + + $chunks = explode("chunk", (string)$html); + foreach ($chunks as $key => $val) { + // $mpdf->WriteHTML($val); + } + $mpdf->writeHTML($html); + + $mpdf->Output('Laporan_Penjualan.pdf', 'I'); + return response()->header('Content-Type', 'application/pdf'); + } catch (\Throwable $th) { + Session::flash('errors', 'Gagal membuat laporan, coba lagi dengan rentang tanggal yang lebih pendek'); + return redirect()->back(); + //throw $th; } - - $html = view('pages.admin.penjualan.laporan', [ - 'data' => $data, - 'filter_tanggal_1' => $filter_tanggal_1, - 'filter_tanggal_2' => $filter_tanggal_2, - 'keterangan_coa' => $keterangan_coa - ]); - $mpdf->writeHTML($html); - - $mpdf->Output('Laporan_Penjualan.pdf', 'I'); - return response()->header('Content-Type', 'application/pdf'); } public function cancel(Request $request) diff --git a/app/Http/Controllers/Admins/PerangkatPrinter/PerangkatPrinterController.php b/app/Http/Controllers/Admins/PerangkatPrinter/PerangkatPrinterController.php new file mode 100644 index 0000000..dd70ada --- /dev/null +++ b/app/Http/Controllers/Admins/PerangkatPrinter/PerangkatPrinterController.php @@ -0,0 +1,180 @@ +of($data) + ->addColumn('status_printer', function ($data) { + if ($data->status == '1') { + return 'Aktif'; + } else { + return 'Tidak Aktif'; + } + }) + ->addColumn('action', function ($data) { + return ' + + + '; + }) + ->rawColumns(['action' => 'action', 'status_printer' => 'status_printer']) + ->addIndexColumn() + ->make(true); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // validation + $validator = Validator::make($request->all(), [ + 'printer_nama' => 'required', + 'printer_mm' => 'required', + 'printer_for' => 'required', + ], [ + 'printer_nama.required' => 'Nama tidak boleh kosong!', + 'printer_mm.required' => 'Ukuran kertas printer tidak boleh kosong!', + 'printer_for.required' => 'Printer digunakan untuk tidak boleh kosong!', + ]); + + // check validation + if ($validator->fails()) { + return ResponseFormatter::error($validator->errors()->first()); + } + + try { + DB::beginTransaction(); + + if ($request->printer_status != 'on' || $request->printer_status == null) { + $status = '0'; + } else { + $status = '1'; + } + + // create new account + $printer = PerangkatPrinter::create([ + 'nama_printer' => $request->printer_nama, + 'printer_connection' => $request->printer_connection, + 'ip_address' => $request->ip_address, + 'printer_mm' => $request->printer_mm, + 'printer_for' => $request->printer_for, + 'status' => $status, + ]); + + DB::commit(); + return ResponseFormatter::success($printer, "Printer berhasil ditambahkan"); + } catch (\Throwable $th) { + DB::rollBack(); + return ResponseFormatter::error($th->getMessage()); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // get data from printer + $printer = PerangkatPrinter::findOrFail($id); + return ResponseFormatter::success([ + 'printer' => $printer + ]); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + + // validation + $validator = Validator::make($request->all(), [ + 'printer_nama_edit' => 'required', + 'printer_mm_edit' => 'required', + 'printer_for_edit' => 'required', + ], [ + 'printer_nama_edit.required' => 'Nama tidak boleh kosong!', + 'printer_mm_edit.required' => 'Ukuran kertas printer tidak boleh kosong!', + 'printer_for_edit.required' => 'Printer digunakan untuk tidak boleh kosong!' + ]); + + // check validation + if ($validator->fails()) { + return ResponseFormatter::error($validator->errors()->first()); + } + + try { + DB::beginTransaction(); + + if ($request->printer_status_edit != 'on' || $request->printer_status_edit == null) { + $status = '0'; + } else { + $status = '1'; + } + + // create new account + $printer = PerangkatPrinter::findOrFail($id); + $printer->update([ + 'nama_printer' => $request->printer_nama_edit, + 'printer_connection' => $request->printer_connection, + 'ip_address' => $request->ip_address, + 'printer_mm' => $request->printer_mm_edit, + 'printer_for' => $request->printer_for_edit, + 'status' => $status, + ]); + + DB::commit(); + return ResponseFormatter::success($printer, "Printer berhasil diubah"); + } catch (\Throwable $th) { + DB::rollBack(); + return ResponseFormatter::error($th->getMessage()); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // get data from printer + $printer = PerangkatPrinter::findOrFail($id); + + // check printer + if (!$printer) { + return ResponseFormatter::error("Data printer tidak ditemukan!"); + } + + // delete printer + $printer->delete(); + + return ResponseFormatter::success(null, "Printer berhasil dihapus!"); + } +} diff --git a/app/Http/Controllers/Kasir/Menu.php b/app/Http/Controllers/Kasir/Menu.php index 4728b8a..fa935c5 100644 --- a/app/Http/Controllers/Kasir/Menu.php +++ b/app/Http/Controllers/Kasir/Menu.php @@ -16,11 +16,12 @@ class Menu extends Controller public function index() { $kategori_produks = KategoriProduk::get(); - - return view('pages.Menu.index', compact('kategori_produks')); + $kelompok_kategoris = KelompokKategori::get(); + return view('pages.Menu.index', compact('kategori_produks', 'kelompok_kategoris')); } - public function kelompokKategori($id) { + public function kelompokKategori($id) + { $kelompok_kategoris = KelompokKategori::where('kategori_produk_id', $id)->get(); if (empty($kelompok_kategoris[0])) { @@ -28,13 +29,23 @@ class Menu extends Controller } else { return $kelompok_kategoris; } - } - public function getDataMenu() + public function getDataMenu(Request $request) { // $data = Produk::with(['kategori_produk'])->get(); $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->get(); + + $kelompok_kategori_id = $request->kelompok_produk; + + if ($kelompok_kategori_id == null || $kelompok_kategori_id == 0) { + $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->get(); + } else { + $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk']) + ->where('kelompok_kategori_id', $kelompok_kategori_id) + ->get(); + } + $nomor = 1; return $datatables = datatables() @@ -69,7 +80,8 @@ class Menu extends Controller } // Tambah Menu - public function store(Request $request) { + public function store(Request $request) + { // validation $rules = array( 'kategori_produk' => 'required', @@ -80,6 +92,11 @@ class Menu extends Controller 'tersedia' => 'required', 'deskripsi_produk' => 'required', ); + if ($request->kelompok_produk == 9) { + $rules = array( + 'promodatetime' => 'required', + ); + } $validator = Validator::make($request->all(), $rules); // check validation @@ -87,6 +104,22 @@ class Menu extends Controller // If validation fails, return with errors return response()->json(['errors' => $validator->errors()], 422); } else { + + if ($request->kelompok_produk == 9) { + // date promo 02/27/2024 12:00 AM - 03/30/2024 11:00 PM + $tanggal_array = explode(" - ", $request->promodatetime); + $tanggal_awal_string = $tanggal_array[0]; + $tanggal_akhir_string = $tanggal_array[1]; + + // Konversi string tanggal menjadi objek Carbon + $tanggal_awal = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_awal_string); + $tanggal_akhir = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_akhir_string); + + // Mendapatkan tanggal dan waktu awal serta akhir + $tgl_start_promo = $tanggal_awal->toDateTimeString(); + $tgl_end_promo = $tanggal_akhir->toDateTimeString(); + } + // create product $produk = Produk::create([ 'kategori_produk_id' => $request->kategori_produk, @@ -95,6 +128,9 @@ class Menu extends Controller 'harga_produk' => $request->harga_produk, 'tersedia' => $request->tersedia, 'deskripsi_produk' => $request->deskripsi_produk, + 'stok_promo' => $request->stok_promo, + 'tgl_start_promo' => $tgl_start_promo, + 'tgl_end_promo' => $tgl_end_promo, 'created_at' => Carbon::now() ]); @@ -107,15 +143,17 @@ class Menu extends Controller // Return a success response return response()->json(['message' => 'Data created successfully']); } - } - - public function show($id) { + } + + public function show($id) + { $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->findOrFail($id); return response()->json($data); } // Ubah Menu - public function update(Request $request, $id) { + public function update(Request $request, $id) + { // validation $rules = array( 'kategori_produk' => 'required', @@ -126,6 +164,11 @@ class Menu extends Controller 'tersedia' => 'required', 'deskripsi_produk' => 'required', ); + if ($request->kelompok_produk == 9) { + $rules = array( + 'promodatetime' => 'required', + ); + } $validator = Validator::make($request->all(), $rules); // check validation @@ -133,9 +176,25 @@ class Menu extends Controller // If validation fails, return with errors return response()->json(['errors' => $validator->errors()], 422); } else { + + if ($request->kelompok_produk == 9) { + // date promo 02/27/2024 12:00 AM - 03/30/2024 11:00 PM + $tanggal_array = explode(" - ", $request->promodatetime); + $tanggal_awal_string = $tanggal_array[0]; + $tanggal_akhir_string = $tanggal_array[1]; + + // Konversi string tanggal menjadi objek Carbon + $tanggal_awal = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_awal_string); + $tanggal_akhir = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_akhir_string); + + // Mendapatkan tanggal dan waktu awal serta akhir + $tgl_start_promo = $tanggal_awal->toDateTimeString(); + $tgl_end_promo = $tanggal_akhir->toDateTimeString(); + } + $pivot = KelompokKategoriPivot::findOrFail($id); $produk = Produk::find($pivot->produk_id); - + // update pivot produk $pivot->update([ 'kelompok_ketegori_id' => $request->kelompok_produk, @@ -149,10 +208,13 @@ class Menu extends Controller 'harga_produk' => $request->harga_produk, 'tersedia' => $request->tersedia, 'deskripsi_produk' => $request->deskripsi_produk, + 'stok_promo' => $request->stok_promo, + 'tgl_start_promo' => $tgl_start_promo, + 'tgl_end_promo' => $tgl_end_promo, ]); // Return a success response return response()->json(['message' => 'Data created successfully']); } - } + } } diff --git a/app/Models/PerangkatPrinter.php b/app/Models/PerangkatPrinter.php new file mode 100644 index 0000000..932a69a --- /dev/null +++ b/app/Models/PerangkatPrinter.php @@ -0,0 +1,16 @@ +id(); + $table->string("nama_printer")->nullable(); + $table->enum("printer_mm", ["80", "58"])->default("80")->comment("0=80, 1=58"); + $table->enum("printer_connection", ["wireless", "wired"])->default("wired")->comment("0=wireless, 1=wired/usb"); + $table->string("ip_address")->nullable(); + $table->enum("printer_for", ["kasir", "dapur"])->default("kasir")->comment("0=kasir, 1=dapur"); + $table->enum("status", [1, 0])->default(0)->comment("0=nonaktif, 1=aktif"); + + $table->unsignedBigInteger("updated_by")->nullable(); + $table->unsignedBigInteger("created_by")->nullable(); + $table->unsignedBigInteger("deleted_by")->nullable(); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('perangkat_printers'); + } +};