Anons79 Mini Shell

Directory : /home/aplikasiposinfo/public_html/joglocell.fixmate.id/app/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/public_html/joglocell.fixmate.id/app/Http/Controllers/PelangganController.php

<?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::with(['riwayat', 'penjualan.detail_penjualan', 'service' => function ($q) {
        //     $q->where('status_transaksi', 'success')->with('detail');
        // }])->withCount("riwayat")->withCount('penjualan')->withCount(['service' => function ($q) {
        //     $q->where('status_transaksi', 'success');
        // }]);
        $pelanggans = Pelanggan::query();
         $datas = Pelanggan::with(['riwayat', 'penjualan.detail_penjualan', 'service.detail', 'service.sparepart_luar'])
            ->select([
                'pelanggans.*',
            ])
            // Menghitung jumlah transaksi (total penjualan + total service 'success')
            ->selectRaw(
                '(
            (SELECT COUNT(*) FROM penjualans WHERE penjualans.pelanggan_id = pelanggans.id AND penjualans.deleted_at IS NULL) +
            (SELECT COUNT(*) FROM services WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL)
        ) as jumlah_transaksi'
            )
            // Menghitung nominal transaksi (total harga item penjualan + total harga item service 'success')
            ->selectRaw(
                '
        COALESCE((SELECT SUM((detail_penjualans.harga_item - detail_penjualans.diskon)*detail_penjualans.qty)
            FROM detail_penjualans
            JOIN penjualans ON detail_penjualans.penjualan_id = penjualans.id
            WHERE penjualans.pelanggan_id = pelanggans.id AND penjualans.deleted_at IS NULL AND detail_penjualans.deleted_at IS NULL), 0)
        +
        COALESCE((SELECT SUM(services.biaya)
            FROM services
            WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL), 0)
        +
        COALESCE((SELECT SUM(((detail_services.harga_item - detail_services.diskon)*detail_services.jumlah))
            FROM detail_services
            JOIN services ON detail_services.service_id = services.id
            WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL AND detail_services.deleted_at IS NULL), 0)
        +
        COALESCE((SELECT SUM(((sparepart_luars.harga_jual_SL - sparepart_luars.diskon_SL)*sparepart_luars.jumlah_SL))
            FROM sparepart_luars
            JOIN services ON sparepart_luars.service_id = services.id
            WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL), 0)
        as total_nominal'
            )
            ->groupBy('pelanggans.id');
   
        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);
                $pelanggans->tanggal($begin, $end);
            }
        }


        if (isset($request->kecamatan)) {
            $datas->kecamatan($request->kecamatan);
            $pelanggans->kecamatan($request->kecamatan);
        }

        if (isset($request->nama_pelanggan)) {

            $datas->cari($request->nama_pelanggan);
            $pelanggans->cari($request->nama_pelanggan);
        }


        $countAll = $pelanggans->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->orderBy("total_nominal", $sorting_order);
            } else if ($order == "waktu") {
                $datas->orderBy("created_at", $sorting_order);
            } else if ($order == "total") {
                // $datas->orderBy("riwayat_count", $sorting_order);
                $datas->orderBy("jumlah_transaksi", $sorting_order);
            }
        } else {
            $datas->orderBy("jumlah_transaksi", $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 (request()->periode) {
            $periode = explode(" - ", request()->periode);
            $begin = DateTime::createFromFormat('d/m/Y', $periode[0]);
            $end = DateTime::createFromFormat('d/m/Y', $periode[1]);
        }
        $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 = Pelanggan::with(['riwayat', 'penjualan.detail_penjualan', 'service.detail', 'service.sparepart_luar'])
            ->select([
                'pelanggans.*',
            ])
            // Menghitung jumlah transaksi (total penjualan + total service 'success')
            ->selectRaw(
                '(
            (SELECT COUNT(*) FROM penjualans WHERE penjualans.pelanggan_id = pelanggans.id) +
            (SELECT COUNT(*) FROM services WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL)
        ) as jumlah_transaksi'
            )
            // Menghitung nominal transaksi (total harga item penjualan + total harga item service 'success')
            ->selectRaw(
                '
        COALESCE((SELECT SUM((detail_penjualans.harga_item - detail_penjualans.diskon)*detail_penjualans.qty)
            FROM detail_penjualans
            JOIN penjualans ON detail_penjualans.penjualan_id = penjualans.id
            WHERE penjualans.pelanggan_id = pelanggans.id AND penjualans.deleted_at IS NULL AND detail_penjualans.deleted_at IS NULL), 0)
        +
        COALESCE((SELECT SUM(services.biaya)
            FROM services
            WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL), 0)
        +
        COALESCE((SELECT SUM(((detail_services.harga_item - detail_services.diskon)*detail_services.jumlah))
            FROM detail_services
            JOIN services ON detail_services.service_id = services.id
            WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL AND detail_services.deleted_at IS NULL), 0)
        +
        COALESCE((SELECT SUM(((sparepart_luars.harga_jual_SL - sparepart_luars.diskon_SL)*sparepart_luars.jumlah_SL))
            FROM sparepart_luars
            JOIN services ON sparepart_luars.service_id = services.id
            WHERE services.pelanggan_id = pelanggans.id AND services.status_transaksi = "success" AND services.deleted_at IS NULL), 0)
        as total_nominal'
            )
            ->groupBy('pelanggans.id');
   
        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);
        }

    

        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->orderBy("total_nominal", $sorting_order);
            } else if ($order == "waktu") {
                $datas->orderBy("created_at", $sorting_order);
            } else if ($order == "total") {
                // $datas->orderBy("riwayat_count", $sorting_order);
                $datas->orderBy("jumlah_transaksi", $sorting_order);
            }
        } else {
            $datas->orderBy("jumlah_transaksi", $sorting_order);
        }
        if (isset($request->nama_pelanggan)) {

            $datas = $datas->cari($request->nama_pelanggan);
        }

        $datas = $datas->get();
        $dataArray = [];
        foreach ($datas as $data) {
            $dataArray[] = [
                $data->nama_pelanggan,
                $data->telp_pelanggan,
                $data->alamat_pelanggan,
                $data->total_nominal,
                $data->jumlah_transaksi,
                $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::with(['riwayat', 'penjualan.detail_penjualan', 'service' => function ($q) {
            $q->where('status_transaksi', 'success')->with('detail','sparepart_luar');
        }])->findOrFail($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]