order_gizi/app/Http/Controllers/MenuController.php
2025-08-01 18:37:49 +07:00

346 lines
14 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\KategoriKlasifikasiPaketMenu;
use App\Models\KlasifikasiMenuKalori;
use App\Models\Menu;
use App\Models\TanggalMenuTersedia;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class MenuController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$payload = [
'title' => 'Master Menu || Order Gizi',
];
return view('dashboard.master.menu.index', $payload);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
DB::connection('dbOrderGizi')->beginTransaction();
try {
$allData = request('data');
// dd($allData);
foreach ($allData as $data) {
$hargaPublic = $data['harga_public'] ? str_replace('.', '', $data['harga_public']) : null;
$hargaKaryawan = $data['harga_karyawan'] ? str_replace('.', '', $data['harga_karyawan']) : null;
// $hargaKeluargaPasien = $data['harga_keluarga_pasien'] ? str_replace('.', '', $data['harga_keluarga_pasien']) : null;
$payload = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'nama_menu' => $data['nama'],
'jenis_menu' => $data['jenis_makanan'],
'harga_public' => $hargaPublic,
'harga_karyawan' => $hargaKaryawan,
// 'harga_keluarga_pasien' => $hargaKeluargaPasien,
'deskripsi' => $data['deskripsi'],
'status' => true,
'apakah_someday' => $data['kategori_menu'] === "Menu Normal" ? false : true,
'apakah_menu_siang' => (isset($data['apakah_menu_siang']) && $data['apakah_menu_siang'] === "iya") ? true : false,
'apakah_menu_sore' => (isset($data['apakah_menu_sore']) && $data['apakah_menu_sore'] === "iya") ? true : false,
];
if($data['foto']){
$imageName = Str::random(15) . '.' . $data['foto']->getClientOriginalExtension();
Storage::disk('img_menu')->put($imageName, file_get_contents($data['foto']));
$payload['foto'] =$imageName;
}
$menu = Menu::create($payload);
if(isset($data['kategori_diet_id'])){
$categories = $data['kategori_diet_id'];
foreach ($categories as $category) {
$payloadCategory = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'kategori_diet_id' => $category,
'master_menu_id' => $menu->master_menu_id,
];
KategoriKlasifikasiPaketMenu::create($payloadCategory);
}
}
if(isset($data['kalori_id'])){
$kalories = $data['kalori_id'];
foreach ($kalories as $kalori) {
$payloadKalori = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'kalori_id' => $kalori,
'master_menu_id' => $menu->master_menu_id,
];
KlasifikasiMenuKalori::create($payloadKalori);
}
}
if(isset($data['tanggal']) && ($data['kategori_menu'] === "Menu Normal")){
$tanggal = $data['tanggal'];
foreach ($tanggal as $tgl) {
$payloadTgl = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'tgl_harian' => $tgl,
'master_menu_id' => $menu->master_menu_id,
];
TanggalMenuTersedia::create($payloadTgl);
}
}
}
//code...
DB::connection('dbOrderGizi')->commit();
return response()->json([
'status' => true,
'message' => 'Menu berhasil ditambahkan!'
]);
} catch (\Throwable $th) {
DB::connection('dbOrderGizi')->rollBack();
return response()->json([
'status' => false,
'message' => 'Menu gagal ditambahkan!',
'errors' => $th->getMessage()
]);
}
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
try {
DB::connection('dbOrderGizi')->beginTransaction();
KlasifikasiMenuKalori::where('master_menu_id', $id)->delete();
TanggalMenuTersedia::where('master_menu_id', $id)->delete();
KategoriKlasifikasiPaketMenu::where('master_menu_id', $id)->delete();
$menu = Menu::where('master_menu_id', $id)->first();
$menuKategoriDiet = request('kategori_diet_id');
$menuKalori = request('kalori_id');
$menuTanggal = request('tanggal');
$hargaPublic = request('harga_public') ? str_replace('.', '', request('harga_public')) : null;
$hargaKaryawan = request('harga_karyawan') ? str_replace('.', '', request('harga_karyawan')) : null;
$payload = [
'pegawai_id_modified' => auth()->user()->id,
'pegawai_nama_modified' => auth()->user()->full_name,
'nama_menu' => request('nama'),
'jenis_menu' => request('jenis_makanan'),
'harga_public' => $hargaPublic,
'harga_karyawan' => $hargaKaryawan,
'deskripsi' => request('deskripsi'),
'status' => true,
'apakah_someday' => request('kategori_menu') === "Menu Normal" ? false : true,
'apakah_menu_siang' => (request('apakah_menu_siang') && request('apakah_menu_siang') === "iya") ? true : false,
'apakah_menu_sore' => (request('apakah_menu_sore') && request('apakah_menu_sore') === "iya") ? true : false,
];
if(request()->hasFile('foto')){
$imageName = Str::random(15) . '.' . request('foto')->getClientOriginalExtension();
Storage::disk('img_menu')->put($imageName, file_get_contents(request('foto')));
$payload['foto'] =$imageName;
}
$menu->update($payload);
if(isset($menuKategoriDiet)){
foreach ($menuKategoriDiet as $category) {
$payloadCategory = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'kategori_diet_id' => $category,
'master_menu_id' => $menu->master_menu_id,
];
KategoriKlasifikasiPaketMenu::create($payloadCategory);
}
}
if(isset($menuKalori)){
foreach ($menuKalori as $kalori) {
$payloadKalori = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'kalori_id' => $kalori,
'master_menu_id' => $menu->master_menu_id,
];
KlasifikasiMenuKalori::create($payloadKalori);
}
}
if(isset($menuTanggal) && (request('kategori_menu') === "Menu Normal")){
foreach ($menuTanggal as $tgl) {
$payloadTgl = [
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'tgl_harian' => $tgl,
'master_menu_id' => $menu->master_menu_id,
];
TanggalMenuTersedia::create($payloadTgl);
}
}
DB::connection('dbOrderGizi')->commit();
return response()->json([
'status' => true,
'message' => 'Menu berhasil diperbarui!'
]);
} catch (\Throwable $th) {
DB::connection('dbOrderGizi')->rollBack();
return response()->json([
'status' => false,
'message' => 'Menu gagal ditambahkan!',
'errors' => $th->getMessage()
]);
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$data = Menu::where(['statusenabled' => true, 'master_menu_id' => $id])->first();
$payload = [
'statusenabled' => false,
'pegawai_id_entry' => auth()->user()->id,
'pegawai_nama_entry' => auth()->user()->full_name,
'modified_at' => Carbon::now()
];
$data->update($payload);
return response()->json([
'status' => true,
'message' => 'Berhasil menghapus data'
], 200);
}
public function datatable(){
$data = DB::connection('dbOrderGizi')
->table('public.master_menu as mn')
->leftJoin('public.klasifikasi_menu_diet as kmd', 'kmd.master_menu_id', '=', 'mn.master_menu_id')
->leftJoin('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id')
->leftJoin('public.detail_menu_paket_harian as dmph', 'dmph.master_menu_id', '=', 'mn.master_menu_id')
->leftJoin('public.klasifikasi_menu_kalori as kmk', 'kmk.master_menu_id', '=', 'mn.master_menu_id')
->leftJoin('public.kalori as k', 'k.kalori_id', '=', 'kmk.kalori_id')
->where('mn.statusenabled', true)
->select(
'mn.master_menu_id',
'mn.nama_menu',
'mn.foto',
'mn.jenis_menu',
'mn.harga_public',
'mn.harga_karyawan',
'mn.harga_keluarga_pasien',
'mn.deskripsi',
'mn.status',
'mn.apakah_someday',
'mn.apakah_menu_siang',
'mn.apakah_menu_sore',
'kmd.klasifikasi_menu_diet_id',
'kmd.kategori_diet_id',
'kd.nama_kategori_diet',
'dmph.detail_menu_paket_harian_id',
'dmph.tgl_harian',
'kmk.klasifikasi_menu_kalori_id',
'kmk.kalori_id',
'k.nilai_kalori'
)
->get()->groupBy('master_menu_id');
$grouped = $data->map(function($items){
$first = $items->first();
$tglAvailable = $items->filter(fn($tgl) => $tgl->tgl_harian !== null)
->unique('detail_menu_paket_harian_id')
->map(function($item){
return [
'detail_menu_paket_harian_id' => $item->detail_menu_paket_harian_id,
'tgl_harian' => $item->tgl_harian,
];
})->values();
$kategoriDiet = $items->filter(fn($kd) => $kd->klasifikasi_menu_diet_id !== null)
->unique('klasifikasi_menu_diet_id')
->map(function($item){
return [
'klasifikasi_menu_diet_id' => $item->klasifikasi_menu_diet_id,
'kategori_diet_id' => $item->kategori_diet_id,
'nama_kategori_diet' => $item->nama_kategori_diet,
];
})->values();
$kalori = $items->filter(fn($kal) => $kal->klasifikasi_menu_kalori_id !== null)
->unique('klasifikasi_menu_kalori_id')
->map(function($item){
return [
'kalori_id' => $item->kalori_id,
'nilai_kalori' => $item->nilai_kalori,
];
})->values();
return [
'master_menu_id' => $first->master_menu_id,
'nama_menu' => $first->nama_menu,
'foto' => $first->foto,
'jenis_menu' => $first->jenis_menu,
'harga_public' => $first->harga_public,
'harga_karyawan' => $first->harga_karyawan,
'harga_keluarga_pasien' => $first->harga_keluarga_pasien,
'deskripsi' => $first->deskripsi,
'status' => $first->status,
'apakah_someday' => $first->apakah_someday,
'apakah_menu_siang' => $first->apakah_menu_siang,
'apakah_menu_sore' => $first->apakah_menu_sore,
'tgl' => $tglAvailable,
'kategoriDiet' => $kategoriDiet,
'kalori' => $kalori,
];
});
return response()->json([
'status' => true,
'rows' => $grouped->values(),
'total' => $grouped->count()
]);
}
public function getDataDetail(string $id){
$data = Menu::with(['klasifikasiMenuDiet', 'klasifikasiMenuKalori', 'tglAvailable'])->where('master_menu_id', $id)->first();
return response()->json([
'data' => $data ?? null,
'message' => 'berhasil mendapatkan data'
]);
}
}