346 lines
14 KiB
PHP
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'
|
|
]);
|
|
}
|
|
}
|