<?php
namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\ReturPembelian;
use App\Models\DetailReturPembelian;
use App\Models\DetailTransaksiBarangRusak;
use App\Models\Item;
use App\Models\Pengguna;
use App\Models\Supplier;
use App\Models\Toko;
use App\Models\TransaksiBarangRusak;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class ReturPembelianController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): Response
{
$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 = ReturPembelian::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->latest()->get();
$data = [
'datas' => $datas,
'periode' => $periode,
'periodeTanggals' => $periodeTanggals,
];
return response()->view("retur_pembelian.index", $data);
}
/**
* Show the form for creating a new resource.
*/
public function create(): Response
{
$supplier = Supplier::all();
$tokos = auth()->user()->role->tokos;
$data = [
'supplier' => $supplier,
'tokos' => $tokos,
];
return response()->view("retur_pembelian.create", $data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
$request->validate([
"bukti_retur" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
]);
DB::beginTransaction();
try {
$bukti_retur = null;
if ($request->hasFile('bukti_retur')) {
$request->validate([
'bukti_retur' => 'image'
]);
$bukti_retur = $request->file('bukti_retur');
$photo_ekstensi = $bukti_retur->extension();
$photo_baru = "bukti-retur-" . \Str::slug($request->no_pembelian) . ".$photo_ekstensi";
$bukti_retur = $bukti_retur->storeAs('bukti_retur', $photo_baru);
}
$retur_pembelian = ReturPembelian::create([
"tanggal" => $request->tanggal,
"keterangan" => $request->keterangan,
"no_pembelian" => $request->no_pembelian,
"ket_tambahan" => $request->ket_tambahan,
"supplier_id" => $request->supplier_id,
"pengguna_id" => auth()->user()->id,
"bukti_retur" => $bukti_retur
]);
$retur_pembelian->save();
$retur_pembelian->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]);
DetailReturPembelian::create([
"retur_pembelian_id" => $retur_pembelian->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"qty" => $request->jumlah[$i],
"status_retur" => 1,
]);
if ($request->ket_tambahan != "Tukar Barang") {
$item->update([
"stok" => $item->stok - $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],
]);
} elseif ($request->ket_tambahan == "Gagal Retur") {
if (!isset($transaksi_barang_rusak)) {
$transaksi_barang_rusak = TransaksiBarangRusak::create([
"tanggal" => $request->tanggal,
"no_pencatatan" => 'TBR-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his'),
"sale_id" => 0,
"deskripsi" => "Gagal Retur suplier",
"pengguna_id" => auth()->user()->id,
"retur_id" => $retur_pembelian->id
]);
}
DetailTransaksiBarangRusak::create([
"transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"harga_item" => $item->biaya_item,
"qty" => $request->jumlah[$i],
]);
}
}
}
Helper::addUserLog("Menambahkan Retur Pembelian : ".$retur_pembelian->no_pembelian, $retur_pembelian->toArray());
DB::commit();
return redirect(route("retur_pembelian.index"))->with('success', 'Retur Penjualan berhasil ditambahkan.');
} catch (\Throwable $th) {
//throw $th;
DB::rollback();
Log::error($th);
return redirect(route("retur_pembelian.index"))->with('error', 'Retur Penjualan gagal ditambahkan. ' . $th->getMessage())->withInput($request->all());
}
}
/**
* Display the specified resource.
*/
public function show(string $id): Response
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id): Response
{
$datas = ReturPembelian::find($id);
$supplier = Supplier::all();
$tokos = auth()->user()->role->tokos;
$data = [
"datas" => $datas,
"supplier" => $supplier,
"tokos" => $tokos,
];
return response()->view("retur_pembelian.edit", $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id): RedirectResponse
{
$request->validate([
"bukti_retur" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
]);
DB::beginTransaction();
try {
$retur_pembelian = ReturPembelian::find($id);
$old_detail = DetailReturPembelian::where("retur_pembelian_id", $id);
$old_barang_rusak = TransaksiBarangRusak::where("retur_id", $id);
$bukti_retur = $retur_pembelian->bukti_retur;
$bukti_retur_lama = $retur_pembelian->bukti_retur;
if ($request->hasFile('bukti_retur')) {
$request->validate([
'bukti_retur' => 'image'
]);
$bukti_retur = $request->file('bukti_retur');
$photo_ekstensi = $bukti_retur->extension();
$photo_baru = "bukti-retur-" . \Str::slug($request->no_pembelian) . ".$photo_ekstensi";
$bukti_retur = $bukti_retur->storeAs('bukti_retur', $photo_baru);
}
$retur_pembelian->update([
"tanggal_pembelian" => $request->tanggal,
"keterangan" => $request->keterangan,
"no_pembelian" => $request->no_pembelian,
"ket_tambahan" => $request->ket_tambahan,
"supplier_id" => $request->supplier_id,
"pengguna_id" => auth()->user()->id,
"bukti_retur" => $bukti_retur
]);
$retur_pembelian->tokos()->sync($request->toko_id);
if (isset($request->jumlah)) {
foreach ($old_detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old)) {
// if ($request->ket_tambahan == "Tukar Barang") {
// $item_old->update([
// '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,
// ]);
// }
if ($request->ket_tambahan != "Tukar Barang") {
$item_old->update([
'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,
]);
}
}
}
$old_barang_rusak->delete();
$old_detail->delete();
for ($i = 0; $i < count($request->jumlah); $i++) {
$item = Item::with('stok_item_tokos')->find($request->id[$i]);
if (isset($item)) {
DetailReturPembelian::create([
"retur_pembelian_id" => $retur_pembelian->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"qty" => $request->jumlah[$i],
"status_retur" => 1,
]);
}
if ($request->ket_tambahan != "Tukar Barang") {
// $item->update([
// "stok" => $item->stok + $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],
// ]);
$item->update([
"stok" => $item->stok - $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],
]);
} elseif ($request->ket_tambahan == "Gagal Retur") {
if (!isset($transaksi_barang_rusak)) {
$transaksi_barang_rusak = TransaksiBarangRusak::create([
"tanggal" => $request->tanggal,
"no_pencatatan" => 'TBR-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his'),
"sale_id" => 0,
"deskripsi" => "Gagal Retur suplier",
"pengguna_id" => auth()->user()->id,
"retur_id" => $retur_pembelian->id
]);
}
DetailTransaksiBarangRusak::create([
"transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"harga_item" => $item->biaya_item,
"qty" => $request->jumlah[$i],
]);
}
// if ($request->status_retur[$i] == 1) {
// $item->update([
// "stok" => $item->stok + $request->jumlah[$i],
// ]);
// } else {
// if (!isset($transaksi_barang_rusak)) {
// $transaksi_barang_rusak = TransaksiBarangRusak::create([
// "tanggal" => $request->tanggal,
// "no_pencatatan" => 'TBR-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his'),
// "sale_id" => 0,
// "deskripsi" => "Gagal Retur suplier",
// "pengguna_id" => auth()->user()->id,
// "retur_id" => $retur_pembelian->id
// ]);
// }
// DetailTransaksiBarangRusak::create([
// "transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
// "item_id" => $request->id[$i],
// "nama_item" => $item->nama_item,
// "harga_item" => 0,
// "qty" => $request->jumlah[$i],
// ]);
// }
}
}
if ($bukti_retur_lama != null && $bukti_retur_lama != $bukti_retur) {
Storage::delete($bukti_retur_lama);
}
Helper::addUserLog("Mengubah Retur Pembelian : ".$retur_pembelian->no_pembelian, $retur_pembelian->toArray());
DB::commit();
return redirect(route("retur_pembelian.index"))->with('success', 'Retur Penjualan berhasil diubah.');
} catch (\Throwable $th) {
DB::rollback();
Log::error($th);
return redirect(route("retur_pembelian.index"))->with('error', 'Retur Penjualan gagal diubah.');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id): RedirectResponse
{
DB::beginTransaction();
try {
$data = ReturPembelian::with('tokos')->find($id);
$detail = DetailReturPembelian::where("retur_pembelian_id", $data->id);
$barang_rusak = TransaksiBarangRusak::where("retur_id", $id);
if (isset($detail)) {
foreach ($detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old)) {
if ($data->ket_tambahan != "Tukar Barang") {
$item_old->update([
'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,
]);
}
}
}
}
$barang_rusak->delete();
$detail->delete();
}
$data->tokos()->detach();
$data->delete();
if ($data->bukti_retur != null) {
Storage::delete($data->bukti_retur);
}
Helper::addUserLog("Menghapus Retur Pembelian : ".$data->no_pembelian, $data->toArray());
DB::commit();
return redirect()->route('retur_pembelian.index')->with('success', 'Retur Pembelian berhasil dihapus');
} catch (\Throwable $th) {
DB::rollback();
Log::error($th);
return redirect()->route('retur_pembelian.index')->with('error', 'Pembelian gagal dihapus');
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]