<?php
namespace App\Http\Controllers;
use App\Exports\PelangganExport;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Models\Pelanggan;
use App\Models\Penjualan;
use App\Models\Service;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
class PelangganController extends Controller
{
/**
* Display a listing of the resource.
*/
private $sorting_order = "desc";
public function index(Request $request)
{
if ($request->sorting_order == "desc") {
$this->sorting_order = "asc";
}
$sorting_order = $this->sorting_order;
$begin = new DateTime('-1 month');
$end = new DateTime();
$periode = [
$begin->format('d/m/Y'),
$end->format('d/m/Y'),
];
// dd($begin, $end);
$datas = Pelanggan::withCount("riwayat");
if (request()->periode) {
$periode = explode(" - ", request()->periode);
$begin = DateTime::createFromFormat('d/m/Y', $periode[0])->setTime(0, 0, 0);
$end = DateTime::createFromFormat('d/m/Y', $periode[1])->setTime(23, 59, 59);
if (isset($begin) && isset($end)) {
$datas->tanggal($begin, $end);
}
}
if (isset($request->kecamatan)) {
$datas->kecamatan($request->kecamatan);
}
$countAll = $datas->count();
$dataKecamatan = Pelanggan::select("kecamatan_pelanggan")->distinct()->get()->sortBy("kecamatan_pelanggan");
if ($request->order) {
$order = $request->order;
if ($order == "nama") {
$datas->orderBy("nama_pelanggan", $sorting_order);
} else if ($order == "telp") {
$datas->orderBy("telp_pelanggan", $sorting_order);
} else if ($order == "alamat") {
$datas->orderBy("alamat_pelanggan", $sorting_order);
} else if ($order == "kecamatan") {
$datas->orderBy("kecamatan_pelanggan", $sorting_order);
} else if ($order == "nominal") {
$datas->with("riwayat")->riwayatSum()->groupBy("pelanggans.id")->orderBy("total", $sorting_order);
} else if ($order == "waktu") {
$datas->orderBy("created_at", $sorting_order);
} else if ($order == "total") {
$datas->orderBy("riwayat_count", $sorting_order);
}
} else {
$datas->orderBy("riwayat_count", $sorting_order);
}
if (isset($request->nama_pelanggan)) {
$datas = $datas->cari($request->nama_pelanggan);
}
// dd($datas->get(), $begin, $end);
$datas = $datas->paginate(15);
return response()->view("pelanggan.index", compact("request", "datas", "sorting_order", "dataKecamatan", "begin", "end", "countAll","periode"));
}
public function exportExcel(Request $request)
{
$sorting_order = $this->sorting_order;
$begin = new DateTime('-1 month');
$end = new DateTime();
if (isset($request->begin) && isset($request->end)) {
$begin = DateTime::createFromFormat('Ymd h:i:s', $request->begin)->setTime(0, 0, 0);
$end = DateTime::createFromFormat('Ymd h:i:s', $request->end)->setTime(23, 59, 59);
}
$begin->format('d/m/Y');
$end->format('d/m/Y');
if ($this->sorting_order == "asc") {
$sorting_order = "desc";
} else {
$sorting_order = "asc";
}
$datas = Pelanggan::withCount("riwayat")->orderBy("riwayat_count", $sorting_order);
if (isset($begin) && isset($end)) {
$datas->tanggal($begin, $end);
}
if (isset($request->kecamatan)) {
$datas->kecamatan($request->kecamatan);
}
if ($request->order) {
$order = $request->order;
if ($order == "nama") {
$datas->orderBy("nama_pelanggan", $sorting_order);
} else if ($order == "telp") {
$datas->orderBy("telp_pelanggan", $sorting_order);
} else if ($order == "alamat") {
$datas->orderBy("alamat_pelanggan", $sorting_order);
} else if ($order == "nominal") {
$datas->with("riwayat")->riwayatSum()->groupBy("pelanggans.id")->orderBy("total", $sorting_order);
} else if ($order == "waktu") {
$datas->orderBy("created_at", $sorting_order);
}
}
// if (isset($begin) && isset($end)) {
// $datas = Pelanggan::tanggal($begin, $end)->paginate(15);
// return response()->view("pelanggan.index", compact("request", "datas"));
// }
$datas = $datas->get();
$dataArray = [];
foreach ($datas as $data) {
$dataArray[] = [
$data->nama_pelanggan,
$data->telp_pelanggan,
$data->alamat_pelanggan,
$data->riwayat->sum("biaya"),
count($data->riwayat),
$data->created_at ? $data->created_at->toDateTimeString() : "-",
];
}
// dd($dataArray);
return Excel::download(new PelangganExport($dataArray), 'Laporan Data-Pelanggan.xlsx');
}
/**
* Show the form for creating a new resource.
*/
public function create(): Response
{
return response()->view("pelanggan.create");
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
try {
$request->validate([
'nama_pelanggan' => 'required',
'telp_pelanggan' => 'required|max:13|unique:pelanggans,telp_pelanggan',
'alamat_pelanggan' => 'required',
'kecamatan_pelanggan' => 'required',
], ['telp_pelanggan.unique' => 'Nomor telah terdaftar silahkan gunakan nomor yang lain!']);
Pelanggan::create([
"nama_pelanggan" => $request->nama_pelanggan,
"kecamatan_pelanggan" => $request->kecamatan_pelanggan,
"telp_pelanggan" => $request->telp_pelanggan,
"alamat_pelanggan" => $request->alamat_pelanggan,
"pengguna_id" => Auth::user()->id,
]);
return redirect(route("pelanggan.index"))->with('success', 'data berhasil disimpan');
} catch (\Throwable $th) {
return redirect()->route('pelanggan.index')->with('error', $th->getMessage());
}
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$data = Pelanggan::find($id);
return response()->view("pelanggan.info", compact("data"));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id): Response
{
$data = Pelanggan::find($id);
return response()->view("pelanggan.edit", compact("data"));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id): RedirectResponse
{
$data = Pelanggan::find($id);
DB::beginTransaction();
try {
$request->validate([
'nama_pelanggan' => 'required',
'telp_pelanggan' => 'required|max:13',
'alamat_pelanggan' => 'required',
'kecamatan_pelanggan' => 'required',
], ['telp_pelanggan.unique' => 'Nomor telah terdaftar silahkan gunakan nomor yang lain!']);
$data->update([
"nama_pelanggan" => $request->nama_pelanggan,
"kecamatan_pelanggan" => $request->kecamatan_pelanggan,
"telp_pelanggan" => $request->telp_pelanggan,
"alamat_pelanggan" => $request->alamat_pelanggan,
]);
DB::commit();
return redirect()->route("pelanggan.index")->with('success', 'data berhasil disimpan');
} catch (\Throwable $th) {
DB::rollBack();
return redirect()->route('pelanggan.index')->with('error', $th->getMessage());
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id): RedirectResponse
{
DB::beginTransaction();
try {
$data = Pelanggan::find($id);
$penjualan = Penjualan::where('pelanggan_id', $data->id);
$service = Service::where('pelanggan_id', $data->id);
$penjualan->delete();
$service->delete();
$data->delete();
DB::commit();
return redirect()->route('pelanggan.index')->with('success', 'Pelanggan berhasil dihapus');
} catch (\Throwable $th) {
DB::rollback();
return redirect()->route('pelanggan.index')->with('error', $th->getMessage());
}
}
public function getPelanggan(string $id)
{
$datas = Pelanggan::find($id);
return response()->json([
'data' => $datas,
]);
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]