<?php
namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\DetailPenjualan;
use App\Models\DetailReturPenjualan;
use App\Models\Item;
use App\Models\Pengguna;
use App\Models\Penjualan;
use App\Models\Pesan;
use App\Models\RefundPenjualan;
use App\Models\ReturPenjualan;
use App\Models\RiwayatTransaksi;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Response;
class RefundPenjualanController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index() {}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
$datas = Penjualan::find($id);
$penggunas = Pengguna::all();
$pengguna = $datas->pengguna->nama_pengguna;
$refund_services = RefundPenjualan::where('penjualan_id', $datas->id)->get();
$data = [
"datas" => $datas,
"pengguna" => $penggunas,
"refund_services" => $refund_services,
];
return response()->view("refund_penjualan.edit", $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
DB::beginTransaction();
try {
$penjualan = Penjualan::find($id);
$uang_refund = str_replace(
"Rp ",
"",
str_replace(".", "", $request->uang_refund)
);
$datas = Penjualan::with('pelanggan')->find($id);
$sales = Pengguna::find($request->sale_id);
$kasir = Pengguna::find($request->kasir_id);
$datas->update([
"status_pembayaran" => "refund",
]);
$dataInput = [
"uang_refund" => $uang_refund,
"jenis_refund" => $request->jenis_refund,
"keterangan" => $request->keterangan,
"penjualan_id" => $id,
"sales_out" => $sales->nama_pengguna,
"kasir_out" => $kasir->nama_pengguna,
];
if ($request->hasFile('bukti')) {
$file = $request->file('bukti');
$ekstensi = $file->extension();
$baru = "Bukti-Refund-" . date('ymdhis') . ".$ekstensi";
$file->move(public_path('images/Bukti_Refund_Penjualan'), $baru);
$dataInput['bukti'] = $baru;
}
$refund = RefundPenjualan::create($dataInput);
if ($request->jenis_refund == 1) {
$retur_penjualan = ReturPenjualan::create([
"pelanggan_id" => $datas->pelanggan_id,
"sale_id" => $request->sale_id,
"tanggal_penjualan" => now(),
"keterangan" => $request->keterangan,
"no_retur" => "RFN-".date("YmdHis"),
"no_penjualan" => $request->nomor_nota,
"penjualan_id" => @$penjualan->id,
"pengguna_id" => auth()->user()->id
]);
$detail = DetailPenjualan::where('penjualan_id', $id)->get();
foreach ($detail as $d) {
$item = Item::find($d->item_id);
DetailReturPenjualan::create([
"retur_penjualan_id" => $retur_penjualan->id,
"item_id" => $d->item_id,
"nama_item" => $d->nama_item,
"qty" => $d->qty,
]);
}
} elseif ($request->jenis_refund == 0) {
$detail = DetailPenjualan::where('penjualan_id', $id)->get();
if ($uang_refund <= $datas->uang_masuk) {
$datas->update(['uang_masuk' => $datas->uang_masuk - $uang_refund]);
} else {
return redirect()->back()->with('error', 'uang refund lebih besar dari uang yang dibayarkan!');
}
foreach ($detail as $d) {
$item = Item::find($d->item_id);
if (isset($item)) {
$item->update([
'stok' => $item->stok + $d->qty
]);
}
}
} else {
}
RiwayatTransaksi::create([
"pelanggan_id" => $datas->pelanggan->id,
"no_transaksi" => $datas->nomor_nota,
"jenis_transaksi" => "Refund Penjualan",
"tanggal" => now(),
"biaya" => $uang_refund,
]);
$refund_penjualan = RefundPenjualan::where('penjualan_id', $id)->latest()->first();
$isi_pesan = 'Halo kak ' . $penjualan->pelanggan->nama_pelanggan . ',
berikut ini lampiran bukti Refund dari kami. Terimaksih 😊
';
Pesan::create([
"isi_pesan" => $isi_pesan,
"service_id" => $id,
]);
$nomor_telepon = $datas->pelanggan->telp_pelanggan;
$data = [
"datas" => $datas,
"sales" => $penjualan->pengguna->nama_pengguna,
"refund_penjualan" => $refund_penjualan,
];
Helper::sendWa($penjualan->pelanggan->telp_pelanggan, $isi_pesan);
$pdf = Pdf::loadView('refund_penjualan.nota_refund', $data);
$fileName = $datas->pelanggan->telp_pelanggan . 'NotaRefund-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
$pdf->setPaper('A4', 'landscape');
$pdf->render();
$path = public_path('pdf/Nota/' . $fileName);
$pdf->save($path);
$pdfUrl = url('pdf/Nota/' . $fileName);
Helper::sendNotaPDF($penjualan->pelanggan->telp_pelanggan, $pdfUrl);
File::delete($path);
if ($refund->bukti != null) {
Helper::sendNotaPDF($penjualan->pelanggan->telp_pelanggan, url('images/Bukti_Refund_Penjualan/' . $refund->bukti));
}
Helper::addUserLog("Merefund penjualan " . $penjualan->nomor_nota, $penjualan->toArray());
DB::commit();
// return $pdf->stream($path, array("Attachment" => false));
return redirect()->route('penjualan.index')->with('success', 'Refund penjualan berhasil dicatat');
} catch (\Throwable $th) {
DB::rollback();
// dd($th->getMessage());
Log::error($th);
return redirect()->back()->withInput($request->all())->with('error', 'Refund penjualan gagal dicatat');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]