Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/demo.fixmate.id/app/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/www/demo.fixmate.id/app/Http/Controllers/LaporanController.php

<?php

namespace App\Http\Controllers;

use App\Exports\GudangExport;
use App\Exports\HutangExport;
use App\Exports\ServicesExport;
use App\Exports\ItemExport;
use App\Exports\KirimSuppliersExport;
use App\Exports\LaporanPelangganExport;
use App\Exports\PembelianExport;
use App\Exports\PenjualanExport;
use App\Exports\PiutangExport;
use App\Exports\ReturPembelianExport;
use App\Exports\ReturPenjualanExport;
use App\Exports\uangMukaExport;
use App\Models\DetailKirimSupplier;
use App\Models\DetailReturPembelian;
use App\Models\Item;
use App\Models\JenisItem;
use App\Models\KategoriItem;
use App\Models\Pelanggan;
use App\Models\Penjualan;
use App\Models\Pembelian;
use App\Models\Pengguna;
use App\Models\ReturPembelian;
use App\Models\ReturPenjualan;
use App\Models\Service;
use App\Models\Supplier;
use App\Models\Teknisi;
use App\Models\Toko;
use App\Models\TransaksiGudang;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;

use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Facades\Excel;

class LaporanController extends Controller
{
    public function index()
    {
        return response()->view("laporan.index");
    }

