<?php
namespace App\Http\Controllers;
use App\Models\TransaksiGudang;
use App\Models\DetailTransaksiGudang;
use App\Models\Item;
use App\Models\Pengguna;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
class TransaksiGudangController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$begin = new DateTime('-1 month');
$end = new DateTime();
$periode = [
$begin->format('d/m/Y'),
$end->format('d/m/Y'),
];
if (request()->periode) {
$periode = explode(" - ", request()->periode);
$begin = DateTime::createFromFormat('d/m/Y', $periode[0]);
$end = DateTime::createFromFormat('d/m/Y', $periode[1]);
}
$end->modify('+1 day');
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval, $end);
$periodeTanggals = [];
foreach ($daterange as $date) {
$periodeTanggals[] = strftime("%d-%b", strtotime($date->format("Y-m-d")));
}
$datas = TransaksiGudang::filterToko()->latest()->get();
$data = [
'datas' => $datas,
];
if (isset($request->arah_transaksi)) {
$data['datas'] = TransaksiGudang::cari($request->arah_transaksi)->filterToko()->latest()->get();
return response()->view('transaksi_gudang.index', $data);
}
if (isset($begin) && isset($end)) {
$data['datas'] = TransaksiGudang::tanggal($begin, $end)->filterToko()->latest()->get();
return response()->view('transaksi_gudang.index', $data);
}
return response()->view('transaksi_gudang.index', $data);
}
/**
* Show the form for creating a new resource.
*/
public function create(): Response
{
$barang = DetailTransaksiGudang::with('item')->get();
$tokos = auth()->user()->role->tokos;
$data = [
'detail' => $barang,
'tokos' => $tokos
];
return response()->view('transaksi_gudang.create', $data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
try {
DB::beginTransaction();
$request->validate([
'arah_transaksi' => 'required',
'no_transaksi' => 'required',
'keterangan' => 'required',
'jumlah' => 'required',
], ['arah_transaksi.required' => 'pilih arah transaksi terlebih dahulu!', 'jumlah.required' => 'Pastikan untuk memilih barang!']);
$transaksi_gudang = TransaksiGudang::create([
"tanggal" => $request->tanggal,
"no_transaksi" => $request->no_transaksi,
"arah_transaksi" => $request->arah_transaksi,
"keterangan" => $request->keterangan,
"pengguna_id" => auth()->user()->id
]);
$transaksi_gudang->save();
$transaksi_gudang->tokos()->sync($request->toko_id);
if (isset($request->jumlah)) {
for ($i = 0; $i < count($request->jumlah); $i++) {
$item = Item::with('stok_item_tokos')->find($request->id[$i]);
DetailTransaksiGudang::create([
"transaksi_gudang_id" => $transaksi_gudang->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"qty" => $request->jumlah[$i],
]);
if ($request->arah_transaksi == "gudang->toko") {
if ($item->stok_gudang < $request->jumlah[$i]) {
DB::rollBack();
return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di gudang!');
}
$item->update([
"stok" => $item->stok + $request->jumlah[$i],
"stok_gudang" => $item->stok_gudang - $request->jumlah[$i],
]);
$item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) + $request->jumlah[$i],
]);
} else {
if ($item->stok < $request->jumlah[$i]) {
DB::rollBack();
return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di toko!');
}
$item->update([
"stok" => $item->stok - $request->jumlah[$i],
"stok_gudang" => $item->stok_gudang + $request->jumlah[$i],
]);
$item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $request->jumlah[$i],
]);
}
}
}
DB::commit();
return redirect(route("transaksi_gudang.index"))->with('success', 'transaksi perpindahan berhasil dicatat.');
} catch (\Exception $e) {
DB::rollBack();
return redirect()->back()->with('error', $e->getMessage());
}
}
/**
* Display the specified resource.
*/
public function show(TransaksiGudang $transaksiGudang)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id): Response
{
$transaksi_gudang = TransaksiGudang::find($id);
$tokos = auth()->user()->role->tokos;
$data = [
'datas' => $transaksi_gudang,
'tokos' => $tokos
];
return response()->view('transaksi_gudang.edit', $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id): RedirectResponse
{
try {
$data = TransaksiGudang::find($id);
DB::beginTransaction();
if (isset($request->jumlah)) {
$data->tokos()->sync($request->toko_id);
$old_detail = DetailTransaksiGudang::where('transaksi_gudang_id', $data->id);
if ($data->arah_transaksi == "gudang->toko") {
foreach ($old_detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old)) {
$item_old->update([
'stok_gudang' => $item_old->stok_gudang + $detail->qty,
'stok' => $item_old->stok - $detail->qty
]);
$item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item_old->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $detail->qty,
]);
} else {
DB::rollBack();
return redirect()->back()->with('error', 'Terdapat item yang tidak tercatat di data master!');
}
}
} else {
foreach ($old_detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old)) {
$item_old->update([
'stok_gudang' => $item_old->stok_gudang - $detail->qty,
'stok' => $item_old->stok + $detail->qty
]);
$item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item_old->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) + $detail->qty,
]);
} else {
DB::rollBack();
return redirect()->back()->with('error', 'Terdapat item yang tidak tercatat di data master!');
}
}
}
$old_detail->delete();
for ($i = 0; $i < count($request->jumlah); $i++) {
$item = Item::with('stok_item_tokos')->find($request->id[$i]);
if (isset($item)) {
DetailTransaksiGudang::create([
"transaksi_gudang_id" => $data->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"qty" => $request->jumlah[$i],
]);
if ($request->arah_transaksi == "gudang->toko") {
if ($item->stok_gudang < $request->jumlah[$i]) {
DB::rollBack();
return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di gudang!');
}
$item->update([
"stok" => $item->stok + $request->jumlah[$i],
"stok_gudang" => $item->stok_gudang - $request->jumlah[$i],
]);
$item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) + $request->jumlah[$i],
]);
} else {
if ($item->stok < $request->jumlah[$i]) {
DB::rollBack();
return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di toko!');
}
$item->update([
"stok" => $item->stok - $request->jumlah[$i],
"stok_gudang" => $item->stok_gudang + $request->jumlah[$i],
]);
$item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $request->jumlah[$i],
]);
}
}
}
}
$request->validate([
'arah_transaksi' => 'required',
'keterangan' => 'required',
'jumlah' => 'required',
], ['arah_transaksi.required' => 'pilih arah transaksi terlebih dahulu!', 'jumlah.required' => 'Pastikan untuk memilih barang!']);
$data->update([
"arah_transaksi" => $request->arah_transaksi,
"keterangan" => $request->keterangan,
]);
DB::commit();
return redirect(route("transaksi_gudang.index"))->with('success', 'transaksi perpindahan berhasil dicatat.');
} catch (\Exception $e) {
DB::rollBack();
return redirect()->back()->with('error', $e->getMessage());
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id): RedirectResponse
{
DB::beginTransaction();
try {
$data = TransaksiGudang::with('tokos')->find($id);
$detail = DetailTransaksiGudang::where("transaksi_gudang_id", $data->id);
if (isset($detail)) {
if ($data->arah_transaksi == "gudang->toko") {
foreach ($detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old)) {
$item_old->update([
'stok_gudang' => $item_old->stok_gudang + $detail->qty,
'stok' => $item_old->stok - $detail->qty
]);
$toko_id = @$data->tokos->first()->id ?? 0;
if ($toko_id) {
$item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$toko_id], [
"stok" => (@$item_old->stok_item_tokos->where("toko_id", $toko_id)->first()->stok ?? 0) - $detail->qty,
]);
}
}
}
$detail->delete();
} else {
foreach ($detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old)) {
$item_old->update([
'stok_gudang' => $item_old->stok_gudang - $detail->qty,
'stok' => $item_old->stok + $detail->qty
]);
$toko_id = @$data->tokos->first()->id ?? 0;
if ($toko_id) {
$item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$toko_id], [
"stok" => (@$item_old->stok_item_tokos->where("toko_id", $toko_id)->first()->stok ?? 0) + $detail->qty,
]);
}
}
}
$detail->delete();
}
}
$data->tokos()->detach();;
$data->delete();
DB::commit();
return redirect()->route('transaksi_gudang.index')->with('success', 'Transaksi Gudang berhasil dihapus');
} catch (\Throwable $th) {
DB::rollback();
return redirect()->route('transaksi_gudang.index')->with('error', 'Transaksi Gudang gagal dihapus');
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]