<?php
namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\Pengguna;
use App\Models\ReturPenjualan;
use App\Models\DetailReturPenjualan;
use App\Models\Sale;
use App\Models\Item;
use App\Models\Penjualan;
use App\Models\Pelanggan;
use App\Models\Toko;
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;
class ReturPenjualanController 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[] = $date->format('d-M');
}
$datas = ReturPenjualan::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_penjualan.index", $data);
}
/**
* Show the form for creating a new resource.
*/
public function create(): Response
{
$penjualans = Penjualan::with('pelanggan','detail_penjualan')->orderBy('tanggal_penjualan','DESC')->get();
$penjualan = null;
if(request()->penjualan_id != null){
$penjualan = Penjualan::with('pelanggan','detail_penjualan')->find(request()->penjualan_id);
}
$pelanggan = Pelanggan::all();
$sales = Sale::all();
$tokos = auth()->user()->role->tokos;
$pengguna = Pengguna::all();
$data = [
"penjualans" => $penjualans,
"pelanggans" => $pelanggan,
"sales" => $sales,
"tokos" => $tokos,
"pengguna" => $pengguna,
"penjualan" => $penjualan
];
return response()->view("retur_penjualan.create", $data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
$request->validate([
'nama' => 'required',
'kontak' => 'required',
'kecamatan_pelanggan' => 'required',
'alamat' => 'required',
]);
DB::beginTransaction();
try {
if($request->penjualan_id != null){
$penjualan = Penjualan::with('pelanggan')->find($request->penjualan_id);
$penjualan->update([
'status_lanjutan'=>'retur'
]);
}
$findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
if ($findPelanggan) {
$update = $findPelanggan->update([
'nama_pelanggan' => $request->nama,
'telp_pelanggan' => $request->kontak,
'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
'alamat_pelanggan' => $request->alamat,
'pengguna_id' => 0
]);
$pelanggan_id = $findPelanggan->id;
} else {
$pelanggan = Pelanggan::create([
'nama_pelanggan' => $request->nama,
'telp_pelanggan' => $request->kontak,
'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
'alamat_pelanggan' => $request->alamat,
'pengguna_id' => 0
]);
$pelanggan->save();
$pelanggan_id = $pelanggan->id;
}
$retur_penjualan = ReturPenjualan::create([
"no_retur" => $request->no_retur,
"pelanggan_id" => $pelanggan_id,
"sale_id" => $request->sale_id,
"tanggal_penjualan" => $request->tanggal,
"keterangan" => $request->keterangan,
"no_penjualan" => @$penjualan->nomor_nota,
"penjualan_id" => @$penjualan->id,
"pengguna_id" => auth()->user()->id
]);
$retur_penjualan->save();
$retur_penjualan->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]);
DetailReturPenjualan::create([
"retur_penjualan_id" => $retur_penjualan->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"qty" => $request->jumlah[$i],
]);
// $item->update([
// "stok" => $item->stok + $request->jumlah[$i],
// ]);
// if ($item->stok_item_tokos->count() > 0) {
// if ($item->stok_item_tokos->where("toko_id", $request->toko_id)->count() > 0) {
// $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],
// ]);
// }
// }
}
}
Helper::addUserLog("Menambahkan Retur Penjualan : ".$retur_penjualan->no_penjualan, $retur_penjualan->toArray());
DB::commit();
if(request()->penjualan_id != null){
return redirect()->route('penjualan.index')->with('success', 'Penjualan '.$penjualan->nomor_nota.' berhasil diretur');
}
return redirect(route("retur_penjualan.index"))->with('success', 'Retur Penjualan berhasil ditambahkan.');
} catch (\Throwable $th) {
//throw $th;
DB::rollBack();
Log::error($th);
return redirect()->back()->with('error', 'Retur Penjualan gagal ditambahkan. ' . $th->getMessage())->withInput($request->all());
}
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id): Response
{
$penjualans = Penjualan::with('pelanggan','detail_penjualan')->orderBy('tanggal_penjualan','DESC')->get();
$datas = ReturPenjualan::with('pelanggan')->find($id);
$pelanggan = Pelanggan::all();
$pengguna = Pengguna::all();
$sales = Sale::all();
$tokos = auth()->user()->role->tokos;
$data = [
"penjualans" => $penjualans,
"datas" => $datas,
"pelanggans" => $pelanggan,
"pengguna" => $pengguna,
"sales" => $sales,
"tokos" => $tokos
];
return response()->view("retur_penjualan.edit", $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id): RedirectResponse
{
$request->validate([
'nama' => 'required',
'kontak' => 'required',
'kecamatan_pelanggan' => 'required',
'alamat' => 'required',
]);
DB::beginTransaction();
try {
$retur_penjualan = ReturPenjualan::find($id);
$old_detail = DetailReturPenjualan::where("retur_penjualan_id", $retur_penjualan->id);
$findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
if ($findPelanggan) {
$update = $findPelanggan->update([
'nama_pelanggan' => $request->nama,
'telp_pelanggan' => $request->kontak,
'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
'alamat_pelanggan' => $request->alamat,
'pengguna_id' => 0
]);
$pelanggan_id = $findPelanggan->id;
} else {
$pelanggan = Pelanggan::create([
'nama_pelanggan' => $request->nama,
'telp_pelanggan' => $request->kontak,
'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
'alamat_pelanggan' => $request->alamat,
'pengguna_id' => 0
]);
$pelanggan->save();
$pelanggan_id = $pelanggan->id;
}
if($request->penjualan_id != null){
$penjualan = Penjualan::with('pelanggan')->find($request->penjualan_id);
$penjualan->update([
'status_lanjutan'=>'retur'
]);
}
$retur_penjualan->update([
"pelanggan_id" => $pelanggan_id,
"sale_id" => $request->sale_id,
"tanggal_penjualan" => $request->tanggal,
"keterangan" => $request->keterangan,
// "no_penjualan" => $request->no_penjualan,
"no_penjualan" => @$penjualan->nomor_nota,
"penjualan_id" => @$penjualan->id,
"pengguna_id" => auth()->user()->id
]);
$retur_penjualan->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)) {
$item_old->update([
'stok' => $item_old->stok - $detail->qty
]);
if ($item_old->stok_item_tokos->count() > 0) {
if ($item_old->stok_item_tokos->where("toko_id", $request->toko_id)->count() > 0) {
$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_detail->delete();
for ($i = 0; $i < count($request->jumlah); $i++) {
$item = Item::with('stok_item_tokos')->find($request->id[$i]);
if (isset($item)) {
DetailReturPenjualan::create([
"retur_penjualan_id" => $retur_penjualan->id,
"item_id" => $request->id[$i],
"nama_item" => $item->nama_item,
"qty" => $request->jumlah[$i],
]);
// $item->update([
// "stok" => $item->stok + $request->jumlah[$i],
// ]);
// if ($item->stok_item_tokos->count() > 0) {
// if ($item->stok_item_tokos->where("toko_id", $request->toko_id)->count() > 0) {
// $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],
// ]);
// }
// }
}
}
}
Helper::addUserLog("Mengubah Retur Penjualan : ".$retur_penjualan->no_penjualan, $retur_penjualan->toArray());
DB::commit();
return redirect(request()->back ? route(request()->back) : route("retur_penjualan.index"))->with('success', 'Retur Penjualan berhasil diubah.');
} catch (\Throwable $th) {
//throw $th;
DB::rollBack();
Log::error($th);
return redirect()->back()->with('error', 'Retur Penjualan gagal diubah. ' . $th->getMessage())->withInput($request->all());
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id): RedirectResponse
{
DB::beginTransaction();
try {
$data = ReturPenjualan::find($id);
$detail = DetailReturPenjualan::where("retur_penjualan_id", $data->id);
foreach ($detail->get() as $detail) {
$item_old = Item::with('stok_item_tokos')->find($detail->item_id);
// $item_old->update([
// 'stok' => $item_old->stok + $detail->qty
// ]);
// if ($item_old->stok_item_tokos->count() > 0 && $data->tokos->count() > 0) {
// if ($item_old->stok_item_tokos->where("toko_id", $data->tokos->first()->id)->count() > 0) {
// $item_old->stok_item_tokos()->updateOrCreate(['toko_id', $data->tokos->first()->id],[
// "stok" => $item_old->stok_item_tokos->where("toko_id", $data->tokos->first()->id)->first()->stok + $detail->qty,
// ]);
// }
// }
}
$data->tokos()->detach();;
$detail->delete();
$data->delete();
Helper::addUserLog("Menghapus Retur Penjualan : ".$data->no_penjualan, $data->toArray());
DB::commit();
return redirect(request()->back ? route(request()->back) : route('retur_penjualan.index'))->with('success', 'Retur Penjualan berhasil dihapus');
} catch (\Throwable $th) {
DB::rollback();
Log::error($th);
return redirect()->back()->with('error', 'Penjualan gagal dihapus');
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]