    public function penjualan(Request $request)
    {
        try {
            $penjualan = new Penjualan;



            $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]);
            }

            $start = $begin->format('Y-m-d');
            $finish = $end->format('Y-m-d');

            if ($start == $finish) {
                $datas = Penjualan::with('detail_penjualan.detail_pengembalians')
                    ->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')
                    ->whereDate("jam_selesai", $begin->format("Y-m-d"))
                    ->filterToko();
            } else {

                $datas = Penjualan::with('detail_penjualan.detail_pengembalians')
                    ->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')
                    ->whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])
                    ->filterToko();
            }


            if (isset($request->pengguna_id) && $request->pengguna_id != "") {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->cari)) {
                $datas = $datas->cari($request->cari);
            }

            $penjualan = $datas->get();
            $penjualan_cash = Penjualan::where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->where('metode_bayar', 'cash')->filterToko()->get();
            $penjualan_transfer = Penjualan::where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->where('metode_bayar', 'transfer')->filterToko()->get();
            $jumlah_penjualan = $datas->count();
            $pendapatan = 0;
            $pendapatan_cash = 0;
            $pendapatan_transfer = 0;
            $modal = 0;
            $jual = 0;
            $laba_rugi = 0;
            foreach ($penjualan as $penjualan) {
                $pendapatan += $penjualan->total;
                $modal += $penjualan->total_modal;
                $jual += $penjualan->total;
                $laba_rugi += $penjualan->total - $penjualan->total_modal;
            }
            foreach ($penjualan_cash as $penjualan_cash) {
                $pendapatan_cash += $penjualan_cash->total;
            }
            foreach ($penjualan_transfer as $penjualan_transfer) {
                $pendapatan_transfer += $penjualan_transfer->total;
            }


            $datas = $datas->paginate(10);
            $pengguna = Pengguna::all();
            $data = [
                "request" => $request,
                'datas' => $datas,
                'modal' => $modal,
                'jual' => $jual,
                'laba_rugi' => $laba_rugi,
                'pengguna' => $pengguna,
                'jumlah_penjualan' => $jumlah_penjualan,
                "pendapatan" => $pendapatan,
                "pendapatan_transfer" => $pendapatan_transfer,
                "pendapatan_cash" => $pendapatan_cash,
                "periode" => $periode
            ];
            return response()->view("laporan.penjualan.index", $data);
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }
    public function service(Request $request)
    {

        try {

            // dd( url()->current());
            // dd( '?'.http_build_query($request->query()));
            // this will default to a time of 00:00:00
            $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]);
            }

            $start = $begin->format('Y-m-d');
            $finish = $end->format('Y-m-d');

            if ($start == $finish) {
                $datas = Service::where('status_transaksi', 'success')
                    ->whereDate("jam_selesai", $begin->format("Y-m-d"))
                    ->filterToko();
            } else {
                $datas = Service::where('status_transaksi', 'success')->selesai($begin, $end)->where('status_pembayaran', 'lunas')->filterToko();
            }





            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }




            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->search)) {
                $datas = $datas->cari($request->search);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }
            if (isset($request->sales_out)) {
                $datas = $datas->where('sales_out', $request->sales_out);
            }
            if (isset($request->kasir_out)) {
                $datas = $datas->where('kasir_out', $request->kasir_out);
            }
            if (isset($request->jenis_id)) {

                $datas = $datas->jenis($request->jenis_id);
            }


            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal_selesai", "desc")->orderBy("jam_selesai", "desc");
            }

            $s_laba_rugi_jasa = 0;
            $s_modal_sparepart = 0;
            $s_jual_sparepart = 0;
            $s_laba_rugi_sparepart = 0;
            $s_laba_total = 0;
            $s_omset_total = 0;
            $omset_cash = 0;
            $omset_transfer = 0;
            foreach ($datas->get() as $s) {
                // if ($s->status_transaksi == 'success') {
                //     $s_omset_total += $s->grand_total;
                //     $s_laba_rugi_jasa += ($s->biaya + $s->total_jual_sparepart_luar) - $s->total_modal_sparepart_luar;
                //     $s_modal_sparepart += $s->total_modal_sparepart;
                //     $s_jual_sparepart += $s->total_jual_sparepart;
                //     $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
                //     $s_laba_total += ($s->total_jual_sparepart - $s->total_modal_sparepart) + $s->biaya;


                //     $has_cash = false;
                //     $has_transfer = false;

                //     foreach ($s->pembayaran_service as $pembayaran) {
                //         if ($pembayaran->metode_bayar == 'cash') {
                //             $has_cash = true;
                //         } elseif ($pembayaran->metode_bayar == 'transfer') {
                //             $has_transfer = true;
                //         }
                //     }

                //     // Allocate the grand_total to the corresponding payment methods
                //     if ($has_cash) {
                //         $omset_cash += $s->grand_total;
                //     }
                //     if ($has_transfer) {
                //         $omset_transfer += $s->grand_total;
                //     }
                // }

                $s_omset_total += $s->grand_total;
                $s_laba_rugi_jasa += ($s->biaya + $s->total_jual_sparepart_luar) - $s->total_modal_sparepart_luar;
                $s_modal_sparepart += $s->total_modal_sparepart;
                $s_jual_sparepart += $s->total_jual_sparepart;
                $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
                $s_laba_total += ($s->total_jual_sparepart - $s->total_modal_sparepart) + $s->biaya;


                $has_cash = false;
                $has_transfer = false;

                foreach ($s->pembayaran_service as $pembayaran) {
                    if ($pembayaran->metode_bayar == 'cash') {
                        $has_cash = true;
                    } elseif ($pembayaran->metode_bayar == 'transfer') {
                        $has_transfer = true;
                    }
                }

                // Allocate the grand_total to the corresponding payment methods
                if ($has_cash) {
                    $omset_cash += $s->grand_total;
                }
                if ($has_transfer) {
                    $omset_transfer += $s->grand_total;
                }
            }


            $total_transaksi = $datas->count();
            $services = $datas->get();
            $datas = $datas->paginate(10);

            $total_barang_terjual = 0;

            foreach ($services as $s) {
                foreach ($s->detail as $d) {

                    $total_barang_terjual += $d->jumlah;
                }
            }
            $pengguna = Pengguna::all();
            // $teknisi = Teknisi::all();
            $jenis = JenisItem::where('kategori_item_id', 4)->get();

            $data = [
                "request" => $request,
                "datas" => $datas,
                "jenis" => $jenis,
                // "teknisi" => $teknisi,
                "pengguna" => $pengguna,
                "total_transaksi" =>  $total_transaksi,
                "total_barang_terjual" => $total_barang_terjual,

                "sorting_order" => $sorting_order,
                "s_laba_rugi_jasa" =>  $s_laba_rugi_jasa,
                "s_modal_sparepart" => $s_modal_sparepart,
                "s_jual_sparepart" => $s_jual_sparepart,
                "s_laba_rugi_sparepart" =>  $s_laba_rugi_sparepart,
                "s_laba_total" =>  $s_laba_total,
                "s_omset_total" =>  $s_omset_total,
                "omset_cash" =>  $omset_cash,
                "omset_transfer" =>  $omset_transfer,

            ];

            return response()->view("laporan.service.index", $data);
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }

    public function serviceGaransi(Request $request)
    {

        try {

           
            $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]);
            }

            $start = $begin->format('Y-m-d');
            $finish = $end->format('Y-m-d');

            if ($start == $finish) {
                $datas = Service::where('garansi', 1)
                    ->whereDate("tanggal", $begin->format("Y-m-d"))
                    ->filterToko();
            } else {
                $datas = Service::where('garansi', 1)->tanggal($begin, $end)->filterToko();
            }

            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }




            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->search)) {
                $datas = $datas->cari($request->search);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }
            if (isset($request->sales_out)) {
                $datas = $datas->where('sales_out', $request->sales_out);
            }
            if (isset($request->kasir_out)) {
                $datas = $datas->where('kasir_out', $request->kasir_out);
            }
            if (isset($request->jenis_id)) {

                $datas = $datas->jenis($request->jenis_id);
            }


            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal_selesai", "desc")->orderBy("jam_selesai", "desc");
            }

            $s_laba_rugi_jasa = 0;
            $s_modal_sparepart = 0;
            $s_jual_sparepart = 0;
            $s_laba_rugi_sparepart = 0;
            $s_laba_total = 0;
            $s_omset_total = 0;
            $omset_cash = 0;
            $omset_transfer = 0;
            foreach ($datas->get() as $s) {
                // if ($s->status_transaksi == 'success') {
                //     $s_omset_total += $s->grand_total;
                //     $s_laba_rugi_jasa += ($s->biaya + $s->total_jual_sparepart_luar) - $s->total_modal_sparepart_luar;
                //     $s_modal_sparepart += $s->total_modal_sparepart;
                //     $s_jual_sparepart += $s->total_jual_sparepart;
                //     $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
                //     $s_laba_total += ($s->total_jual_sparepart - $s->total_modal_sparepart) + $s->biaya;


                //     $has_cash = false;
                //     $has_transfer = false;

                //     foreach ($s->pembayaran_service as $pembayaran) {
                //         if ($pembayaran->metode_bayar == 'cash') {
                //             $has_cash = true;
                //         } elseif ($pembayaran->metode_bayar == 'transfer') {
                //             $has_transfer = true;
                //         }
                //     }

                //     // Allocate the grand_total to the corresponding payment methods
                //     if ($has_cash) {
                //         $omset_cash += $s->grand_total;
                //     }
                //     if ($has_transfer) {
                //         $omset_transfer += $s->grand_total;
                //     }
                // }

                $s_omset_total += $s->grand_total;
                $s_laba_rugi_jasa += ($s->biaya + $s->total_jual_sparepart_luar) - $s->total_modal_sparepart_luar;
                $s_modal_sparepart += $s->total_modal_sparepart;
                $s_jual_sparepart += $s->total_jual_sparepart;
                $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
                $s_laba_total += ($s->total_jual_sparepart - $s->total_modal_sparepart) + $s->biaya;


                $has_cash = false;
                $has_transfer = false;

                foreach ($s->pembayaran_service as $pembayaran) {
                    if ($pembayaran->metode_bayar == 'cash') {
                        $has_cash = true;
                    } elseif ($pembayaran->metode_bayar == 'transfer') {
                        $has_transfer = true;
                    }
                }

                // Allocate the grand_total to the corresponding payment methods
                if ($has_cash) {
                    $omset_cash += $s->grand_total;
                }
                if ($has_transfer) {
                    $omset_transfer += $s->grand_total;
                }
            }


            $total_transaksi = $datas->count();
            $services = $datas->get();
            $datas = $datas->paginate(10);

            $total_barang_terjual = 0;

            foreach ($services as $s) {
                foreach ($s->detail as $d) {

                    $total_barang_terjual += $d->jumlah;
                }
            }
            $pengguna = Pengguna::all();
            // $teknisi = Teknisi::all();
            $jenis = JenisItem::where('kategori_item_id', 4)->get();

            $data = [
                "request" => $request,
                "datas" => $datas,
                "jenis" => $jenis,
                // "teknisi" => $teknisi,
                "pengguna" => $pengguna,
                "total_transaksi" =>  $total_transaksi,
                "total_barang_terjual" => $total_barang_terjual,

                "sorting_order" => $sorting_order,
                "s_laba_rugi_jasa" =>  $s_laba_rugi_jasa,
                "s_modal_sparepart" => $s_modal_sparepart,
                "s_jual_sparepart" => $s_jual_sparepart,
                "s_laba_rugi_sparepart" =>  $s_laba_rugi_sparepart,
                "s_laba_total" =>  $s_laba_total,
                "s_omset_total" =>  $s_omset_total,
                "omset_cash" =>  $omset_cash,
                "omset_transfer" =>  $omset_transfer,

            ];

            return response()->view("laporan.service-garansi.index", $data);
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }

    public function serviceRefund(Request $request)
    {

        try {

           
            $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]);
            }

            $start = $begin->format('Y-m-d');
            $finish = $end->format('Y-m-d');

            if ($start == $finish) {
                $datas = Service::where('status_pembayaran', 'refund')
                    ->whereDate("tanggal", $begin->format("Y-m-d"))
                    ->filterToko();
            } else {
                $datas = Service::where('status_pembayaran', 'refund')->tanggal($begin, $end)->filterToko();
            }

            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }




            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->search)) {
                $datas = $datas->cari($request->search);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }
            if (isset($request->sales_out)) {
                $datas = $datas->where('sales_out', $request->sales_out);
            }
            if (isset($request->kasir_out)) {
                $datas = $datas->where('kasir_out', $request->kasir_out);
            }
            if (isset($request->jenis_id)) {

                $datas = $datas->jenis($request->jenis_id);
            }


            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal_selesai", "desc")->orderBy("jam_selesai", "desc");
            }

            $s_laba_rugi_jasa = 0;
            $s_modal_sparepart = 0;
            $s_jual_sparepart = 0;
            $s_laba_rugi_sparepart = 0;
            $s_laba_total = 0;
            $s_omset_total = 0;
            $omset_cash = 0;
            $omset_transfer = 0;
            foreach ($datas->get() as $s) {
                // if ($s->status_transaksi == 'success') {
                //     $s_omset_total += $s->grand_total;
                //     $s_laba_rugi_jasa += ($s->biaya + $s->total_jual_sparepart_luar) - $s->total_modal_sparepart_luar;
                //     $s_modal_sparepart += $s->total_modal_sparepart;
                //     $s_jual_sparepart += $s->total_jual_sparepart;
                //     $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
                //     $s_laba_total += ($s->total_jual_sparepart - $s->total_modal_sparepart) + $s->biaya;


                //     $has_cash = false;
                //     $has_transfer = false;

                //     foreach ($s->pembayaran_service as $pembayaran) {
                //         if ($pembayaran->metode_bayar == 'cash') {
                //             $has_cash = true;
                //         } elseif ($pembayaran->metode_bayar == 'transfer') {
                //             $has_transfer = true;
                //         }
                //     }

                //     // Allocate the grand_total to the corresponding payment methods
                //     if ($has_cash) {
                //         $omset_cash += $s->grand_total;
                //     }
                //     if ($has_transfer) {
                //         $omset_transfer += $s->grand_total;
                //     }
                // }

                $s_omset_total += $s->grand_total;
                $s_laba_rugi_jasa += ($s->biaya + $s->total_jual_sparepart_luar) - $s->total_modal_sparepart_luar;
                $s_modal_sparepart += $s->total_modal_sparepart;
                $s_jual_sparepart += $s->total_jual_sparepart;
                $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
                $s_laba_total += ($s->total_jual_sparepart - $s->total_modal_sparepart) + $s->biaya;


                $has_cash = false;
                $has_transfer = false;

                foreach ($s->pembayaran_service as $pembayaran) {
                    if ($pembayaran->metode_bayar == 'cash') {
                        $has_cash = true;
                    } elseif ($pembayaran->metode_bayar == 'transfer') {
                        $has_transfer = true;
                    }
                }

                // Allocate the grand_total to the corresponding payment methods
                if ($has_cash) {
                    $omset_cash += $s->grand_total;
                }
                if ($has_transfer) {
                    $omset_transfer += $s->grand_total;
                }
            }


            $total_transaksi = $datas->count();
            $services = $datas->get();
            $datas = $datas->paginate(10);

            $total_barang_terjual = 0;

            foreach ($services as $s) {
                foreach ($s->detail as $d) {

                    $total_barang_terjual += $d->jumlah;
                }
            }
            $pengguna = Pengguna::all();
            // $teknisi = Teknisi::all();
            $jenis = JenisItem::where('kategori_item_id', 4)->get();

            $data = [
                "request" => $request,
                "datas" => $datas,
                "jenis" => $jenis,
                // "teknisi" => $teknisi,
                "pengguna" => $pengguna,
                "total_transaksi" =>  $total_transaksi,
                "total_barang_terjual" => $total_barang_terjual,

                "sorting_order" => $sorting_order,
                "s_laba_rugi_jasa" =>  $s_laba_rugi_jasa,
                "s_modal_sparepart" => $s_modal_sparepart,
                "s_jual_sparepart" => $s_jual_sparepart,
                "s_laba_rugi_sparepart" =>  $s_laba_rugi_sparepart,
                "s_laba_total" =>  $s_laba_total,
                "s_omset_total" =>  $s_omset_total,
                "omset_cash" =>  $omset_cash,
                "omset_transfer" =>  $omset_transfer,

            ];

            return response()->view("laporan.service-refund.index", $data);
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }

    public function pembelian(Request $request)
    {

        // this will default to a time of 00:00:00
        $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]);
        }


        $start = $begin->format('Y-m-d');
        $finish = $end->format('Y-m-d');

        if ($start == $finish) {
            $datas = Pembelian::with('detail_pembelian')->whereDate("created_at", $begin->format('Y-m-d'))->filterToko()->latest()->paginate(10);
        } else {
            $datas = Pembelian::with('detail_pembelian')->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->latest()->paginate(10);
        }


        $jumlahPembelian = Pembelian::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->count();
        $pembelian = Pembelian::with('detail_pembelian')->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->latest()->get();
        $totalPembelian = 0;
        $jumlahBarang = 0;
        foreach ($pembelian as $p) {
            $totalPembelian += $p->total;
            if (isset($p->detail_pembelian)) {
                foreach ($p->detail_pembelian as $dp) {
                    $jumlahBarang += $dp->qty;
                }
            }
        }

        $data = [
            'datas' => $datas,
            'jumlahPembelian' => $jumlahPembelian,
            'totalPembelian' => $totalPembelian,
            'jumlahBarang' => $jumlahBarang,
        ];
        return response()->view('laporan.pembelian.index', $data);
    }
    public function returPenjualan()
    {
        $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]);
        }



        $datas = ReturPenjualan::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->paginate(10);
        $returPenjualan = ReturPenjualan::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();
        $jumlahReturPenjualan = ReturPenjualan::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->count();
        $jumlahBarang = 0;
        foreach ($returPenjualan as $rp) {

            if (isset($rp->detail)) {
                foreach ($rp->detail as $detail) {
                    $jumlahBarang += $detail->qry;
                }
            }
        }

        $data = [
            'datas' => $datas,
            'jumlahReturPenjualan' => $jumlahReturPenjualan,
            'jumlahBarang' => $jumlahBarang,

        ];

        return response()->view("laporan.retur_penjualan.index", $data);
    }
    public function returPembelian()
    {
        $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]);
        }


        $datas = ReturPembelian::with('detail.item')->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->paginate(10);
        $returPembelian = ReturPembelian::with('detail.item')->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();
        $jumlahReturPembelian = ReturPembelian::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->count();
        $jumlahBarang = 0;
        $nominalBarang = 0;
        foreach ($returPembelian as $rp) {
            if (isset($rp->detail)) {
                foreach ($rp->detail as $detail) {
                    $jumlahBarang += $detail->qty;
                    $nominalBarang += $detail->item->biaya_item;
                }
            }
        }
        $data = [
            'datas' => $datas,
            'jumlahReturPembelian' => $jumlahReturPembelian,
            'jumlahBarang' => $jumlahBarang,
            'nominalBarang' => $nominalBarang,

        ];


        return response()->view("laporan.retur_pembelian.index", $data);
    }
    public function gudang(Request $request)
    {
        $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]);
        }


        $datas = TransaksiGudang::latest()->paginate(10);


        $data = [
            'datas' => $datas,
            'arah_transaksi' => $request->arah_transaksi
        ];
        if (isset($request->arah_transaksi)) {

            $data['datas'] = TransaksiGudang::cari($request->arah_transaksi)->latest()->paginate(15);
            return response()->view('laporan.gudang.index', $data);
        }
        if (isset($begin) && isset($end)) {
            $data['datas'] = TransaksiGudang::tanggal($begin, $end)->latest()->paginate(15);
            return response()->view('laporan.gudang.index', $data);
        }

        return response()->view('laporan.gudang.index', $data);
    }
    public function piutang()
    {
        $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]);
        }


        $datas = Penjualan::whereBetween("tanggal_penjualan", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->whereHas('pembayaran_piutang')->filterToko()->paginate(10);
        $piutang = Penjualan::whereBetween("tanggal_penjualan", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->whereHas('pembayaran_piutang')->filterToko()->get();

        // $returPembelians = ReturPembelian::where('ket_tambahan','Tukar Barang')->where('status_retur','!=','selesai')->get();
        //$totalReturPembelian = $returPembelians->sum('total');

        $detailReturPembelians = DetailKirimSupplier::with('detail_retur_pembelian.retur_pembelian','kirim_supplier.supplier')->whereNotNull('detail_retur_pembelian_id')
        ->whereHas('kirim_supplier',function($w){
            $w->where('status_kirim','!=','selesai');
        })
        ->whereHas('detail_retur_pembelian',function($w){
            $w->where('status_item','tukar-barang');
        })->get();

        // $detailReturPembelians = DetailReturPembelian::whereDoesntHave('detail_kirim_supplier')->orWhere(function($w){
        //     $w->whereHas('detail_kirim_supplier.kirim_supplier',function($w){
        //         $w->where('status_kirim','!=','selesai');
        //     })->where('status_item','tukar-barang');
        // })->get();
        // dd($detailReturPembelians);

        $totalReturPembelian = $detailReturPembelians->sum('total');


        $suppliers = Supplier::whereHas('kirim_supplier',function($w){
            $w->where('jenis_kompensasi','potong-nota');
        })->get();
        $saldoSuppliers = $suppliers->sum('saldo');

        $totalPiutang = $totalReturPembelian + $saldoSuppliers;
        $totalDibayarkan = 0;
        foreach ($piutang as $p) {
            $totalPiutang += $p->total;
            $totalDibayarkan += $p->total_pembayaran_piutang;
        }
        $data = [
            'datas' => $datas,
            'totalPiutang' => $totalPiutang,
            'totalDibayarkan' => $totalDibayarkan,
            'totalReturPembelian' => $totalReturPembelian,
            'saldoSuppliers' => $saldoSuppliers,
            // 'returPembelians' => $returPembelians,
            'detailReturPembelians'=>$detailReturPembelians,
            'suppliers' => $suppliers

        ];

        return response()->view('laporan.piutang.index', $data);
    }
    public function hutang()
    {
        $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]);
        }



        $datas = Pembelian::where('metode_bayar', "kredit")->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->paginate(10);
        $hutang = Pembelian::where('metode_bayar', "kredit")->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();
        $totalHutang = 0;
        $totalDibayarkan = 0;
        foreach ($hutang  as $h) {
            $totalHutang += $h->total;
            $totalDibayarkan += $h->total_pembayaran_hutang;
        }
        $data = [
            "datas" => $datas,
            "totalHutang" => $totalHutang,
            "totalDibayarkan" => $totalDibayarkan,
        ];


        return response()->view('laporan.hutang.index', $data);
    }


    public function items(Request $request)
    {
        $tokos = auth()->user()->role->tokos->load('stok_item_tokos');
        $kategori = KategoriItem::all();
        $datas = Item::with('kategoriItem', 'jenis_item', 'stok_item_tokos.toko', 'detail_retur_penjualan')->paginate(20);
        $data_modal = Item::get();
        if ($request->kategori) {
            $datas = Item::kategori($request->kategori)->paginate(20);
            $data_modal = Item::kategori($request->kategori)->get();
        }
        $stok_toko = 0;
        $stok_gudang = 0;
        $retur_barang = 0;
        $modal = 0;
        foreach ($data_modal as $data) {
            $stok_toko += $data->stok_item_tokos->sum('stok') ?? 0;
            $stok_gudang += $data->stok_gudang;
            $retur_barang += $data->total_retur_penjualan;

            $stok = $data->stok_item_tokos->sum('stok') + $data->stok_gudang;
            $modal += $data->biaya_item * $stok;
        }

        $data = [
            'datas' => $datas,
            'kategori' => $kategori,
            'stok_toko' => $stok_toko,
            'stok_gudang' => $stok_gudang,
            'retur_barang' => $retur_barang,
            'modal' => $modal,
            'item_kategori' => $request->kategori,
            'tokos' => $tokos
        ];

        return response()->view('laporan.item.index', $data);
    }

    public function pelanggan(Request $request)
    {

        // $datas = new Pelanggan;

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

        //     $datas = Pelanggan::cari($request->nama_pelanggan);
        // }
        // if (isset($request->kecamatan_pelanggan)) {

        //     $datas = Pelanggan::kecamatan($request->kecamatan_pelanggan);
        // }
        // // if (isset($begin) && isset($end)) {
        // //     $datas = Pelanggan::tanggal($begin, $end)->paginate(15);
        // //     return response()->view("pelanggan.index", compact("request", "datas"));
        // // }
        // $datas = $datas->paginate(15);


        $sorting_order = $request->sorting_order ?? "DESC";
        $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);
        }


        $jumlahPelanggan = $pelanggans->count();
        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);
        }


        $data = [
            "datas" => $datas->paginate(15),
            "jumlahPelanggan" => $jumlahPelanggan,
            "request" => $request,
        ];

        return response()->view('laporan.pelanggan.index', $data);
    }
    public function uangMuka(Request $request)
    {
        try {
            $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]);
            }

            $start = $begin->format('Y-m-d');
            $finish = $end->format('Y-m-d');

            if ($start == $finish) {
                $datas = Service::with('pelanggan', 'pengguna', 'detail', 'teknisi')->where('status_pembayaran', '!=', 'lunas')->where('status_transaksi', '!=', 'cancel')->where('uang_bayar', '>', 0)->filterToko()->whereDate('tanggal', $begin);
            } else {
                $datas = Service::with('pelanggan', 'pengguna', 'detail', 'teknisi')->where('status_pembayaran', '!=', 'lunas')->where('status_transaksi', '!=', 'cancel')->where('uang_bayar', '>', 0)->filterToko()->tanggal($begin, $end);
            }


            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }

            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->search)) {
                $datas = $datas->cari($request->search);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }

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

                $datas = $datas->jenis($request->jenis_id);
            }


            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal", "desc");
            }

            $s_total_uang_muka = 0;
            $s_total_uang_muka_transfer = 0;
            $s_total_uang_muka_cash = 0;

            foreach ($datas->get() as $s) {

                $s_total_uang_muka += $s->uang_bayar;
                if ($s->metode_bayar == 'transfer') {
                    $s_total_uang_muka_transfer += $s->uang_bayar;
                }
                if ($s->metode_bayar == 'cash') {
                    $s_total_uang_muka_cash += $s->uang_bayar;
                }
            }


            $services = $datas->get();
            $total_transaksi = $services->count();
            $datas = $datas->paginate(10);


            $pengguna = Pengguna::all();
            $teknisi = Teknisi::all();
            $jenis = JenisItem::where('kategori_item_id', 4)->get();

            $data = [
                "request" => $request,
                "s_total_uang_muka" => $s_total_uang_muka,
                "s_total_uang_muka_transfer" => $s_total_uang_muka_transfer,
                "s_total_uang_muka_cash" => $s_total_uang_muka_cash,
                "datas" => $datas,
                "jenis" => $jenis,
                "teknisi" => $teknisi,
                "pengguna" => $pengguna,
                "periode" => $periode,
                "sorting_order" => $sorting_order,
                'total_transaksi' => $total_transaksi

            ];

            return response()->view("laporan.uang_muka.index", $data);
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan.service');
        }
    }



    public function kirimSupplier(Request $request){
        $datas = DetailKirimSupplier::with('kirim_supplier','item');


        $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]);
        }

        $start = $begin->format('Y-m-d');
        $finish = $end->format('Y-m-d');

        if ($start == $finish) {
            $datas = $datas->whereHas('kirim_supplier',function($w)use($begin){
                $w->whereDate('tanggal_kirim', $begin);
            });
        } else {
            $datas = $datas->whereHas('kirim_supplier',function($w)use($begin,$end){
                $w->tanggal($begin, $end);
            });
        }

        $sumDatas = $datas->get();
        $totalHargaAwal = $sumDatas->sum(function($d){
            return $d->item->biaya_item;
        });
        $totalHargaSupplier = $sumDatas->sum('biaya_item');

        $datas = $datas->orderBy('kirim_supplier_id','DESC')->paginate(10);

        return response()->view("laporan.kirim-supplier.index", compact('datas','periode','totalHargaAwal','totalHargaSupplier'));

    }





    // Cetak

    public function itemsPrint(Request $request)
    {
        try {
            $kategori = KategoriItem::all();
            $datas = Item::with('kategoriItem', 'jenis_item', 'stok_item_tokos.toko')->get();
            if ($request->kategori) {
                $datas = Item::with('kategoriItem', 'jenis_item', 'stok_item_tokos.toko','detail_retur_penjualan')->kategori($request->kategori)->get();
            }
            $stok_toko = 0;
            $stok_gudang = 0;
            $retur_barang = 0;
            $modal = 0;
            foreach ($datas as $data) {
                $stok_toko += $data->stok_item_tokos->sum('stok');
                $stok_gudang += $data->stok_gudang;
                $retur_barang += $data->total_retur_penjualan;

                $stok = $data->stok_item_tokos->sum('stok') + $data->stok_gudang;
                $modal += $data->biaya_item * $stok;
            }
            $export = [];
            foreach ($datas as $item) {
                $export[] = [
                    $item->nama_item,
                    $item->kategoriItem->nama_kategori,
                    $item->harga_item,
                    $item->biaya_item,
                    $item->stok_item_tokos->sum('stok') ?? 0,
                    // $item->stok_gudang,
                    $item->total_retur_penjualan
                ];
            }
            if ($request->excel == 1) {

                return Excel::download(new ItemExport($export), 'Laporan Data-Barang.xlsx');
            } else {

                $data = [
                    'datas' => $datas,
                    'kategori' => $kategori,
                    'stok_toko' => $stok_toko,
                    'stok_gudang' => $stok_gudang,
                    'retur_barang' => $retur_barang,
                    'modal' => $modal,
                ];
                return response()->view("laporan.item.cetak", $data);
            }
        } catch (\Throwable $th) {
            return redirect()->route('laporan.item.index');
        }
    }

    public function servicePrint(Request $request)
    {
        try {

            // dd( url()->current());
            // dd( '?'.http_build_query($request->query()));
            // this will default to a time of 00:00:00
            $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]);
            }

            $datas = Service::with('detail', 'pengguna', 'pelanggan', 'teknisi', 'sales', 'sparepart_luar')->where('status_pembayaran', 'lunas')->where('status_transaksi', 'success')->filterToko();

            if (isset($begin) && isset($end)) {
                $datas = $datas->selesai($begin, $end);
            }

            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }




            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->nama_pelanggan)) {
                $datas = $datas->cari($request->nama_pelanggan);
            }
            if (isset($request->jenis_id)) {
                $datas = $datas->jenis($request->jenis_id);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sales_out)) {
                $datas = $datas->where('sales_out', $request->sales_out);
            }
            if (isset($request->kasir_out)) {
                $datas = $datas->where('kasir_out', $request->kasir_out);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }
            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal_selesai", "desc");
            }

            $servis = $datas->get();
            $s_dp = 0;
            $s_laba_rugi_jasa = 0;
            $s_modal_sparepart = 0;
            $s_jual_sparepart = 0;
            $s_laba_rugi_sparepart = 0;

            foreach ($servis as $s) {

                $s_dp += $s->uang_bayar;
                $s_laba_rugi_jasa += $s->biaya;
                $s_modal_sparepart += $s->total_modal_sparepart;
                $s_jual_sparepart += $s->total_jual_sparepart;
                $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
            }

            $datas = $datas->get();
            $export = [];
            $metode_bayar = '';
            $akhir_garansi = '';
            $sparepart = '';
            $sparepart = '';
            $jenis_spareparts = '';
            foreach ($datas as $data) {
                $pembayaran_service = $data->pembayaran_service->first();
                if (isset($pembayaran_service)) {
                    $metode_bayar = $pembayaran_service->metode_bayar;
                    $akhir_garansi = $pembayaran_service->akhir_garansi;
                }
                $sparepart = '';
                $jenis_spareparts = '';
                if (isset($data->detail)) {
                    foreach ($data->detail as $d) {
                        $sparepart .= $d->nama_item . ", ";
                        if (isset($d->sparepart->jenis_item)) {
                            $jenis_spareparts .= $d->sparepart->jenis_item->nama_jenis . ',';
                        }
                    }
                }
                $sparepart_luar = '';
                $jenis_sparepart_luar = '';
                if ($data->sparepart_luar->count() > 0) {
                    foreach ($data->sparepart_luar as $sl) {
                        $sparepart_luar .= $sl->nama_SL;
                    }
                    $jenis_sparepart_luar = 'Sparepart Luar';
                }


                $garansi = '';
                $refund = '';
                $set_refund = 0;
                if ($data->garansi == 1) {
                    $garansi = "(Garansi)";
                }
                if ($data->status_pembayaran == 'refund') {
                    $refund = "(Refund)";
                    $set_refund = 1;
                }

                $total = $data->total_jual_sparepart_dalam - $data->total_modal_sparepart + $data->biaya + $data->total_jual_sparepart_luar - $data->total_modal_sparepart_luar;
                if ($set_refund == 1) {
                    $total = -$total;
                }
                $export[] = [
                    $data->no_service . $garansi . $refund,
                    $data->tanggal,
                    $data->tanggal_selesai,
                    $data->pelanggan->nama_pelanggan,
                    $data->merk . "(" . $data->tipe . ")",
                    $data->deskripsi,
                    $sparepart . $sparepart_luar,
                    $jenis_spareparts . $jenis_sparepart_luar,
                    $data->teknisi->nama_pengguna,
                    $data->pengguna->nama_pengguna,
                    $data->sales->nama_pengguna,
                    $data->kasir_out,
                    $data->sales_out,
                    $data->uang_bayar,
                    $data->metode_bayar,
                    $data->grand_total,
                    $metode_bayar,
                    $data->biaya,
                    $data->total_jual_sparepart_luar,
                    $data->total_modal_sparepart_luar,
                    $data->total_jual_sparepart_dalam,
                    $data->total_modal_sparepart,
                    $total




                ];
            }
            if ($request->excel == 1) {

                return Excel::download(new ServicesExport($export), 'Laporan Service Periode ' . $begin->format("Y-m-d") . " - " . $end->format("Y-m-d") . '.xlsx');
            } else {

                $data = [
                    "request" => $request,
                    "datas" => $datas,
                    "s_dp" => $s_dp,

                    "s_laba_rugi_jasa" =>  $s_laba_rugi_jasa,
                    "s_modal_sparepart" => $s_modal_sparepart,
                    "s_jual_sparepart" => $s_jual_sparepart,
                    "s_laba_rugi_sparepart" =>  $s_laba_rugi_sparepart,
                    "sorting_order" => $sorting_order,
                ];
                // $pdf = Pdf::loadView('laporan.service.cetak', $data);
                // return $pdf->download('Laporan Service.pdf');
                return response()->view("laporan.service.cetak", $data);
            }
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }

    public function serviceGaransiPrint(Request $request)
    {
        try {

            
            $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]);
            }

            $datas = Service::with('detail', 'pengguna', 'pelanggan', 'teknisi', 'sales', 'sparepart_luar')->where('garansi', 1)->filterToko();

            if (isset($begin) && isset($end)) {
                $datas = $datas->tanggal($begin, $end);
            }

            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }




            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->nama_pelanggan)) {
                $datas = $datas->cari($request->nama_pelanggan);
            }
            if (isset($request->jenis_id)) {
                $datas = $datas->jenis($request->jenis_id);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sales_out)) {
                $datas = $datas->where('sales_out', $request->sales_out);
            }
            if (isset($request->kasir_out)) {
                $datas = $datas->where('kasir_out', $request->kasir_out);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }
            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal_selesai", "desc");
            }

            $servis = $datas->get();
            $s_dp = 0;
            $s_laba_rugi_jasa = 0;
            $s_modal_sparepart = 0;
            $s_jual_sparepart = 0;
            $s_laba_rugi_sparepart = 0;

            foreach ($servis as $s) {

                $s_dp += $s->uang_bayar;
                $s_laba_rugi_jasa += $s->biaya;
                $s_modal_sparepart += $s->total_modal_sparepart;
                $s_jual_sparepart += $s->total_jual_sparepart;
                $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
            }

            $datas = $datas->get();
            $export = [];
            $metode_bayar = '';
            $akhir_garansi = '';
            $sparepart = '';
            $sparepart = '';
            $jenis_spareparts = '';
            foreach ($datas as $data) {
                $pembayaran_service = $data->pembayaran_service->first();
                if (isset($pembayaran_service)) {
                    $metode_bayar = $pembayaran_service->metode_bayar;
                    $akhir_garansi = $pembayaran_service->akhir_garansi;
                }
                $sparepart = '';
                $jenis_spareparts = '';
                if (isset($data->detail)) {
                    foreach ($data->detail as $d) {
                        $sparepart .= $d->nama_item . ", ";
                        if (isset($d->sparepart->jenis_item)) {
                            $jenis_spareparts .= $d->sparepart->jenis_item->nama_jenis . ',';
                        }
                    }
                }
                $sparepart_luar = '';
                $jenis_sparepart_luar = '';
                if ($data->sparepart_luar->count() > 0) {
                    foreach ($data->sparepart_luar as $sl) {
                        $sparepart_luar .= $sl->nama_SL;
                    }
                    $jenis_sparepart_luar = 'Sparepart Luar';
                }


                $garansi = '';
                $refund = '';
                $set_refund = 0;
                if ($data->garansi == 1) {
                    $garansi = "(Garansi)";
                }
                if ($data->status_pembayaran == 'refund') {
                    $refund = "(Refund)";
                    $set_refund = 1;
                }

                $total = $data->total_jual_sparepart_dalam - $data->total_modal_sparepart + $data->biaya + $data->total_jual_sparepart_luar - $data->total_modal_sparepart_luar;
                if ($set_refund == 1) {
                    $total = -$total;
                }
                $export[] = [
                    $data->no_service . $garansi . $refund,
                    $data->tanggal,
                    $data->tanggal_selesai,
                    $data->pelanggan->nama_pelanggan,
                    $data->merk . "(" . $data->tipe . ")",
                    $data->deskripsi,
                    $sparepart . $sparepart_luar,
                    $jenis_spareparts . $jenis_sparepart_luar,
                    $data->teknisi->nama_pengguna,
                    $data->pengguna->nama_pengguna,
                    $data->sales->nama_pengguna,
                    $data->kasir_out,
                    $data->sales_out,
                    $data->uang_bayar,
                    $data->metode_bayar,
                    $data->grand_total,
                    $metode_bayar,
                    $data->biaya,
                    $data->total_jual_sparepart_luar,
                    $data->total_modal_sparepart_luar,
                    $data->total_jual_sparepart_dalam,
                    $data->total_modal_sparepart,
                    $total




                ];
            }
            if ($request->excel == 1) {

                return Excel::download(new ServicesExport($export), 'Laporan Service Garansi Periode ' . $begin->format("Y-m-d") . " - " . $end->format("Y-m-d") . '.xlsx');
            } else {

                $data = [
                    "request" => $request,
                    "datas" => $datas,
                    "s_dp" => $s_dp,

                    "s_laba_rugi_jasa" =>  $s_laba_rugi_jasa,
                    "s_modal_sparepart" => $s_modal_sparepart,
                    "s_jual_sparepart" => $s_jual_sparepart,
                    "s_laba_rugi_sparepart" =>  $s_laba_rugi_sparepart,
                    "sorting_order" => $sorting_order,
                ];
                // $pdf = Pdf::loadView('laporan.service.cetak', $data);
                // return $pdf->download('Laporan Service.pdf');
                return response()->view("laporan.service-garansi.cetak", $data);
            }
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }

    public function serviceRefundPrint(Request $request)
    {
        try {

            
            $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]);
            }

            $datas = Service::with('detail', 'pengguna', 'pelanggan', 'teknisi', 'sales', 'sparepart_luar')->where('status_pembayaran', 'refund')->filterToko();

            if (isset($begin) && isset($end)) {
                $datas = $datas->tanggal($begin, $end);
            }

            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }




            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->nama_pelanggan)) {
                $datas = $datas->cari($request->nama_pelanggan);
            }
            if (isset($request->jenis_id)) {
                $datas = $datas->jenis($request->jenis_id);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sales_out)) {
                $datas = $datas->where('sales_out', $request->sales_out);
            }
            if (isset($request->kasir_out)) {
                $datas = $datas->where('kasir_out', $request->kasir_out);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }
            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal_selesai", "desc");
            }

            $servis = $datas->get();
            $s_dp = 0;
            $s_laba_rugi_jasa = 0;
            $s_modal_sparepart = 0;
            $s_jual_sparepart = 0;
            $s_laba_rugi_sparepart = 0;

            foreach ($servis as $s) {

                $s_dp += $s->uang_bayar;
                $s_laba_rugi_jasa += $s->biaya;
                $s_modal_sparepart += $s->total_modal_sparepart;
                $s_jual_sparepart += $s->total_jual_sparepart;
                $s_laba_rugi_sparepart += $s->total_jual_sparepart - $s->total_modal_sparepart;
            }

            $datas = $datas->get();
            $export = [];
            $metode_bayar = '';
            $akhir_garansi = '';
            $sparepart = '';
            $sparepart = '';
            $jenis_spareparts = '';
            foreach ($datas as $data) {
                $pembayaran_service = $data->pembayaran_service->first();
                if (isset($pembayaran_service)) {
                    $metode_bayar = $pembayaran_service->metode_bayar;
                    $akhir_garansi = $pembayaran_service->akhir_garansi;
                }
                $sparepart = '';
                $jenis_spareparts = '';
                if (isset($data->detail)) {
                    foreach ($data->detail as $d) {
                        $sparepart .= $d->nama_item . ", ";
                        if (isset($d->sparepart->jenis_item)) {
                            $jenis_spareparts .= $d->sparepart->jenis_item->nama_jenis . ',';
                        }
                    }
                }
                $sparepart_luar = '';
                $jenis_sparepart_luar = '';
                if ($data->sparepart_luar->count() > 0) {
                    foreach ($data->sparepart_luar as $sl) {
                        $sparepart_luar .= $sl->nama_SL;
                    }
                    $jenis_sparepart_luar = 'Sparepart Luar';
                }


                $garansi = '';
                $refund = '';
                $set_refund = 0;
                if ($data->garansi == 1) {
                    $garansi = "(Garansi)";
                }
                if ($data->status_pembayaran == 'refund') {
                    $refund = "(Refund)";
                    $set_refund = 1;
                }

                $total = $data->total_jual_sparepart_dalam - $data->total_modal_sparepart + $data->biaya + $data->total_jual_sparepart_luar - $data->total_modal_sparepart_luar;
                if ($set_refund == 1) {
                    $total = -$total;
                }
                $export[] = [
                    $data->no_service . $garansi . $refund,
                    $data->tanggal,
                    $data->tanggal_selesai,
                    $data->pelanggan->nama_pelanggan,
                    $data->merk . "(" . $data->tipe . ")",
                    $data->deskripsi,
                    $sparepart . $sparepart_luar,
                    $jenis_spareparts . $jenis_sparepart_luar,
                    $data->teknisi->nama_pengguna,
                    $data->pengguna->nama_pengguna,
                    $data->sales->nama_pengguna,
                    $data->kasir_out,
                    $data->sales_out,
                    $data->uang_bayar,
                    $data->metode_bayar,
                    $data->grand_total,
                    $metode_bayar,
                    $data->biaya,
                    $data->total_jual_sparepart_luar,
                    $data->total_modal_sparepart_luar,
                    $data->total_jual_sparepart_dalam,
                    $data->total_modal_sparepart,
                    $total




                ];
            }
            if ($request->excel == 1) {

                return Excel::download(new ServicesExport($export), 'Laporan Service Refund Periode ' . $begin->format("Y-m-d") . " - " . $end->format("Y-m-d") . '.xlsx');
            } else {

                $data = [
                    "request" => $request,
                    "datas" => $datas,
                    "s_dp" => $s_dp,

                    "s_laba_rugi_jasa" =>  $s_laba_rugi_jasa,
                    "s_modal_sparepart" => $s_modal_sparepart,
                    "s_jual_sparepart" => $s_jual_sparepart,
                    "s_laba_rugi_sparepart" =>  $s_laba_rugi_sparepart,
                    "sorting_order" => $sorting_order,
                ];
                // $pdf = Pdf::loadView('laporan.service.cetak', $data);
                // return $pdf->download('Laporan Service.pdf');
                return response()->view("laporan.service-refund.cetak", $data);
            }
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }
    public function penjualanPrint(Request $request)
    {
        $penjualan = new Penjualan;


        // $data =



        $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]);
        }


        $datas = Penjualan::where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko();

        if (isset($request->pengguna_id) && $request->pengguna_id != "") {
            $datas = $datas->where('pengguna_id', $request->pengguna_id);
        }
        if (isset($request->cari)) {
            $datas = $datas->cari($request->cari);
        }
        $penjualan = $datas->get();
        $pendapatan = 0;
        $modal = 0;
        $jual = 0;
        $laba_rugi = 0;
        foreach ($penjualan as $penjualan) {
            $pendapatan += $penjualan->total;
            $modal += $penjualan->total_modal;
            $jual += $penjualan->total;
            $laba_rugi += $penjualan->total - $penjualan->total_modal;
        }

        $datas = $datas->get();

        $export = [];
        $detail = "";
        $akhir_garansi = "";
        foreach ($datas as $data) {
            $detail = "";
            $akhir_garansi = "";
            foreach ($data->detail_penjualan as $d) {
                $detail .= $d->nama_item . ',';
                $akhir_garansi .= $d->akhir_garansi . ',';
            }
            $export[] = [
                $data->nomor_nota,
                $data->tanggal_penjualan,
                $data->pelanggan->nama_pelanggan,
                $detail,
                $data->metode_bayar,
                $data->status_pembayaran,

                optional($data->sales)->nama_pengguna,
                $data->pengguna->nama_pengguna,
                $data->total_modal,
                $data->total,
                $data->total - $data->total_modal,
                $data->uang_bayar,

            ];
        }
        if ($request->excel == 1) {

            return Excel::download(new PenjualanExport($export), 'Laporan Penjualan ' . $begin->format("Y-m-d") . " - " . $end->format("Y-m-d") . '.xlsx');
        } else {
            $data = [
                'datas' => $datas,
                "pendapatan" => $pendapatan,
                "modal" => $modal,
                "jual" => $jual,
                "laba_rugi" => $laba_rugi,
            ];
            // $pdf = Pdf::loadView('laporan.penjualan.cetak', $data);
            // return $pdf->download('Laporan Penjualan.pdf');
            return response()->view("laporan.penjualan.cetak", $data);
        }
    }

    public function pembelianPrint(Request $request)
    {
        // this will default to a time of 00:00:00
        $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]);
        }


        $datas = Pembelian::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();

        $export = [];
        $detail_item = '';
        foreach ($datas as $data) {
            $detail_item = '';

            foreach ($data->detail_pembelian as $detail) {
                if (isset($detail->item)) {
                    $detail_item .= $detail->item->nama_item . ',';
                }
            }
            $export[] = [
                $data->tanggal_pembelian,
                $data->supplier->nama_supplier . '(' . $data->supplier->telp_supplier . ')',
                $detail_item,
                $data->total

            ];
        }
        if ($request->excel == 1) {

            return Excel::download(new PembelianExport($export), 'Laporan Pembelian.xlsx');
        } else {

            $data = [
                'datas' => $datas,

            ];
            return response()->view("laporan.pembelian.cetak", $data);
        }
    }
    public function gudangPrint(Request $request)
    {
        $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]);
        }



        $datas = TransaksiGudang::filterToko()->latest()->get();
        if (isset($request->arah_transaksi)) {

            $datas = TransaksiGudang::cari($request->arah_transaksi)->filterToko()->latest()->get();
        }
        if (isset($begin) && isset($end)) {
            $datas = TransaksiGudang::tanggal($begin, $end)->filterToko()->latest()->get();
        }


        $export = [];
        foreach ($datas as $data) {
            $export[] = [
                $data->no_transaksi,
                $data->tanggal,
                $data->arah_transaksi,
                $data->keterangan,
            ];
        }
        if ($request->excel == 1) {

            return Excel::download(new GudangExport($export), 'Laporan Transaksi Gudang.xlsx');
        } else {

            $data = [
                'datas' => $datas,
                'arah_transaksi' => $request->arah_transaksi
            ];


            return response()->view('laporan.gudang.cetak', $data);
        }
    }
    public function hutangPrint(Request $request)
    {
        $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]);
        }



        $datas = Pembelian::where('metode_bayar', "kredit")->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();

        $export = [];
        $lunas = '';
        foreach ($datas as $data) {
            if (!$data->status_lunas) {
                $lunas = 'Belum Lunas';
            } else {
                $lunas = 'Lunas';
            }
            $export[] = [
                $data->nomor_nota,
                $data->supplier->nama_supplier,
                $data->total,
                $data->total_pembayaran_hutang,
                $lunas,
            ];
        }
        if ($request->excel == 1) {

            return Excel::download(new HutangExport($export), 'Laporan Hutang.xlsx');
        } else {
            $data = [
                "datas" => $datas,

            ];


            return response()->view('laporan.hutang.cetak', $data);
        }
    }
    public function returPenjualanPrint(Request $request)
    {
        $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]);
        }


        $datas = ReturPenjualan::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();


        $export = [];
        $detail_item = '';
        foreach ($datas as $data) {
            $detail_item = '';
            foreach ($data->detail as $detail) {
                $detail_item .= $detail->nama_item . ',';
            }
            $export[] = [

                $data->created_at->format('d-m-Y'),
                $data->no_penjualan,
                $detail_item,
                $data->pelanggan->nama_pelanggan,
                $data->keterangan,
            ];
        }
        if ($request->excel == 1) {
            return Excel::download(new ReturPenjualanExport($export), 'Laporan Retur Penjualan.xlsx');
        } else {
            $data = [
                'datas' => $datas,

            ];

            return response()->view("laporan.retur_penjualan.cetak", $data);
        }
    }
    public function returPembelianPrint(Request $request)
    {
        $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]);
        }



        $datas = ReturPembelian::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko()->get();

        $export = [];
        $detail_item = '';
        foreach ($datas as $data) {
            $detail_item = '';
            foreach ($data->detail as $detail) {
                $detail_item .= $detail->nama_item . ',';
            }
            $export[] = [

                $data->created_at->format('d-m-Y'),
                $data->no_pembelian,
                $data->supplier->nama_supplier,
                $detail_item,
                $data->keterangan,
                $data->ket_tambahan,
            ];
        }
        if ($request->excel == 1) {

            return Excel::download(new ReturPembelianExport($export), 'Laporan Retur Pembelian.xlsx');
        } else {

            $data = [
                'datas' => $datas,

            ];


            return response()->view("laporan.retur_pembelian.cetak", $data);
        }
    }
    public function piutangPrint(Request $request)
    {
        $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]);
        }

        $datas = Penjualan::whereBetween("tanggal_penjualan", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->whereHas('pembayaran_piutang')->filterToko()->get();

        $export = [];
        $lunas = '';
        foreach ($datas as $data) {
            if (!$data->status_lunas) {
                $lunas = 'Belum Lunas';
            } else {
                $lunas = 'Lunas';
            }
            $export[] = [
                $data->nomor_nota,
                $data->pelanggan->nama_pelanggan,
                $data->total,
                $data->total_pembayaran_piutang,
                $lunas,
            ];
        }
        if ($request->excel == 1) {

            return Excel::download(new PiutangExport($export), 'Laporan Piutang.xlsx');
        } else {

            $data = [
                'datas' => $datas,

            ];

            return response()->view('laporan.piutang.cetak', $data);
        }
    }
    public function pelangganPrint(Request $request)
    {
        // $datas = new Pelanggan;

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

        //     $datas = Pelanggan::cari($request->nama_pelanggan);
        // }
        // if (isset($request->kecamatan_pelanggan)) {

        //     $datas = Pelanggan::kecamatan($request->kecamatan_pelanggan);
        // }
        // // if (isset($begin) && isset($end)) {
        // //     $datas = Pelanggan::tanggal($begin, $end)->paginate(15);
        // //     return response()->view("pelanggan.index", compact("request", "datas"));
        // // }

        $sorting_order = $request->sorting_order ?? "DESC";

        $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);
            }
        }


        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();
        $export = [];
        foreach ($datas  as $data) {

            $export[] = [

                $data->nama_pelanggan,
                $data->telp_pelanggan,
                $data->alamat_pelanggan,
                $data->kecamatan_pelanggan,
                $data->total_nominal,
            ];
        }

        if ($request->excel == 1) {

            return Excel::download(new LaporanPelangganExport($export), 'Laporan Pengguna.xlsx');
        } else {

            $data = [
                "datas" => $datas,
                "request" => $request,
            ];

            return response()->view('laporan.pelanggan.cetak', $data);
        }
    }
    public function uangMukaPrint(Request $request)
    {
        try {
            $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]);
            }

            $datas = Service::where('status_transaksi', 'proses')->where('uang_bayar', '>', 0)->filterToko();


            if (!isset($request->sorting_order)) {
                $sorting_order = "asc";
            }
            if (isset($request->sorting_order)) {
                if ($request->sorting_order == "desc") {
                    $sorting_order = "asc";
                } else if ($request->sorting_order == "asc") {
                    $sorting_order = "desc";
                }
            }


            if (isset($begin) && isset($end)) {
                $datas = $datas->tanggal($begin, $end);
            }

            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

            if (isset($request->nama_pelanggan)) {
                $datas = $datas->cari($request->nama_pelanggan);
            }
            if (isset($request->pengguna_id)) {
                $datas = $datas->where('pengguna_id', $request->pengguna_id);
            }
            if (isset($request->teknisi_id)) {
                $datas = $datas->where('teknisi_id', $request->teknisi_id);
            }
            if (isset($request->sale_id)) {
                $datas = $datas->where('sale_id', $request->sale_id);
            }

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

                $datas = $datas->jenis($request->jenis_id);
            }


            if (isset($request->order)) {
                $order = $request->order;
                if ($request->order == "nama_pelanggan") {
                    $datas = $datas->orderBy(
                        Pelanggan::select("nama_pelanggan")
                            ->whereColumn('pelanggans.id', 'services.pelanggan_id'),
                        $sorting_order
                    );
                } else {
                    //$datas = $datas->orderBy($request->order, $sorting_order);
                }
            } else {

                $datas = $datas->orderBy("tanggal", "desc");
            }




            $datas = $datas->get();



            $pengguna = Pengguna::all();
            $teknisi = Teknisi::all();
            $jenis = JenisItem::where('kategori_item_id', 4)->get();

            $data = [
                "request" => $request,
                "datas" => $datas,
                "jenis" => $jenis,
                "teknisi" => $teknisi,
                "pengguna" => $pengguna,

                "sorting_order" => $sorting_order,

            ];
            foreach ($datas as $data) {
                $export[] = [
                    $data->no_service,
                    $data->tanggal,
                    $data->pelanggan->nama_pelanggan,
                    $data->merk . "(" . $data->tipe . ")",
                    $data->deskripsi,
                    $data->status,
                    $data->teknisi->nama_pengguna,
                    $data->pengguna->nama_pengguna,
                    $data->sales->nama_pengguna,
                    $data->uang_bayar,
                    $data->metode_bayar,
                    $data->grand_total,

                ];
            }



            if ($request->excel == 1) {

                return Excel::download(new uangMukaExport($export), 'Laporan Uang Muka Service ' . $begin->format("Y-m-d") . " - " . $end->format("Y-m-d") . '.xlsx');
            } else {

                $data = [
                    "request" => $request,
                    "datas" => $datas,


                    "sorting_order" => $sorting_order,
                ];
                // $pdf = Pdf::loadView('laporan.service.cetak', $data);
                // return $pdf->download('Laporan Service.pdf');
                return response()->view("laporan.uang_muka.cetak", $data);
            }
        } catch (\Throwable $th) {
            Log::error($th);
            return redirect()->route('laporan')->with('error', 'Error, tidak bisa menampilkan laporan');
        }
    }

    public function kirimSupplierPrint(Request $request){
        $datas = DetailKirimSupplier::with('kirim_supplier','item');


        $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]);
        }

        $start = $begin->format('Y-m-d');
        $finish = $end->format('Y-m-d');

        if ($start == $finish) {
            $datas = $datas->whereHas('kirim_supplier',function($w)use($begin){
                $w->whereDate('tanggal_kirim', $begin);
            });
        } else {
            $datas = $datas->whereHas('kirim_supplier',function($w)use($begin,$end){
                $w->tanggal($begin, $end);
            });
        }

        $datas = $datas->orderBy('kirim_supplier_id','DESC')->paginate(10);


        if ($request->excel == 1) {
            $export = [];
            foreach ($datas as $data) {
                $export[] = [
                    $data->kirim_supplier->tanggal_kirim,
                    $data->kirim_supplier->no_kirim,
                    $data->nama_item,
                    $data->qty,
                    $data->item->biaya_item,
                    $data->biaya_item,
                ];
            }
            return Excel::download(new KirimSuppliersExport($export), 'Laporan Kirim Supplier ' . $begin->format("Y-m-d") . " - " . $end->format("Y-m-d") . '.xlsx');
        } else {
           return response()->view("laporan.kirim-supplier.cetak", compact('datas','periode'));
        }

    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]