order_gizi/app/Http/Controllers/MenuController.php

226 lines
8.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\KategoriKlasifikasiPaketMenu;
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['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) {
dd($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)
{
//
}
/**
* 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')
->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'
)
->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,
'nama_kategori_diet' => $item->nama_kategori_diet,
];
});
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,
];
});
return response()->json([
'status' => true,
'rows' => $grouped->values(),
'total' => $grouped->count()
]);
}
}