TIF_E41201157/imt/app/Http/Controllers/MakananController.php

280 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\DetailMakanan;
use App\Models\Kriteria;
use App\Models\KriteriaMakanan;
use App\Models\Makanan;
use Illuminate\Http\Request;
class MakananController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//menampilkan data makanan
$makanan = Makanan::all();
return view('pages.makanan.index', compact('makanan'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//menampilkan halaman create makanan
return view('pages.makanan.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//validasi data makanan
$request->validate([
'kode' => 'required',
'alternatif' => 'required',
'karbohidrat' => 'required',
'lemak' => 'required',
'protein' => 'required',
'serat' => 'required',
'karbohidrat_ket' => 'required',
'lemak_ket' => 'required',
'protein_ket' => 'required',
'serat_ket' => 'required',
], [
'kode.required' => 'Kode harus diisi.',
'alternatif.required' => 'Alternatif harus diisi.',
'karbohidrat.required' => 'Karbohidrat harus diisi.',
'lemak.required' => 'Lemak harus diisi.',
'protein.required' => 'protein harus diisi.',
'serat.required' => 'Serat harus diisi.',
'karbohidrat_ket.required' => 'Keterangan harus diisi.',
'lemak_ket.required' => 'Keterangan harus diisi.',
'protein_ket.required' => 'Keterangan harus diisi.',
'serat_ket.required' => 'Keterangan harus diisi.',
]);
//simpan karbohidrat, lemak, protein dan serat
$makanan = new Makanan;
$makanan->kode = $request->kode;
$makanan->alternatif = $request->alternatif;
$makanan->kalori = 0;
$makanan->save();
$karbohidrat = Kriteria::where('nama', 'karbohidrat')->first();
$lemak = Kriteria::where('nama', 'lemak')->first();
$protein = Kriteria::where('nama', 'protein')->first();
$serat = Kriteria::where('nama', 'serat')->first();
$kriteria = new KriteriaMakanan;
$kriteria->kriteria_id = $karbohidrat->id;
$kriteria->makanan_id = $makanan->id;
$kriteria->nilai = $request->karbohidrat;
$kriteria->keterangan = $request->karbohidrat_ket;
$kriteria->save();
$kriteria = new KriteriaMakanan;
$kriteria->kriteria_id = $lemak->id;
$kriteria->makanan_id = $makanan->id;
$kriteria->nilai = $request->lemak;
$kriteria->keterangan = $request->lemak_ket;
$kriteria->save();
$kriteria = new KriteriaMakanan;
$kriteria->kriteria_id = $protein->id;
$kriteria->makanan_id = $makanan->id;
$kriteria->nilai = $request->protein;
$kriteria->keterangan = $request->protein_ket;
$kriteria->save();
$kriteria = new KriteriaMakanan;
$kriteria->kriteria_id = $serat->id;
$kriteria->makanan_id = $makanan->id;
$kriteria->nilai = $request->serat;
$kriteria->keterangan = $request->serat_ket;
$kriteria->save();
//redirect ke halaman makanan
return redirect()->route('makanan.index')->with('success', 'Makanan berhasil ditambahkan.');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//menampilkan halaman detail alternatif makanan
$detailMakanan = DetailMakanan::where('makanan_id', $id)->get();
$makanan = Makanan::findOrFail($id);
$count = DetailMakanan::where('makanan_id', $id)->pluck('kalori')->sum();
return view('pages.makanan.detail', compact('makanan', 'detailMakanan', 'count'));
}
public function storeDetailMakanan($idMakanan, Request $request)
{
$id = Makanan::find($idMakanan);
//validasi detail alternatif makanan
$validate = $request->validate([
'makanan_id' => 'required',
'berat' => 'required|numeric',
'waktu' => 'required',
'kalori' => 'required|numeric',
'nama_makanan' => 'required',
], [
'berat.required' => 'Kolom berat wajib diisi.',
'kalori.required' => 'Kolom kalori wajib diisi.',
'kalori.numeric' => 'Kolom kalori berupa angkat.',
'nama_makanan.required' => 'Kolom makanan wajib diisi.',
]);
$id->kalori += $request->kalori;
$id->save();
DetailMakanan::create($validate);
return redirect()->route('makanan.show', $id)->with('success', 'Detail makanan berhasil ditambahkan.');
}
public function UpdateDetailMakanan($id, $idMakanan, Request $request)
{
$idmakan = Makanan::find($idMakanan);
//validasi update data makanan
$validate = $request->validate([
'makanan_id' => 'required',
'berat' => 'required|numeric',
'waktu' => 'required',
'kalori' => 'required|numeric',
'nama_makanan' => 'required',
]
, [
'berat.required' => 'Kolom berat wajib diisi.',
'kalori.required' => 'Kolom kalori wajib diisi.',
'kalori.numeric' => 'Kolom kalori berupa angkat.',
'nama_makanan.required' => 'Kolom makanan wajib diisi.',
]);
$detailmakanan = DetailMakanan::find($id);
if ($request->kalori <= $detailmakanan->kalori) {
$hasil = $detailmakanan->kalori - $request->kalori;
$idmakan->kalori -= $hasil;
}
if ($request->kalori > $detailmakanan->kalori) {
$hasil = $request->kalori - $detailmakanan->kalori;
$idmakan->kalori += $hasil;
}
$idmakan->save();
$detailmakanan->update($validate);
return redirect()->route('makanan.show', $idmakan)->with('success', 'Detail makanan berhasil edit.');
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//menampilkan halaman edi alternatid makanan
$makanan = Makanan::findOrFail($id);
$karbohidrat1 = Kriteria::where('nama', 'karbohidrat')->first();
$lemak1 = Kriteria::where('nama', 'lemak')->first();
$protein1 = Kriteria::where('nama', 'protein')->first();
$serat1 = Kriteria::where('nama', 'serat')->first();
$karbohidrat = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $karbohidrat1->id)->first();
$lemak = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $lemak1->id)->first();
$protein = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $protein1->id)->first();
$serat = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $serat1->id)->first();
return view('pages.makanan.edit', compact('makanan', 'karbohidrat', 'lemak', 'protein', 'serat'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//validasi update alternatif makanan
$request->validate([
'kode' => 'required',
'alternatif' => 'required',
'karbohidrat' => 'required',
'lemak' => 'required',
'protein' => 'required',
'serat' => 'required',
], [
'kode.required' => 'Kode harus diisi.',
'alternatif.required' => 'Alternatif harus diisi.',
'karbohidrat.required' => 'Karbohidrat harus diisi.',
'lemak.required' => 'Lemak harus diisi.',
'protein.required' => 'Protein harus diisi.',
'serat.required' => 'Serat harus diisi.',
]);
//simpan data
$makanan = Makanan::findOrFail($id);
$makanan->kode = $request->kode;
$makanan->alternatif = $request->alternatif;
$makanan->save();
$karbohidrat = Kriteria::where('nama', 'karbohidrat')->first();
$lemak = Kriteria::where('nama', 'lemak')->first();
$protein = Kriteria::where('nama', 'protein')->first();
$serat = Kriteria::where('nama', 'serat')->first();
$kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $karbohidrat->id)->first();
$kriteria->nilai = $request->karbohidrat;
$kriteria->keterangan = $request->karbohidrat_ket;
$kriteria->save();
$kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $lemak->id)->first();
$kriteria->nilai = $request->lemak;
$kriteria->keterangan = $request->lemak_ket;
$kriteria->save();
$kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $protein->id)->first();
$kriteria->nilai = $request->protein;
$kriteria->keterangan = $request->protein_ket;
$kriteria->save();
$kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $serat->id)->first();
$kriteria->nilai = $request->serat;
$kriteria->keterangan = $request->serat_ket;
$kriteria->save();
return redirect()->route('makanan.index')->with('success', 'Makanan berhasil diedit.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//hapus alternatif makanan
$detail_makanan = DetailMakanan::where('makanan_id', $id)->delete();
$kriteria_makanan = KriteriaMakanan::where('makanan_id', $id)->delete();
$makanan = Makanan::find($id)->delete();
return redirect()->route('makanan.index')->with('success', 'Makanan berhasil dihapus.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroyDetailMakanan($id, $idMakanan)
{
//hapus detail alternatif makanan
$idmakan = Makanan::find($idMakanan);
$idmakan->kalori -= DetailMakanan::find($id)->kalori;
$idmakan->save();
DetailMakanan::find($id)->delete();
return redirect()->route('makanan.show', $idmakan)->with('success', 'Detail makanan berhasil dihapus');
}
}