<?php
namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\DetailGaransi;
use App\Models\DetailKirimSupplier;
use App\Models\DetailPenjualan;
use App\Models\DetailReturPembelian;
use App\Models\DetailReturPenjualan;
use App\Models\Item;
use App\Models\KirimSupplier;
use App\Models\Supplier;
use App\Models\Toko;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
class KirimSupplierController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$detail_garansis = DetailGaransi::with('garansi', 'item')->has('garansi')->get();
$detail_retur_pembelians = DetailReturPembelian::with('retur_pembelian', 'item')->has('retur_pembelian')->get();
$detail_retur_penjualans = DetailReturPenjualan::with('retur_penjualan', 'item')->has('retur_penjualan')->get();
$items = [];
foreach ($detail_garansis as $detail) {
$items[] = collect([
'item_id' => $detail->item_id,
'nama_item' => $detail->nama_item,
'qty' => $detail->qty,
'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
'garansi' => $detail->garansi
]);
}
foreach ($detail_retur_pembelians as $detail) {
$items[] = collect([
'item_id' => $detail->item_id,
'nama_item' => $detail->nama_item,
'qty' => $detail->qty,
'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
'retur_pembelian' => $detail->retur_pembelian
]);
}
foreach ($detail_retur_penjualans as $detail) {
$items[] = collect([
'item_id' => $detail->item_id,
'nama_item' => $detail->nama_item,
'qty' => $detail->qty,
'biaya_item' => $detail->item->biaya_item,
'retur_penjualan' => $detail->retur_penjualan
]);
}
$suppliers = Supplier::with('pembelian.detail_pembelian', 'retur_pembelian.detail')->get();
return view('kirim-supplier.create', compact('items', 'suppliers'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'supplier_id' => 'required',
"file_bukti" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
]);
if (!$request->has('jumlah')) {
return redirect()->back()->with('error', 'Silahkan pilih item terlebih dahulu')->withInput($request->all());
}
DB::beginTransaction();
try {
$file_bukti = null;
if ($request->hasFile('file_bukti')) {
$request->validate([
'file_bukti' => 'image'
]);
$file_bukti = $request->file('file_bukti');
$photo_ekstensi = $file_bukti->extension();
$photo_baru = "bukti-kirim-" . Str::slug($request->no_retur) . ".$photo_ekstensi";
$file_bukti = $file_bukti->storeAs('file_bukti', $photo_baru);
}
$kirimSupplier = KirimSupplier::create([
'pengguna_id' => auth()->user()->id,
'supplier_id' => $request->supplier_id,
'no_kirim' => $request->no_kirim,
'tanggal_kirim' => $request->tanggal,
'status_kirim' => 'pending',
'jenis_kompensasi' => 'pending',
'file_bukti'=>$file_bukti,
'keterangan'=>$request->keterangan
]);
foreach ($request->jumlah as $key => $jumlah) {
$item = Item::find($request->id[$key]);
if ($item) {
$detail = DetailKirimSupplier::create([
'kirim_supplier_id' => $kirimSupplier->id,
'item_id' => $request->id[$key],
'nama_item' => $item->nama_item,
'biaya_item' => $request->harga[$key],
'qty' => $jumlah,
'detail_garansi_id' => @$request->detail_garansi_id[$key] ?? null,
'detail_retur_pembelian_id' => @$request->detail_retur_pembelian_id[$key] ?? null,
'detail_retur_penjualan_id' => @$request->detail_retur_penjualan_id[$key] ?? null,
]);
if (isset($request->detail_garansi_id[$key]) && @$request->detail_garansi_id[$key] != null) {
$detailGaransi = DetailGaransi::find($request->detail_garansi_id[$key]);
if ($detailGaransi) {
$detailGaransi->update([
'status_item' => 'pending'
]);
}
}
}
}
Helper::addUserLog("Menambah pengiriman supplier : " . $kirimSupplier->no_kirim, $kirimSupplier->toArray());
DB::commit();
return redirect()->route('retur-dan-garansi.index')->with('success', 'Berhasil menambah pengirimaan supplier');
} catch (\Throwable $th) {
//throw $th;
DB::rollBack();
Log::error($th);
return redirect()->back()->with('error', 'Gagal menambah pengirimaan supplier')->withInput($request->all());
}
}
/**
* Display the specified resource.
*/
public function show(KirimSupplier $kirimSupplier)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$kirimSupplier = KirimSupplier::with('detail_kirim_supplier.item')->findOrFail($id);
$detail_garansis = DetailGaransi::with('garansi', 'item')->has('garansi')->get();
$detail_retur_pembelians = DetailReturPembelian::with('retur_pembelian', 'item')->has('retur_pembelian')->get();
$detail_retur_penjualans = DetailReturPenjualan::with('retur_penjualan', 'item')->has('retur_penjualan')->get();
$items = [];
foreach ($detail_garansis as $detail) {
$items[] = collect([
'item_id' => $detail->item_id,
'nama_item' => $detail->nama_item,
'qty' => $detail->qty,
'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
'garansi' => $detail->garansi
]);
}
foreach ($detail_retur_pembelians as $detail) {
$items[] = collect([
'item_id' => $detail->item_id,
'nama_item' => $detail->nama_item,
'qty' => $detail->qty,
'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
'retur_pembelian' => $detail->retur_pembelian
]);
}
foreach ($detail_retur_penjualans as $detail) {
$items[] = collect([
'item_id' => $detail->item_id,
'nama_item' => $detail->nama_item,
'qty' => $detail->qty,
'biaya_item' => $detail->item->biaya_item,
'retur_penjualan' => $detail->retur_penjualan
]);
}
$suppliers = Supplier::with('pembelian.detail_pembelian', 'retur_pembelian.detail')->get();
return view('kirim-supplier.edit', ['data' => $kirimSupplier, 'suppliers' => $suppliers, 'items' => $items]);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, KirimSupplier $kirimSupplier)
{
$request->validate([
'supplier_id' => 'required',
"file_bukti" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
]);
if (!$request->has('jumlah')) {
return redirect()->back()->with('error', 'Silahkan pilih item terlebih dahulu')->withInput($request->all());
}
DB::beginTransaction();
try {
$file_bukti = null;
if ($request->hasFile('file_bukti')) {
$request->validate([
'file_bukti' => 'image'
]);
$file_bukti = $request->file('file_bukti');
$photo_ekstensi = $file_bukti->extension();
$photo_baru = "bukti-kirim-" . Str::slug($request->no_retur) . ".$photo_ekstensi";
$file_bukti = $file_bukti->storeAs('file_bukti', $photo_baru);
}
$kirimSupplier->update([
'supplier_id' => $request->supplier_id,
'tanggal_kirim' => $request->tanggal,
'file_bukti'=>$file_bukti,
'keterangan'=>$request->keterangan
]);
foreach ($request->jumlah as $key => $jumlah) {
$item = Item::find($request->id[$key]);
if ($item) {
DetailKirimSupplier::updateOrCreate([
'kirim_supplier_id' => $kirimSupplier->id,
'item_id' => $request->id[$key],
], [
'nama_item' => $item->nama_item,
'biaya_item' => $request->harga[$key],
'qty' => $jumlah,
'detail_garansi_id' => @$request->detail_garansi_id[$key] ?? null,
'detail_retur_pembelian_id' => @$request->detail_retur_pembelian_id[$key] ?? null,
'detail_retur_penjualan_id' => @$request->detail_retur_penjualan_id[$key] ?? null,
]);
}
}
Helper::addUserLog("Mengubah pengiriman supplier : " . $kirimSupplier->no_kirim, $kirimSupplier->toArray());
DB::commit();
return redirect()->route('retur-dan-garansi.index')->with('success', 'Berhasil Mengubah pengirimaan supplier');
} catch (\Throwable $th) {
//throw $th;
DB::rollBack();
Log::error($th);
return redirect()->back()->with('error', 'Gagal Mengubah pengirimaan supplier')->withInput($request->all());
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(KirimSupplier $kirimSupplier)
{
$toko_id = Toko::first()->id ?? 0;
DB::beginTransaction();
try {
foreach ($kirimSupplier->detail_kirim_supplier as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
if (isset($item_old) && $kirimSupplier->status_kirim == "selesai") {
if ($kirimSupplier->jenis_kompensasi != "tukar-barang") {
$item_old->update([
'stok' => $item_old->stok + $detail->qty
]);
$item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$toko_id], [
"stok" => (@$item_old->stok_item_tokos->first()->stok ?? 0) + $detail->qty,
]);
}
}
}
$kirimSupplier->detail_kirim_supplier()->delete();
$kirimSupplier->delete();
Helper::addUserLog("Menghapus pengiriman supplier : " . $kirimSupplier->no_kirim, $kirimSupplier->toArray());
DB::commit();
return redirect()->route('retur-dan-garansi.index')->with('success', 'Berhasil menghapus pengirimaan supplier');
} catch (\Throwable $th) {
//throw $th;
DB::rollBack();
Log::error($th);
return redirect()->back()->with('error', 'Gagal menghapus pengirimaan supplier');
}
}
public function status(Request $request, $id)
{
DB::beginTransaction();
try {
$kirimSupplier = KirimSupplier::findOrFail($id);
if ($kirimSupplier->status_kirim != "selesai" && $request->status_kirim == "selesai" && $kirimSupplier->jenis_kompensasi != "tukar-barang") {
foreach ($kirimSupplier->detail as $detail) {
$item = Item::with('stok_item_tokos')->find($detail->item_id);
$item->update([
"stok" => $item->stok - $detail->qty,
]);
$item->stok_item_tokos()->first()->update(["stok" => (@$item->stok_item_tokos->first()->stok ?? 0) - $detail->qty]);
}
}
if ($kirimSupplier->status_kirim == "selesai" && $request->status_kirim != "selesai" && $kirimSupplier->jenis_kompensasi != "tukar-barang") {
foreach ($kirimSupplier->detail as $detail) {
$item = Item::with('stok_item_tokos')->find($detail->item_id);
$item->update([
"stok" => $item->stok + $detail->qty,
]);
$item->stok_item_tokos()->first()->update(["stok" => (@$item->stok_item_tokos->first()->stok ?? 0) + $detail->qty]);
}
}
$kirimSupplier->update([
'status_kirim' => $request->status_kirim
]);
DB::commit();
return redirect()->route('retur-dan-garansi.index')->with('success', 'Status Retur berhasil diubah');
} catch (\Throwable $th) {
DB::rollback();
Log::error($th);
return redirect()->back()->with('error', 'Status Retur gagal diubah');
}
}
public function kompensasi(Request $request, $id)
{
DB::beginTransaction();
try {
$kirimSupplier = KirimSupplier::findOrFail($id);
$kirimSupplier->update([
'jenis_kompensasi' => $request->jenis_kompensasi
]);
DB::commit();
return redirect()->route('retur-dan-garansi.index')->with('success', 'Jenis Kompensasi berhasil diubah');
} catch (\Throwable $th) {
DB::rollback();
Log::error($th);
return redirect()->back()->with('error', 'Jenis Kompensasi gagal diubah');
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]