<?php
namespace App\Http\Controllers;
use App\Models\LaporanKasir;
use App\Models\Pengguna;
use App\Models\Pesan;
use App\Models\PesanAction;
use App\Models\PesanOtomatis;
use App\Models\Profil;
use App\Models\refund;
use App\Models\RiwayatTransaksi;
use App\Models\Service;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\File;
class RefundController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): Response {}
/**
* Show the form for creating a new resource.
*/
public function create(): Response
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
//
}
/**
* 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 = Service::find($id);
$penggunas = Pengguna::all();
$pengguna = $datas->pengguna->nama_pengguna;
$refund_services = refund::where('service_id', $datas->id)->get();
$data = [
"datas" => $datas,
"pengguna" => $penggunas,
"refund_services" => $refund_services,
];
return response()->view("refund.edit", $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
DB::beginTransaction();
try {
$service = Service::find($id);
$uang_refund = str_replace(
"Rp ",
"",
str_replace(".", "", $request->uang_refund)
);
$datas = Service::find($id);
$tanggal = $datas->tanggal;
$lk_kasir = LaporanKasir::where('tanggal', $tanggal)->whereRaw("FIND_IN_SET(?, services)", [$id])->get();
$sales = Pengguna::find($request->sale_id);
$kasir = Pengguna::find($request->kasir_id);
$datas->update([
"tanggal_selesai" => now(),
"sales_out" => $sales->nama_pengguna,
"kasir_out" => $kasir->nama_pengguna,
"kasir_out" => $kasir->nama_pengguna,
"status_transaksi" => 'cancel',
]);
refund::create([
"uang_refund" => $uang_refund,
"jenis_refund" => $request->jenis_refund,
"keterangan" => $request->keterangan,
"service_id" => $id,
]);
if ($request->jenis_refund == 0) {
if ($datas->uang_bayar - $uang_refund >= 0) {
$datas->update([
'uang_bayar' => $datas->uang_bayar - $uang_refund,
"status_pembayaran" => "refund_dp",
]);
} else {
return redirect()->back()->with('error', 'Uang yang diKembalikan lebih besar dari Uang Muka. Periksa kembali Uang Refund! ');
}
} else {
if ($datas->pembayaran_service->count() > 0) {
foreach ($datas->pembayaran_service as $pembayaran) {
$datas->update([
"status_pembayaran" => "refund",
]);
}
} else {
return redirect()->route('service.index')->with('error', 'Pembayaran service belum dilakukan, refund tidak bisa diproses!');
}
}
RiwayatTransaksi::create([
"pelanggan_id" => $datas->pelanggan->id,
"no_transaksi" => $datas->no_service,
"jenis_transaksi" => "Refund Service",
"tanggal" => now(),
"biaya" => $uang_refund,
]);
// Remove pesan
$pesan_otomatis = PesanOtomatis::where('id_service', $service->id)->where('status_batal', 'cancel')->get();
if (isset($pesan_otomatis)) {
foreach ($pesan_otomatis as $pesan) {
\Helper::RemoveMessage($pesan->id_pesan);
$pesan->delete();
}
}
DB::commit();
$refund_services = refund::where('service_id', $id)->first();
// pesan Action
$pesan_action = PesanAction::where('status', 'refund')->first();
if (isset($pesan_action)) {
$placeholders = [
'{ service_id }',
'{ nama_pelanggan }',
'{ status }',
'{ biaya }',
'{ uang_muka }',
'{ grand_total }',
'{ tipe_hp }',
'{ kerusakan }',
'{ kasir }'
];
$replacements = [
$service->no_service,
$service->pelanggan->nama_pelanggan,
ucwords(str_replace('_', ' ', $service->status)),
$service->biaya,
$service->uang_bayar,
$service->grand_total,
$service->merk . ' (' . $service->tipe . ')',
$service->kerusakan,
$service->pengguna->nama_pengguna
];
$isi_pesan = str_replace($placeholders, $replacements, $pesan_action->isi_pesan);
if ($pesan_action->nota == 1) {
$sales = Pengguna::where('id', $service->sale_id)->first();
$profil = Profil::first();
$data = [
"sales" => $service->pengguna->nama_pengguna,
"datas" => $service,
"profil" => $profil,
"refund_service" => $refund_services,
];
$pdf = Pdf::loadView('refund.nota_refund', $data);
$fileName = $service->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);
// return $pdf->stream($path, array("Attachment" => false));
$pdf->save($path);
$pdfUrl = url('pdf/Nota/' . $fileName);
\Helper::sendNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl);
File::delete($path);
}
}
Pesan::create([
"isi_pesan" => $isi_pesan,
"service_id" => $id,
]);
$nomor_telepon = $service->pelanggan->telp_pelanggan;
\Helper::sendWa($service->pelanggan->telp_pelanggan, $isi_pesan);
return redirect()->route('service.index')->with('success', 'Refund Service berhasil dicatat');
} catch (\Throwable $th) {
DB::rollback();
dd($th->getMessage());
return redirect()->route('service.index')->with('error', 'Refund Service gagal dicatat');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id): RedirectResponse
{
//
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]