MIF_E31211730/app/Http/Controllers/User/Peminjaman.php

145 lines
5.3 KiB
PHP

<?php
namespace App\Http\Controllers\User;
use App\Models\buku;
use App\Models\Cart;
use App\Models\Anggota;
use App\Models\Pinjaman;
use Illuminate\Http\Request;
use App\Models\DetailPinjaman;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
class Peminjaman extends Controller
{
public function pinjam()
{
$id_anggota = Anggota::where('users_id', Auth::user()->id)->first()->id;
$cek_jumlah_pinjam = Pinjaman::where('id_anggota', $id_anggota)->where('status', 'Pinjam')->count();
if ($cek_jumlah_pinjam >= 1) {
return redirect()->back()->with('maxpinjam', 'Maksimal peminjaman hanya 1');
}
$cart = Cart::where('id_user', Auth::user()->id)->get();
// jika cart lebih dari 2 buku tidak bisa melakukan peminjaman
if (count($cart) > 2) {
return redirect()->back()->with('maxpinjambuku', 'Maksimal peminjaman hanya 2');
}
$id_anggota = Anggota::where('users_id', Auth::user()->id)->first()->id;
$pinjaman = new Pinjaman();
$pinjaman->id_anggota = $id_anggota;
$pinjaman->status = 'Pending';
$pinjaman->confirmation_deadline = Carbon::now()->addMinutes(15);
$pinjaman->tgl_pinjam = date('Y-m-d');
$pinjaman->tgl_kembali = date('Y-m-d', strtotime('+3 days'));
$pinjaman->save();
foreach ($cart as $item) {
$cek_buku = Buku::where('id', $item->id_buku)->first();
$jumlah_buku_dipinjam = DB::table('pinjaman')
->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id')
->where('detail_pinjaman.buku_id', $item->id_buku)
->where('pinjaman.status', 'Pinjam')
->count();
$jumlah_buku_pending = DB::table('pinjaman')
->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id')
->where('detail_pinjaman.buku_id', $item->id_buku)
->where('pinjaman.status', 'Pending')
->count();
$jumlah_buku_dipinjam = $jumlah_buku_dipinjam + $jumlah_buku_pending;
$sisa_buku = $cek_buku->jumlah_buku - $jumlah_buku_dipinjam;
if ($sisa_buku < 0) {
return redirect()->back()->with('stoktidakada', 'Stok buku tidak mencukupi');
}
$detailPinjaman = new DetailPinjaman();
$detailPinjaman->pinjaman_id = $pinjaman->id;
$detailPinjaman->buku_id = $item->id_buku;
$detailPinjaman->kondisi_buku = 'Baik';
$detailPinjaman->save();
}
// delete cart
foreach ($cart as $item) {
$item->delete();
}
// update status dibuku
foreach ($cart as $item) {
$buku = Buku::find($item->id_buku);
// $buku->status = 'Di Pinjam';
$buku->save();
}
return redirect('/user/account#orders')->with('pinjam', 'Berhasil melakukan peminjaman');
}
public function tambahbukuketikapending()
{
$cart = Cart::where('id_user', Auth::user()->id)->get();
$id_anggota = Anggota::where('users_id', Auth::user()->id)->first()->id;
$pinjaman = Pinjaman::where('id_anggota', $id_anggota)->where('status', 'Pending')->first();
// cek detail pinjaman apakah sudah ada 2 buku
$cek_detail_pinjaman = DetailPinjaman::where('pinjaman_id', $pinjaman->id)->count();
if ($cek_detail_pinjaman >= 2) {
return redirect()->back()->with('maxpinjambuku', 'Maksimal peminjaman hanya 2');
}
foreach ($cart as $item) {
$cek_buku = Buku::where('id', $item->id_buku)->first();
$jumlah_buku_dipinjam = DB::table('pinjaman')
->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id')
->where('detail_pinjaman.buku_id', $item->id_buku)
->where('pinjaman.status', 'Pinjam')
->count();
$jumlah_buku_pending = DB::table('pinjaman')
->join('detail_pinjaman', 'pinjaman.id', '=', 'detail_pinjaman.pinjaman_id')
->where('detail_pinjaman.buku_id', $item->id_buku)
->where('pinjaman.status', 'Pending')
->count();
$jumlah_buku_dipinjam = $jumlah_buku_dipinjam + $jumlah_buku_pending;
$sisa_buku = $cek_buku->jumlah_buku - $jumlah_buku_dipinjam;
if ($sisa_buku < 0) {
return redirect()->back()->with('stoktidakada', 'Stok buku tidak mencukupi');
}
$detailPinjaman = new DetailPinjaman();
$detailPinjaman->pinjaman_id = $pinjaman->id;
$detailPinjaman->buku_id = $item->id_buku;
$detailPinjaman->kondisi_buku = 'Baik';
$detailPinjaman->save();
}
// delete cart
foreach ($cart as $item) {
$item->delete();
}
return redirect('/user/account#orders')->with('tambahanbuku', 'Berhasil menambahkan buku ketika status peminjaman pending');
}
public function batal($id)
{
$pinjaman = Pinjaman::find($id);
$pinjaman->status = 'Gagal';
$pinjaman->save();
return redirect('/')->with('batalpinjam', 'Berhasil membatalkan peminjaman');
}
}