Anons79 Mini Shell

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

<?php

namespace App\Http\Controllers;

use App\Exports\TransaksiServiceExport;
use App\Exports\TransaksiServicesExport;
use App\Helpers\Helper;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use App\Models\Pelanggan;
use App\Models\Service;
use App\Models\DetailService;
use App\Models\Teknisi;
use App\Models\Sale;
use App\Models\Sparepart;
use App\Models\Item;
use App\Models\JenisItem;
use App\Models\Merk;
use App\Models\Pembayaran;
use App\Models\PembayaranService;
use App\Models\Pengguna;
use App\Models\Pesan;
use App\Models\PesanAction;
use App\Models\PesanCustom;
use App\Models\PesanOtomatis;
use App\Models\Profil;
use App\Models\refund;
use App\Models\SparepartLuar;
use Barryvdh\DomPDF\Facade\Pdf;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
use Knp\Snappy\Pdf as SnappyPdf;
use Maatwebsite\Excel\Facades\Excel;
use SebastianBergmann\LinesOfCode\Counter;
use Spatie\Browsershot\Browsershot;

class ServiceController extends Controller
{
    /**
     * Display a listing of the resource.
     */

    private $list_kerusakan = [
        ["mati_total", "Mati Total"],
        ["nand_emmc", "NAND/EMMC"],
        ["not_charging", "Not Charging"],
        ["no_signal", "No Signal"],
        ["battery", "Battery"],
        ["lcd_ts", " LCD/TS"],
        ["mic_audio", "Mic Audio"],
        ["software_bypass", "Software/Bypass"],
        ["dll", "Dll"]
    ];
    private $list_kelengkapan = [
        ["simcard", "Simcard"],
        ["memory_card", "Memory Card"],
        ["back_casing", "Back Casing"]
    ];

    public function index(Request $request)
    {
        try {
            // dd( url()->current());
            // dd( '?'.http_build_query($request->query()));
            // this will default to a time of 00:00:00
            $profil = Profil::first();
            $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]);
            }
            // $end->modify('+1 day');

            $interval = new DateInterval('P1D');
            $daterange = new DatePeriod($begin, $interval, $end);
            $periodeTanggals = [];
            foreach ($daterange as $date) {

                $periodeTanggals[] = strftime("%d-%b", strtotime($date->format("Y-m-d")));
            }

            $datas = new Service;
            $datas = $datas->with('sales', 'pelanggan', 'pengguna', 'teknisi');

            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)) {
                $service = $datas->created($begin, $end->modify('+1 day'))->latest()->get();


                // pesan custom
                $pesan_customs = PesanCustom::get();
                // pesan custom





                // Total omset perjam
                $omset_penjualan_perjam = 0;
                $omset_service_perjam = 0;
                $jam = [];
                for ($hour = 0; $hour < 24; $hour++) {

                    $startTime = $hour . ':00:00';
                    $endTime = $hour . ':59:59';
                    $jam[] = $hour;


                    $service_jam = Service::whereBetween("jam_mulai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->whereTime('jam_mulai', '>=', $startTime)
                        ->whereTime('jam_mulai', '<=', $endTime)
                        ->count();
                    $service_jam_keluar = Service::where('status_transaksi', '!=', 'proses')->whereBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->whereTime('jam_selesai', '>=', $startTime)
                        ->whereTime('jam_selesai', '<=', $endTime)
                        ->count();




                    $charts_perjam['servicePerjam'][] = $service_jam;
                    $charts_perjam['servicePerjam_keluar'][] = $service_jam_keluar;
                }






                $totalTransaksi = Service::tanggal($begin, $end)->count();
                $totalProses = Service::tanggal($begin, $end)->where('status_transaksi', 'proses')->count();
                $totalSuccess = Service::tanggal($begin, $end)->where('status_transaksi', 'success')->count();
                $totalCancel = Service::tanggal($begin, $end)->where('status_transaksi', 'cancel')->count();

                // omset Transfer

                $pengguna = Pengguna::all();




                $belum_dihubungi = Service::where('status_pesan', null)->created($begin, $end)->count();
                // status_transaksi
                $proses = Service::where('status_transaksi', 'proses')->tanggal($begin, $end)->count();
                $success = Service::where('status_transaksi', 'success')->tanggal($begin, $end)->count();
                $cancel = Service::where('status_transaksi', 'cancel')->tanggal($begin, $end)->count();


                // Persentase Transaksi



                if ($totalTransaksi > 0) {
                    $persentase_proses = ($totalProses / $totalTransaksi) * 100;
                    $persentase_success = ($totalSuccess / $totalTransaksi) * 100;
                    $persentase_cancel = ($totalCancel / $totalTransaksi) * 100;

                    $persentase_proses = round($persentase_proses);
                    $persentase_success = round($persentase_success);
                    $persentase_cancel = round($persentase_cancel);

                    $total_persentase = $persentase_proses + $persentase_success + $persentase_cancel;

                    $difference = 100 - $total_persentase;

                    if (abs($persentase_proses + $difference) <= 100) {
                        $persentase_proses += $difference;
                    } elseif (abs($persentase_success + $difference) <= 100) {
                        $persentase_success += $difference;
                    } elseif (abs($persentase_cancel + $difference) <= 100) {
                        $persentase_cancel += $difference;
                    }
                } else {
                    $persentase_proses = 0;
                    $persentase_success = 0;
                    $persentase_cancel = 0;
                }

                $infobox = [

                    'belum_dihubungi' => $belum_dihubungi,
                    // status_transaksi
                    'proses' => $proses,
                    'success' => $success,
                    'cancel' => $cancel,


                    'profil' => $profil,



                    // persentase donut chart
                    'persentase_proses' => $persentase_proses,
                    'persentase_success' => $persentase_success,
                    'persentase_cancel' => $persentase_cancel,
                    'total_transaksi' => $totalTransaksi,


                ];
            }

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

            if (isset($request->status_pembayaran)) {
                if ($request->status_pembayaran == "bayar_dp") {
                    $datas = $datas->where('status_pembayaran', '!=', 'lunas')->where('uang_bayar', '>', 0);
                } else {

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

                $datas = $datas->where("status_transaksi", $request->status_transaksi);
            }

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

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

            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')
                            ->orderBy('nama_pelanggan')
                            ->toBase(),
                        $sorting_order
                    );
                    $datas = $datas->paginate(10);
                } else {
                    $datas = $datas->orderBy($request->order, $sorting_order)->paginate(10);
                }
            } else {
                $datas = $datas->orderBy("tanggal", "desc")->paginate(10);
            }


            return response()->view("service.index", compact("request", "charts_perjam", "jam", "datas", "periodeTanggals", "periode", "sorting_order", "infobox", "pengguna", "pesan_customs"));
        } catch (\Throwable $th) {
            // dd($th->getMessage());
            Log::error($th);
            return abort(500);
            //return redirect()->route('service.index');
        }
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create(): Response
    {
        $list_kerusakan = $this->list_kerusakan;
        $list_kelengkapan = $this->list_kelengkapan;

        $teknisi = Teknisi::all();
        $pelanggan = Pelanggan::all();
        $merk = Merk::where('jenis_merk', 2)->get();
        $sale = Sale::all();
        $pengguna = Pengguna::all();

        $data = [
            "teknisi" => $teknisi,
            "pelanggan" => $pelanggan,
            "pengguna" => $pengguna,
            "sale" => $sale,
            "merk" => $merk,
            "list_kelengkapan" => $list_kelengkapan,
            "list_kerusakan" => $list_kerusakan,
        ];

        return response()->view("service.create", $data);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        try {
            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
            if ($findPelanggan) {
                $request->validate([
                    'nama' => 'required',

                    'kontak' => 'required',
                    'kecamatan_pelanggan' => 'required',
                    'alamat' => 'required',
                ]);
                $update = $findPelanggan->update([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0

                ]);
                $pelanggan_id = $findPelanggan->id;
            } else {
                $request->validate([
                    'nama' => 'required',
                    'kontak' => 'required',
                    'kecamatan_pelanggan' => 'required',
                    'alamat' => 'required',
                ]);
                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0
                ]);
                $pelanggan->save();
                $pelanggan_id = $pelanggan->id;
            }

            $request->validate([
                'deskripsi' => 'required',
                'merk' => 'required',
                'imei1' => 'nullable|max:15',
                'imei2' => 'nullable|max:15',
                'deskripsi' => 'required',
                'garansi' => 'required',
                'biaya' => 'nullable',
                'uang_bayar' => 'required',
                'color' => 'required',
                'riwayat_servis' => 'required',
                'lama_pemakaian' => 'required',

            ]);


            $kerusakan = (isset($request->kerusakan)) ? implode(",", $request->kerusakan) : " ";
            $kelengkapan = (isset($request->kelengkapan)) ? implode(",", $request->kelengkapan) : " ";

            $service = [
                'pelanggan_id' => $pelanggan_id,
                'pengguna_id' => auth()->user()->id,
                'teknisi_id' => $request->teknisi_id,
                'sale_id' => $request->sale_id,
                'no_service' => $request->no_service,
                'merk' => $request->merk,
                'tipe' => $request->tipe,
                'imei1' => $request->imei1,
                'imei2' => $request->imei2,
                'kerusakan' => $kerusakan,
                'deskripsi' => $request->deskripsi,
                'kelengkapan' => $kelengkapan,
                'pola' => $request->pola,
                'pin' => $request->pin,
                'tanggal' => $request->tanggal,
                'garansi' => $request->garansi,
                'biaya' => str_replace("Rp ", "", str_replace(".", "", $request->biaya)),
                'uang_bayar' => str_replace("Rp ", "", str_replace(".", "", $request->uang_bayar)),
                'metode_bayar' => $request->metode_bayar,
                'color' => $request->color,
                'riwayat_servis' => $request->riwayat_servis,
                'lama_pemakaian' => $request->lama_pemakaian,
                //status: pending, dikerjakan, selesai, batal
                'status' => "pending",
                'status_transaksi' => 'proses',
                //status_pembayaran: belum_ditanggapi, belum_lunas, lunas
                'status_pembayaran' => "belum_lunas",
                "catatan_teknisi" => $request->catatan_teknisi,
                'jam_mulai' => now()->addHours(8)
            ];
            if ($request->hasFile('bukti_transfer_dp')) {
                $file = $request->file('bukti_transfer_dp');
                $ekstensi = $file->extension();
                $baru = "BuktiTFDPService-" . date('ymdhis') . ".$ekstensi";
                $file->move(public_path('images/Bukti_transfer'), $baru);
                $service['bukti_transfer_dp'] = $baru;
            }

            if ($request->garansi == 1) {
                $service['status_pembayaran'] = 'Waranty';
            }
            $createService = Service::create($service);
            $createService->save();

            if (isset($request->jumlah)) {
                for ($i = 0; $i < count($request->jumlah); $i++) {
                    $item = Item::find($request->id[$i]);

                    $detail = [
                        "service_id" => $createService->id,
                        "item_id" => $request->id[$i],
                        "jumlah" => $request->jumlah[$i],
                        "diskon" => $request->diskon_item[$i],
                        "nama_item" => $item->nama_item,
                        "harga_item" => $item->harga_item,
                        "biaya_item" => $item->biaya_item,

                    ];


                    DetailService::create($detail);
                    $item->update([
                        "stok" => $item->stok - $request->jumlah[$i],
                    ]);


                    // $sparepart = Sparepart::find($request->id[$i]);
                    // $sparepart->update([
                    //     "stok" => $sparepart->stok - $request->jumlah[$i]
                    // ]);
                }
            }
            if (isset($request->nama_SL)) {
                for ($i = 0; $i < count($request->nama_SL); $i++) {
                    $sparepart = [
                        "service_id" => $createService->id,
                        "nama_SL" => $request->nama_SL[$i],
                        "jumlah_SL" => $request->jumlah_SL[$i],
                        "diskon_SL" => $request->diskon_SL[$i],
                        "harga_modal_SL" => $request->harga_modal_SL[$i],
                        "harga_jual_SL" => $request->harga_jual_SL[$i],

                    ];
                    SparepartLuar::create($sparepart);
                }
            }




            DB::commit();
            Helper::addUserLog('Menambah Service Untuk Pelanggan ' . $createService->pelanggan->nama_pelanggan, $createService->toArray());
            return redirect(route("service.index"))->with('success', 'Service berhasil ditambah');
        } catch (\Throwable $th) {
            DB::rollback();

            return redirect()->back()->with('error', $th->getMessage());
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id): Response
    {
        $pengguna = Pengguna::all();
        $datas = Service::find($id);
        $sales = Pengguna::where('id', $datas->sales_id)->first();
        $data = [
            'datas' => $datas,
            'pengguna' => $pengguna,
            'sales' => $sales,
        ];
        return response()->view('service.nota-cetak', $data);
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id): Response
    {
        $list_kerusakan = $this->list_kerusakan;
        $list_kelengkapan = $this->list_kelengkapan;
        $datas = Service::find($id);
        $detail = DetailService::where("service_id", $id)->get();
        $sparepart_luar = SparepartLuar::where("service_id", $id)->get();
        $teknisi = Teknisi::all();
        $sale = Sale::all();
        $pelanggan = Pelanggan::all();
        $pengguna = Pengguna::all();
        $merk = Merk::where('jenis_merk', 2)->get();
        $kelengkapan = explode(",", $datas->kelengkapan);
        $kerusakan = explode(",", $datas->kerusakan);

        $data = [
            "datas" => $datas,
            "detail" => $detail,
            "sparepart_luar" => $sparepart_luar,
            "teknisi" => $teknisi,
            "sale" => $sale,
            "pelanggan" => $pelanggan,
            "merk" => $merk,
            'pengguna' => $pengguna,
            "list_kelengkapan" => $list_kelengkapan,
            "list_kerusakan" => $list_kerusakan,
            "kelengkapan" => $kelengkapan,
            "kerusakan" => $kerusakan
        ];

        // dd($data['merk']);
        // dd($detail);
        return response()->view("service.edit", $data);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id): RedirectResponse
    {
        $data = Service::find($id);

        // foreach($old_detail as $od)
        // {
        //     $old_sparepart = Sparepart::find($od->sparepart_id);
        //     $old_sparepart->update([
        //         "stok" => $old_sparepart + $od->jumlah,
        //     ]);
        // }
        try {

            DB::beginTransaction();

            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
            if ($findPelanggan) {
                $request->validate([
                    'nama' => 'required',
                    'kontak' => 'required',
                    'kecamatan_pelanggan' => 'required',
                    'alamat' => 'required',
                ]);
                $update = $findPelanggan->update([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0

                ]);
                $pelanggan_id = $findPelanggan->id;
            } else {
                $request->validate([
                    'nama' => 'required',
                    'kontak' => 'required',
                    'kecamatan_pelanggan' => 'required',
                    'alamat' => 'required',
                    'kecamatan_pelanggan' => 'required',
                ]);
                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'pengguna_id' => auth()->user()->id,
                ]);
                $pelanggan->save();
                $pelanggan_id = $pelanggan->id;
            }

            $kerusakan = (isset($request->kerusakan)) ? implode(",", $request->kerusakan) : " ";
            $kelengkapan = (isset($request->kelengkapan)) ? implode(",", $request->kelengkapan) : " ";

            $request->validate([
                'deskripsi' => 'required',
                'merk' => 'required',
                'imei1' => 'nullable|max:15',
                'imei2' => 'nullable|max:15',
                'deskripsi' => 'required',
                'garansi' => 'required',
                'biaya' => 'nullable',
                'uang_bayar' => 'required',
                'color' => 'required',
                'riwayat_servis' => 'required',
                'lama_pemakaian' => 'required',

            ]);

            $datas = [
                'merk' => $request->merk,
                'pelanggan_id' => $pelanggan_id,
                'pengguna_id' => $request->pengguna_id,
                'teknisi_id' => $request->teknisi_id,
                'sale_id' => $request->sale_id,
                'imei1' => $request->imei1,
                'imei2' => $request->imei2,
                'kerusakan' => $kerusakan,
                'deskripsi' => $request->deskripsi,
                'kelengkapan' => $kelengkapan,
                'tanggal' => $request->tanggal,
                'garansi' => $request->garansi,
                'uang_bayar' => $request->uang_bayar,
                'tipe' => $request->tipe,
                'metode_bayar' => $request->metode_bayar,
                'pin' => $request->pin,
                'biaya' => str_replace("Rp ", "", str_replace(".", "", $request->biaya)),
                'uang_bayar' => str_replace("Rp ", "", str_replace(".", "", $request->uang_bayar)),
                'color' => $request->color,
                'riwayat_servis' => $request->riwayat_servis,
                'lama_pemakaian' => $request->lama_pemakaian,
                "catatan_teknisi" => $request->catatan_teknisi,
                //status: pending, dikerjakan, selesai, batal, diambil, refund
            ];
            if ($request->pola != '') {
                $datas = [
                    'pola' => $request->pola,
                ];
            }

            // if (str_replace("Rp ", "", str_replace(".", "", $request->biaya)) == 0) {

            //     $datas['status_pembayaran'] = "belum_ditanggapi";
            // } else {

            //     $datas['status_pembayaran'] = "belum_lunas";
            // }
            if ($request->hasFile('bukti_transfer_dp')) {
                $file = $request->file('bukti_transfer_dp');
                $ekstensi = $file->extension();
                $baru = "BuktiTFDPService-" . date('ymdhis') . ".$ekstensi";
                $file->move(public_path('images/Bukti_transfer'), $baru);
                $datas['bukti_transfer_dp'] = $baru;
                $tf_lama = $data->bukti_transfer_dp;
                File::delete(public_path('images/Bukti_transfer') . "/" . $tf_lama);
            }


            $data->update($datas);
            $old_detail = DetailService::where("service_id", $id);

            foreach ($old_detail->get() as $o) {
                $item_old = Item::find($o->item_id);
                if (isset($item_old)) {
                    $item_old->update([
                        "stok" => $item_old->stok + $o->jumlah
                    ]);
                }
            }

            $old_detail->Delete();
            if (isset($request->jumlah)) {

                for ($i = 0; $i < count($request->jumlah); $i++) {
                    $item = Item::find($request->id[$i]);
                    $detail = [
                        "service_id" => $data->id,
                        "item_id" => $request->id[$i],
                        "jumlah" => $request->jumlah[$i],
                        "diskon" => $request->diskon_item[$i],
                        "nama_item" => $request->nama_item[$i],
                        "harga_item" => $request->harga[$i],
                        "biaya_item" => $request->biaya_item[$i],

                    ];



                    DetailService::create($detail);
                    if (isset($item)) {

                        $item->update([
                            "stok" => $item->stok - $request->jumlah[$i],
                        ]);
                    }
                }
            }

            SparepartLuar::where("service_id", $id)->Delete();
            if (isset($request->nama_SL)) {
                for ($i = 0; $i < count($request->nama_SL); $i++) {
                    $sparepart = [
                        "service_id" => $data->id,
                        "nama_SL" => $request->nama_SL[$i],
                        "jumlah_SL" => $request->jumlah_SL[$i],
                        "diskon_SL" => $request->diskon_SL[$i],
                        "harga_modal_SL" => $request->harga_modal_SL[$i],
                        "harga_jual_SL" => $request->harga_jual_SL[$i],

                    ];
                    SparepartLuar::create($sparepart);
                }
            }

            DB::commit();
            Helper::addUserLog('Mengubah Service Untuk Pelanggan ' . $data->pelanggan->nama_pelanggan ?? $data->pelanggan_id, $data->toArray());
            return redirect(route("service.index"))->with('success', 'data berhasil diEdit!');
        } catch (\Throwable $th) {
            Log::error($th);
            DB::rollback();
            return redirect()->back()->with('error', $th->getMessage());
        }
    }
    public function duplicate(Request $request, string $id): RedirectResponse
    {

        // foreach($old_detail as $od)
        // {
        //     $old_sparepart = Sparepart::find($od->sparepart_id);
        //     $old_sparepart->update([
        //         "stok" => $old_sparepart + $od->jumlah,
        //     ]);
        // }
        try {
            $data = Service::find($id);

            DB::beginTransaction();





            $datas = [
                'no_service' => 'S-' . date('his'),
                'merk' => $data->merk,
                'pelanggan_id' => $data->pelanggan_id,
                'pengguna_id' => $data->pengguna_id,
                'teknisi_id' => $data->teknisi_id,
                'sale_id' => $data->sale_id,
                'tipe' => $data->tipe,
                'imei1' => $data->imei1,
                'imei2' => $data->imei2,
                'kerusakan' => $data->kerusakan,
                'deskripsi' => $data->deskripsi,
                'kelengkapan' => $data->kelengkapan,
                'tanggal' => $data->tanggal,
                'garansi' => $data->garansi,
                'uang_bayar' => $data->uang_bayar,
                'pin' => $data->pin,
                'biaya' => str_replace("Rp ", "", str_replace(".", "", $data->biaya)),
                'uang_bayar' => str_replace("Rp ", "", str_replace(".", "", $data->uang_bayar)),
                'color' => $data->color,
                'riwayat_servis' => $data->riwayat_servis,
                'lama_pemakaian' => $data->lama_pemakaian,
                'status' => $data->status,
                'status_transaksi' => 'proses',
                'status' => "pending",
                'status_pembayaran' => 'belum_lunas',
                'pola' => $data->pola,
                'created_at' => now(),
                'jam_mulai' => now()->addHours(8)

                //status: pending, dikerjakan, selesai, batal, diambil, refund
            ];

            $service = Service::create($datas);
            // $service->save();
            // $old_pembayaran = PembayaranService::where("service_id", $id);
            // if (isset($old_pembayaran)) {
            //     foreach ($old_pembayaran->get() as $bayar) {
            //         $pembayaran = PembayaranService::create([
            //             "metode_bayar" => $bayar->metode_bayar,
            //             "akhir_garansi" => $bayar->akhir_garansi,
            //             "sale_id" => $bayar->sale_id,
            //             "total_bayar" => $bayar->total_bayar,
            //             "uang_bayar" => $bayar->uang_bayar,
            //             "uang_muka" => $bayar->uang_muka,
            //             "service_id" => $service->id,
            //         ]);
            //     }

            //     $pembayaran->save();
            // }
            // $old_refund = refund::where("service_id", $id);
            // if (isset($old_refund)) {

            //     foreach ($old_refund->get() as $refund) {
            //         refund::create([
            //             "uang_refund" => $refund->uang_refund,
            //             "keterangan" => $refund->keterangan,
            //             "service_id" => $service->id,
            //         ]);
            //     }
            // }

            // $detail = DetailService::where("service_id", $id);
            // if (isset($detail)) {
            //     foreach ($detail->get() as $o) {
            //         $item = Item::find($o->item_id);

            //         $detail = [
            //             "service_id" => $service->id,
            //             "item_id" => $o->item_id,
            //             "jumlah" => $o->jumlah,
            //             "diskon" => $o->diskon,
            //         ];



            //         DetailService::create($detail);

            //         $item->update([
            //             "stok" => $item->stok - $o->jumlah,
            //         ]);
            //     }
            // }


            DB::commit();
            // Helper::addUserLog('Mengubah Service Untuk Pelanggan ' . $data->pelanggan->nama_pelanggan ?? $data->pelanggan_id , $data->toArray());
            return redirect(route("service.index"))->with('success', 'data berhasil diDuplikat!');
        } catch (\Throwable $th) {
            DB::rollback();
            return redirect()->back()->with('error', $th->getMessage());
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id): RedirectResponse
    {
        DB::beginTransaction();
        try {
            $data = Service::find($id);
            $detail = DetailService::where('service_id', $id);

            if ($data->status_transaksi != 'cancel') {
                if (isset($detail)) {
                    foreach ($detail->get() as $o) {
                        $item_old = Item::find($o->item_id);
                        if (isset($item_old)) {
                            $item_old->update([
                                "stok" => $item_old->stok + $o->jumlah
                            ]);
                        }
                    }
                }
                $data->delete();
            } else {
                $data->delete();
                $detail->delete();
            }



            Helper::addUserLog('Mengubah Service ' . $data->no_service . ' Untuk Pelanggan ' . $data->pelanggan->nama_pelanggan ?? $data->pelanggan_id, "");
            $data->delete();
            DB::commit();


            return redirect()->route('service.index')->with('success', 'Item berhasil dihapus');
        } catch (\Throwable $th) {
            DB::rollback();
            return redirect()->route('service.index')->with('error', 'Item gagal dihapus');
        }
    }

    public function dashboard()
    {
        $service_pending = Service::where('status', "pending")->count();
        $service_pending_harian = Service::where('status', "pending")->whereDate("created_at", date("Y-m-d"))->count();

        $service_dikerjakan = Service::where('status', "dikerjakan")->count();
        $service_dikerjakan_harian = Service::where('status', "dikerjakan")->whereDate("updated_at", date("Y-m-d"))->count();

        $service_selesai = Service::where('status', "selesai")->count();
        $service_selesai_harian = Service::where('status', "selesai")->whereDate("updated_at", date("Y-m-d"))->count();

        return response()->view('service.dashboard', compact("service_pending", "service_dikerjakan", "service_selesai", "service_pending_harian", "service_dikerjakan_harian", "service_selesai_harian"));
    }

    public function list(Request $request)
    {
        $status = $request->get('status') != null ? $request->get('status') : "pending";
        $datas = Service::where('status', $status)->paginate(10);
        return response()->view('service.list', compact('datas', 'status'));
    }

    public function list_terpakai()
    {
        $service = Service::whereMonth("created_at", date("m"))->get();

        $totalSparepartToko = 0;
        $totalSparepartLuar = 0;

        foreach ($service as $s) {
            $totalSparepartToko += $s->total_sparepart_toko;
            $totalSparepartLuar += $s->total_sparepart_luar;
        }

        $datas = Service::whereMonth("created_at", date("m"))->paginate(10);

        return response()->view('service.list_terpakai', compact("datas", "totalSparepartLuar", "totalSparepartToko"));
    }
    public function kas(Request $request)
    {
        $status = $request->get('status') != null ? $request->get('status') : "pending";

        if ($status == "selesai" || $status == "diambil") {
            $datas = Service::whereIn("status", ["selesai", "diambil"]);
        } else if ($status != "selesai" || $status != "diambil") {
            $datas = Service::whereNotIn("status", ["selesai", "diambil"]);
        }

        $jumlah = $datas->get();

        $jumlahTotal = 0;

        foreach ($jumlah as $j) {
            $jumlahTotal += $j->total_sparepart;
        }

        $datas = $datas->paginate(10);

        return response()->view('service.kas', compact("datas", "status", "jumlahTotal"));
    }
    public function garansi()
    {
        $datas = Service::where('garansi', '1')->paginate(10);
        return response()->view('service.garansi', compact('datas'));
    }

    public function proses(Request $request, string $id)
    {
        $profil = Profil::latest()->first();
        $service = Service::with('pelanggan', 'pengguna')->find($id);
        $detail = DetailService::where('service_id', $id);
        $status = $service->status;
        $pesan_action = new PesanAction;
        $status_action = '';




        //kondisi batal
        // pembatalan dari status pending perbaikan
        if ($status == 'pending_perbaikan' && $request->status == 'batal') {
            $service->update([
                "status" => 'tidak_deal',

            ]);
            $status_action = 'tidak_deal';
        }
        // pembatalan dari kondisi status perbaikan
        elseif ($status == 'proses_perbaikan' && $request->status == 'batal') {
            $service->update([
                "status" => 'gagal_perbaikan',

            ]);
            $status_action = 'gagal_perbaikan';
            //pesan outomatis
            $pesan_otomatis = pesanCustom::where('status', 'gagal_perbaikan')->get();
            $id_pesan = '';
            if (isset($pesan_otomatis)) {
                foreach ($pesan_otomatis as $item) {

                    // replace autotext
                    $placeholders = [
                        '{ service_id }',
                        '{ nama_pelanggan }',
                        '{ status }',
                        '{ biaya }',
                        '{ uang_muka }',
                        '{ grand_total }',
                        '{ tipe_hp }',
                        '{ kerusakan }',
                        '{ kasir }',
                        '{ nama_toko }'
                    ];

                    $replacements = [
                        $service->no_service,
                        @$service->pelanggan->nama_pelanggan ?? "-",
                        ucwords(str_replace('_', ' ', $service->status)),
                        $service->biaya,
                        $service->uang_bayar,
                        $service->grand_total,
                        $service->merk . ' (' . $service->tipe . ')',
                        $service->kerusakan,
                        @$service->pengguna->nama_pengguna ?? "-",
                        @$profil->nama_toko ?? "-"
                    ];

                    $pesan_custom = str_replace($placeholders, $replacements, $item->isi_pesan);


                    // waktu
                    $datetimes = now()->addHours(7);

                    if ($item->satuan_waktu == 'hari') {
                        $datetimes = $datetimes->addDays($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'bulan') {
                        $datetimes = $datetimes->addMonths($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'tahun') {
                        $datetimes = $datetimes->addYears($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'minggu') {
                        $datetimes = $datetimes->addWeeks($item->jumlah_waktu);
                    }

                    $carbonDate = Carbon::parse($item->jam);
                    $jam = $carbonDate->subHours(1);
                    list($hours, $minutes) = explode(':', $jam->format('H:i'));
                    $datetimes = $datetimes->setTime($hours, $minutes);



                    $id_pesans = [];
                    // pengeriman pesan
                    if ($item->nota == 1) {
                        $sales = Pengguna::where('id', $service->sale_id)->first();
                        $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                        $profil = Profil::first();
                        $data = [
                            "datas" => $service,
                            "sales" => $sales,
                            "pembayaran_service" => $pembayaran_service,
                            "profil" => $profil
                        ];

                        $pdf = Pdf::loadView('service.nota', $data);
                        $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                        $pdf->setPaper('A4', 'landscape');
                        $pdf->render();
                        $path = public_path('pdf/Nota/' . $fileName);

                        $pdf->save($path);
                        // jalan kan route kirim nota
                        // return $pdf->stream($path, array("Attachment" => false));
                        $pdfUrl = url('pdf/Nota/' . $fileName);

                        // pesan otomatis nota

                        $id_pesan_pdf = Helper::SchaduleNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl, $datetimes->format('Y-m-d H:i'));
                        $id_pesans[] = $id_pesan_pdf;
                        File::delete($path);
                    }

                    // pesan otomatis biasa
                    $id_pesan = Helper::SchaduleMessage($service->pelanggan->telp_pelanggan, $pesan_custom, $datetimes->format('Y-m-d H:i'));
                    $id_pesans[] = $id_pesan;

                    foreach ($id_pesans as $pesan_id) {

                        $pesan_otomatis = [
                            'id_pesan' => $pesan_id,
                            'id_service' => $service->id,
                            'status_batal' => $item->status_batal

                        ];
                        PesanOtomatis::create($pesan_otomatis);
                    }
                }
            }
        }
        // pembatalan dari kondisi status pengecekan
        elseif ($status == 'pengecekan' && $request->status == 'batal') {
            $service->update([
                "status" => 'tidak_bisa_diperbaiki',

            ]);
            $status_action = 'tidak_bisa_diperbaiki';
            //pesan outomatis
            $pesan_otomatis = pesanCustom::where('status', 'tidak_bisa_diperbaiki')->get();
            $id_pesan = '';
            if (isset($pesan_otomatis)) {
                foreach ($pesan_otomatis as $item) {

                    // replace autotext
                    $placeholders = [
                        '{ service_id }',
                        '{ nama_pelanggan }',
                        '{ status }',
                        '{ biaya }',
                        '{ uang_muka }',
                        '{ grand_total }',
                        '{ tipe_hp }',
                        '{ kerusakan }',
                        '{ kasir }',
                        '{ nama_toko }'
                    ];

                    $replacements = [
                        $service->no_service,
                        @$service->pelanggan->nama_pelanggan ?? "-",
                        ucwords(str_replace('_', ' ', $service->status)),
                        $service->biaya,
                        $service->uang_bayar,
                        $service->grand_total,
                        $service->merk . ' (' . $service->tipe . ')',
                        $service->kerusakan,
                        @$service->pengguna->nama_pengguna ?? "-",
                        @$profil->nama_toko ?? "-"
                    ];

                    $pesan_custom = str_replace($placeholders, $replacements, $item->isi_pesan);


                    // waktu
                    $datetimes = now()->addHours(7);

                    if ($item->satuan_waktu == 'hari') {
                        $datetimes = $datetimes->addDays($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'bulan') {
                        $datetimes = $datetimes->addMonths($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'tahun') {
                        $datetimes = $datetimes->addYears($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'minggu') {
                        $datetimes = $datetimes->addWeeks($item->jumlah_waktu);
                    }

                    $carbonDate = Carbon::parse($item->jam);
                    $jam = $carbonDate->subHours(1);
                    list($hours, $minutes) = explode(':', $jam->format('H:i'));
                    $datetimes = $datetimes->setTime($hours, $minutes);



                    $id_pesans = [];
                    // pengeriman pesan
                    if ($item->nota == 1) {
                        $sales = Pengguna::where('id', $service->sale_id)->first();
                        $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                        $profil = Profil::first();
                        $data = [
                            "datas" => $service,
                            "sales" => $sales,
                            "pembayaran_service" => $pembayaran_service,
                            "profil" => $profil
                        ];

                        $pdf = Pdf::loadView('service.nota', $data);
                        $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                        $pdf->setPaper('A4', 'landscape');
                        $pdf->render();
                        $path = public_path('pdf/Nota/' . $fileName);

                        $pdf->save($path);
                        // jalan kan route kirim nota
                        // return $pdf->stream($path, array("Attachment" => false));
                        $pdfUrl = url('pdf/Nota/' . $fileName);

                        // pesan otomatis nota

                        $id_pesan_pdf = Helper::SchaduleNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl, $datetimes->format('Y-m-d H:i'));
                        $id_pesans[] = $id_pesan_pdf;
                        File::delete($path);
                    }

                    // pesan otomatis biasa
                    $id_pesan = Helper::SchaduleMessage($service->pelanggan->telp_pelanggan, $pesan_custom, $datetimes->format('Y-m-d H:i'));
                    $id_pesans[] = $id_pesan;

                    foreach ($id_pesans as $pesan_id) {

                        $pesan_otomatis = [
                            'id_pesan' => $pesan_id,
                            'id_service' => $service->id,
                            'status_batal' => $item->status_batal

                        ];
                        PesanOtomatis::create($pesan_otomatis);
                    }
                }
            }
        }
        // pembatalan dari kondisi status indent
        elseif ($status == 'indent' && $request->status == 'batal') {

            $service->update([
                "status" => 'tidak_bisa_diperbaiki',

            ]);
            $status_action = "gagal_indent";
        }
        // pembatalan dari kondisi status konfirmasi
        elseif ($status == 'konfirmasi' && $request->status == 'batal') {
            $service->update([
                "status" => 'tidak_deal',

            ]);
            $status_action = 'tidak_deal';

            //pesan outomatis
            $pesan_otomatis = pesanCustom::where('status', 'tidak_deal')->get();
            $id_pesan = '';
            if (isset($pesan_otomatis)) {
                foreach ($pesan_otomatis as $item) {

                    // replace autotext
                    $placeholders = [
                        '{ service_id }',
                        '{ nama_pelanggan }',
                        '{ status }',
                        '{ biaya }',
                        '{ uang_muka }',
                        '{ grand_total }',
                        '{ tipe_hp }',
                        '{ kerusakan }',
                        '{ kasir }',
                        '{ nama_toko }'
                    ];

                    $replacements = [
                        $service->no_service,
                        @$service->pelanggan->nama_pelanggan ?? "-",
                        ucwords(str_replace('_', ' ', $service->status)),
                        $service->biaya,
                        $service->uang_bayar,
                        $service->grand_total,
                        $service->merk . ' (' . $service->tipe . ')',
                        $service->kerusakan,
                        @$service->pengguna->nama_pengguna ?? "-",
                        @$profil->nama_toko ?? "-"
                    ];

                    $pesan_custom = str_replace($placeholders, $replacements, $item->isi_pesan);


                    // waktu
                    $datetimes = now()->addHours(7);

                    if ($item->satuan_waktu == 'hari') {
                        $datetimes = $datetimes->addDays($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'bulan') {
                        $datetimes = $datetimes->addMonths($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'tahun') {
                        $datetimes = $datetimes->addYears($item->jumlah_waktu);
                    } elseif ($item->satuan_waktu == 'minggu') {
                        $datetimes = $datetimes->addWeeks($item->jumlah_waktu);
                    }

                    $carbonDate = Carbon::parse($item->jam);
                    $jam = $carbonDate->subHours(1);
                    list($hours, $minutes) = explode(':', $jam->format('H:i'));
                    $datetimes = $datetimes->setTime($hours, $minutes);



                    $id_pesans = [];
                    // pengeriman pesan
                    if ($item->nota == 1) {
                        $sales = Pengguna::where('id', $service->sale_id)->first();
                        $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                        $profil = Profil::first();
                        $data = [
                            "datas" => $service,
                            "sales" => $sales,
                            "pembayaran_service" => $pembayaran_service,
                            "profil" => $profil
                        ];

                        $pdf = Pdf::loadView('service.nota', $data);
                        $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                        $pdf->setPaper('A4', 'landscape');
                        $pdf->render();
                        $path = public_path('pdf/Nota/' . $fileName);

                        $pdf->save($path);
                        // jalan kan route kirim nota
                        // return $pdf->stream($path, array("Attachment" => false));
                        $pdfUrl = url('pdf/Nota/' . $fileName);

                        // pesan otomatis nota

                        $id_pesan_pdf = Helper::SchaduleNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl, $datetimes->format('Y-m-d H:i'));
                        $id_pesans[] = $id_pesan_pdf;
                        File::delete($path);
                    }

                    // pesan otomatis biasa
                    $id_pesan = Helper::SchaduleMessage($service->pelanggan->telp_pelanggan, $pesan_custom, $datetimes->format('Y-m-d H:i'));
                    $id_pesans[] = $id_pesan;

                    foreach ($id_pesans as $pesan_id) {

                        $pesan_otomatis = [
                            'id_pesan' => $pesan_id,
                            'id_service' => $service->id,
                            'status_batal' => $item->status_batal

                        ];
                        PesanOtomatis::create($pesan_otomatis);
                    }
                }
            }
        }

        // Kondisi Transaksi selain batal
        else {
            // Status Pending
            switch ($request->status) {
                case 'pending':
                    $status_action = 'pending';
                    $service->update([
                        "status" => 'pending',
                        "status_transaksi" => 'proses'

                    ]);
                    break;
                // status Pengecekan
                case 'pengecekan':
                    $status_action = 'pengecekan';
                    $service->update([
                        "status" => 'pengecekan',
                        "status_transaksi" => 'proses'

                    ]);
                    break;
                // Status Konfirmasi
                case 'konfirmasi':
                    $status_action = '';
                    $service->update([
                        "status" => 'konfirmasi',
                        "status_transaksi" => 'proses'

                    ]);
                    // menuju ke pesan 
                    $datas = Service::find($id);
                    $pesans = Pesan::where("service_id", $datas->id)->get();
                    $isi_pesan = "Halo kak " . $datas->pelanggan->nama_pelanggan . "
Hp kakak sudah selesai kami cek, berikut rincian detail kerusakan dan biaya perbaikan nya: 

Kerusakan:" . $datas->kerusakan . "
Harga perbaikan:RP. " . number_format($datas->grandTotal) . "

Apakah kakak bersedia di lanjut perbaikan?
";
//                     $isi_pesan_tidak_deal = "Halo kak " . $datas->pelanggan->nama_pelanggan . "
// Terimaksih atas konfirmasinya. Hp Kakak bisa diambil kembali ke konter Anggur Cell dg memberitahukan chat ini ke karyawan kami ya kak. 
// Terimakasih 😊

// ";
                    $data = [
                        "datas" => $datas,
                        "pesans" => $pesans,
                        "isi_pesan" => $isi_pesan,
                    ];
                    // halaman pesan service
                    return response()->view("pesan.edit", $data);
                    break;

                // Status hp bisa diperbaiki
                case 'hp_bisa_diperbaiki':
                    $status_action = '';
                    $service->update([
                        "status" => 'konfirmasi',
                        "status_transaksi" => 'proses'

                    ]);
                    // menuju ke pesan 
                    $datas = Service::find($id);
                    $pesans = Pesan::where("service_id", $datas->id)->get();
                    $isi_pesan = "Halo kak " . $datas->pelanggan->nama_pelanggan . "
Hp kakak sudah selesai kami cek, berikut rincian detail kerusakan dan biaya perbaikan nya: 

Kerusakan:" . $datas->kerusakan . "
Harga perbaikan:RP. " . number_format($datas->grandTotal) . "

Apakah kakak bersedia di lanjut perbaikan?
";
                    $isi_pesan_tidak_deal = "Halo kak " . $datas->pelanggan->nama_pelanggan . "
Terimaksih atas konfirmasinya. Hp Kakak bisa diambil kembali ke konter Anggur Cell dg memberitahukan chat ini ke karyawan kami ya kak. 
Terimakasih 😊

";
                    $data = [
                        "datas" => $datas,
                        "pesans" => $pesans,
                        "isi_pesan" => $isi_pesan,
                    ];
                    // halaman pesan service
                    return response()->view("pesan.edit", $data);
                    break;
                // Status hp Normal
                case 'hp_normal':
                    $status_action = 'hp_normal';
                    $service->update([
                        "status" => 'hp_normal',
                        "status_transaksi" => 'proses'

                    ]);
                    $datas = Service::find($id);
                    $pesans = Pesan::where("service_id", $datas->id)->get();



                    //pesan outomatis
                    $pesan_otomatis = pesanCustom::where('status', 'hp_normal')->get();
                    $id_pesan = '';
                    if (isset($pesan_otomatis)) {
                        foreach ($pesan_otomatis as $item) {

                            // replace autotext
                            $placeholders = [
                                '{ service_id }',
                                '{ nama_pelanggan }',
                                '{ status }',
                                '{ biaya }',
                                '{ uang_muka }',
                                '{ grand_total }',
                                '{ tipe_hp }',
                                '{ kerusakan }',
                                '{ kasir }',
                                '{ nama_toko }'
                            ];

                            $replacements = [
                                $service->no_service,
                                @$service->pelanggan->nama_pelanggan ?? "-",
                                ucwords(str_replace('_', ' ', $service->status)),
                                $service->biaya,
                                $service->uang_bayar,
                                $service->grand_total,
                                $service->merk . ' (' . $service->tipe . ')',
                                $service->kerusakan,
                                @$service->pengguna->nama_pengguna ?? "-",
                                @$profil->nama_toko ?? "-"
                            ];

                            $pesan_custom = str_replace($placeholders, $replacements, $item->isi_pesan);


                            // waktu
                            $datetimes = now()->addHours(7);

                            if ($item->satuan_waktu == 'hari') {
                                $datetimes = $datetimes->addDays($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'bulan') {
                                $datetimes = $datetimes->addMonths($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'tahun') {
                                $datetimes = $datetimes->addYears($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'minggu') {
                                $datetimes = $datetimes->addWeeks($item->jumlah_waktu);
                            }

                            $carbonDate = Carbon::parse($item->jam);
                            $jam = $carbonDate->subHours(1);
                            list($hours, $minutes) = explode(':', $jam->format('H:i'));
                            $datetimes = $datetimes->setTime($hours, $minutes);



                            $id_pesans = [];
                            // pengeriman pesan
                            if ($item->nota == 1) {
                                $sales = Pengguna::where('id', $service->sale_id)->first();
                                $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                                $profil = Profil::first();
                                $data = [
                                    "datas" => $service,
                                    "sales" => $sales,
                                    "pembayaran_service" => $pembayaran_service,
                                    "profil" => $profil
                                ];

                                $pdf = Pdf::loadView('service.nota', $data);
                                $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                                $pdf->setPaper('A4', 'landscape');
                                $pdf->render();
                                $path = public_path('pdf/Nota/' . $fileName);

                                $pdf->save($path);
                                // jalan kan route kirim nota
                                // return $pdf->stream($path, array("Attachment" => false));
                                $pdfUrl = url('pdf/Nota/' . $fileName);

                                // pesan otomatis nota

                                $id_pesan_pdf = Helper::SchaduleNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl, $datetimes->format('Y-m-d H:i'));
                                $id_pesans[] = $id_pesan_pdf;
                                File::delete($path);
                            }

                            // pesan otomatis biasa
                            $id_pesan = Helper::SchaduleMessage($service->pelanggan->telp_pelanggan, $pesan_custom, $datetimes->format('Y-m-d H:i'));
                            $id_pesans[] = $id_pesan;

                            foreach ($id_pesans as $pesan_id) {

                                $pesan_otomatis = [
                                    'id_pesan' => $pesan_id,
                                    'id_service' => $service->id,
                                    'status_batal' => $item->status_batal

                                ];
                                PesanOtomatis::create($pesan_otomatis);
                            }
                        }
                    }


                    break;


                // Status deal
                case 'deal':
                    $status_action = 'pending_perbaikan';
                    $service->update([
                        "status" => 'pending_perbaikan',
                        "status_transaksi" => 'proses'

                    ]);
                    break;
                // Status pending Perbaikan
                case 'pending_perbaikan':
                    $status_action = 'pending_perbaikan';
                    $service->update([
                        "status" => 'pending_perbaikan',
                        "status_transaksi" => 'proses'

                    ]);
                    break;
                // Status proses perbaikan
                case 'proses_perbaikan':
                    $status_action = 'proses_perbaikan';
                    $service->update([
                        "status" => 'proses_perbaikan',
                        "status_transaksi" => 'proses'

                    ]);
                    break;
                // Status Selesai
                case 'selesai':
                    $status_action = 'selesai';

                    $service->update([
                        "status" => 'selesai',
                        "status_transaksi" => 'proses'

                    ]);



                    //pesan outomatis
                    $pesan_otomatis = pesanCustom::where('status', 'selesai')->get();
                    $id_pesan = '';
                    if (isset($pesan_otomatis)) {
                        foreach ($pesan_otomatis as $item) {

                            // replace autotext
                            $placeholders = [
                                '{ service_id }',
                                '{ nama_pelanggan }',
                                '{ status }',
                                '{ biaya }',
                                '{ uang_muka }',
                                '{ grand_total }',
                                '{ tipe_hp }',
                                '{ kerusakan }',
                                '{ kasir }',
                                '{ nama_toko }'
                            ];

                            $replacements = [
                                $service->no_service,
                                @$service->pelanggan->nama_pelanggan ?? "-",
                                ucwords(str_replace('_', ' ', $service->status)),
                                $service->biaya,
                                $service->uang_bayar,
                                $service->grand_total,
                                $service->merk . ' (' . $service->tipe . ')',
                                $service->kerusakan,
                                @$service->pengguna->nama_pengguna ?? "-",
                                @$profil->nama_toko ?? "-"
                            ];

                            $pesan_custom = str_replace($placeholders, $replacements, $item->isi_pesan);


                            // waktu
                            $datetimes = now()->addHours(7);

                            if ($item->satuan_waktu == 'hari') {
                                $datetimes = $datetimes->addDays($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'bulan') {
                                $datetimes = $datetimes->addMonths($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'tahun') {
                                $datetimes = $datetimes->addYears($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'minggu') {
                                $datetimes = $datetimes->addWeeks($item->jumlah_waktu);
                            }

                            $carbonDate = Carbon::parse($item->jam);
                            $jam = $carbonDate->subHours(1);
                            list($hours, $minutes) = explode(':', $jam->format('H:i'));
                            $datetimes = $datetimes->setTime($hours, $minutes);



                            $id_pesans = [];
                            // pengeriman pesan
                            if ($item->nota == 1) {
                                $sales = Pengguna::where('id', $service->sale_id)->first();
                                $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                                $profil = Profil::first();
                                $data = [
                                    "datas" => $service,
                                    "sales" => $sales,
                                    "pembayaran_service" => $pembayaran_service,
                                    "profil" => $profil
                                ];

                                $pdf = Pdf::loadView('service.nota', $data);
                                $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                                $pdf->setPaper('A4', 'landscape');
                                $pdf->render();
                                $path = public_path('pdf/Nota/' . $fileName);

                                $pdf->save($path);
                                // jalan kan route kirim nota
                                // return $pdf->stream($path, array("Attachment" => false));
                                $pdfUrl = url('pdf/Nota/' . $fileName);

                                // pesan otomatis nota

                                $id_pesan_pdf = Helper::SchaduleNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl, $datetimes->format('Y-m-d H:i'));
                                $id_pesans[] = $id_pesan_pdf;
                                File::delete($path);
                            }

                            // pesan otomatis biasa
                            $id_pesan = Helper::SchaduleMessage($service->pelanggan->telp_pelanggan, $pesan_custom, $datetimes->format('Y-m-d H:i'));
                            $id_pesans[] = $id_pesan;



                            foreach ($id_pesans as $pesan_id) {

                                $pesan_otomatis = [
                                    'id_pesan' => $id_pesan,
                                    'id_service' => $service->id,
                                    'status_batal' => $item->status_batal

                                ];
                                PesanOtomatis::create($pesan_otomatis);
                            }
                        }
                    }



                    break;
                // Status Indent 
                case 'indent':
                    $status_action = 'indent';
                    $service->update([
                        "status" => 'indent',
                        "status_transaksi" => 'proses'

                    ]);

                    break;
                // status Batal


                case 'batal':
                    $status_action = 'batal';

                    $service->update([

                        "status" => 'batal'

                    ]);
                    //pesan outomatis
                    $pesan_otomatis = pesanCustom::where('status', 'batal')->get();
                    $id_pesan = '';
                    if (isset($pesan_otomatis)) {
                        foreach ($pesan_otomatis as $item) {

                            // replace autotext
                            $placeholders = [
                                '{ service_id }',
                                '{ nama_pelanggan }',
                                '{ status }',
                                '{ biaya }',
                                '{ uang_muka }',
                                '{ grand_total }',
                                '{ tipe_hp }',
                                '{ kerusakan }',
                                '{ kasir }',
                                '{ nama_toko }'
                            ];

                            $replacements = [
                                $service->no_service,
                                @$service->pelanggan->nama_pelanggan ?? "-",
                                ucwords(str_replace('_', ' ', $service->status)),
                                $service->biaya,
                                $service->uang_bayar,
                                $service->grand_total,
                                $service->merk . ' (' . $service->tipe . ')',
                                $service->kerusakan,
                                @$service->pengguna->nama_pengguna ?? "-",
                                @$profil->nama_toko ?? "-"
                            ];

                            $pesan_custom = str_replace($placeholders, $replacements, $item->isi_pesan);


                            // waktu
                            $datetimes = now()->addHours(7);

                            if ($item->satuan_waktu == 'hari') {
                                $datetimes = $datetimes->addDays($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'bulan') {
                                $datetimes = $datetimes->addMonths($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'tahun') {
                                $datetimes = $datetimes->addYears($item->jumlah_waktu);
                            } elseif ($item->satuan_waktu == 'minggu') {
                                $datetimes = $datetimes->addWeeks($item->jumlah_waktu);
                            }

                            $carbonDate = Carbon::parse($item->jam);
                            $jam = $carbonDate->subHours(1);
                            list($hours, $minutes) = explode(':', $jam->format('H:i'));
                            $datetimes = $datetimes->setTime($hours, $minutes);



                            $id_pesans = [];
                            // pengeriman pesan
                            if ($item->nota == 1) {
                                $sales = Pengguna::where('id', $service->sale_id)->first();
                                $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                                $profil = Profil::first();
                                $data = [
                                    "datas" => $service,
                                    "sales" => $sales,
                                    "pembayaran_service" => $pembayaran_service,
                                    "profil" => $profil
                                ];

                                $pdf = Pdf::loadView('service.nota', $data);
                                $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                                $pdf->setPaper('A4', 'landscape');
                                $pdf->render();
                                $path = public_path('pdf/Nota/' . $fileName);

                                $pdf->save($path);
                                // jalan kan route kirim nota
                                // return $pdf->stream($path, array("Attachment" => false));
                                $pdfUrl = url('pdf/Nota/' . $fileName);

                                // pesan otomatis nota

                                $id_pesan_pdf = Helper::SchaduleNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl, $datetimes->format('Y-m-d H:i'));
                                $id_pesans[] = $id_pesan_pdf;
                                File::delete($path);
                            }

                            // pesan otomatis biasa
                            $id_pesan = Helper::SchaduleMessage($service->pelanggan->telp_pelanggan, $pesan_custom, $datetimes->format('Y-m-d H:i'));
                            $id_pesans[] = $id_pesan;

                            foreach ($id_pesans as $pesan_id) {

                                $pesan_otomatis = [
                                    'id_pesan' => $pesan_id,
                                    'id_service' => $service->id,
                                    'status_batal' => $item->status_batal

                                ];
                                PesanOtomatis::create($pesan_otomatis);
                            }
                        }
                    }




                    break;
                // Status Tidak Deal
                case 'tidak_deal':
                    $status_action = 'tidak_deal';
                    $service->update([

                        "status" => 'tidak_deal'

                    ]);

                    break;
                // Status Tidak cancel
                case 'cancel':
                    $status_action = 'cancel';

                    $service->update([

                        "status_transaksi" => 'cancel'

                    ]);
                    if (isset($detail)) {
                        foreach ($detail->get() as $o) {
                            $item_old = Item::find($o->item_id);
                            $item_old->update([
                                "stok" => $item_old->stok + $o->jumlah
                            ]);
                        }
                    }


                    break;

                default:
                    return redirect(route("service.index"));
            }
        }


        // kirim pesan
        // pesan Action
        $pesan_action = $pesan_action->where('status', $status_action)->first();
        if (isset($pesan_action)) {

            $placeholders = [
                '{ service_id }',
                '{ nama_pelanggan }',
                '{ status }',
                '{ biaya }',
                '{ uang_muka }',
                '{ grand_total }',
                '{ tipe_hp }',
                '{ kerusakan }',
                '{ kasir }',
                '{ nama_toko }'
            ];

            $replacements = [
                $service->no_service,
                @$service->pelanggan->nama_pelanggan ?? "-",
                ucwords(str_replace('_', ' ', $service->status)),
                $service->biaya,
                $service->uang_bayar,
                $service->grand_total,
                $service->merk . ' (' . $service->tipe . ')',
                $service->kerusakan,
                @$service->pengguna->nama_pengguna ?? "-",
                @$profil->nama_toko ?? "-"
            ];

            $isi_pesan = str_replace($placeholders, $replacements, $pesan_action->isi_pesan);
            if ($pesan_action->nota == 1) {
                $sales = Pengguna::where('id', $service->sale_id)->first();
                $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
                $profil = Profil::first();
                $data = [
                    "datas" => $service,
                    "sales" => $sales,
                    "pembayaran_service" => $pembayaran_service,
                    "profil" => $profil
                ];

                $pdf = Pdf::loadView('service.nota', $data);
                $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                $pdf->setPaper('A4', 'landscape');
                $pdf->render();
                $path = public_path('pdf/Nota/' . $fileName);

                $pdf->save($path);
                // jalan kan route kirim nota
                // return $pdf->stream($path, array("Attachment" => false));
                $pdfUrl = url('pdf/Nota/' . $fileName);

                Helper::sendNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl);
            }


            // mengirim pesan
            Pesan::create([
                "isi_pesan" => $isi_pesan,
                "service_id" => $id,
            ]);
            // $nomor_telepon = $service->pelanggan->telp_pelanggan;
            // $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);


            Helper::sendWa($service->pelanggan->telp_pelanggan, $isi_pesan);
        }


        return redirect(route("service.index"))->with('success', 'status diubah menjadi ' . $request->status);
    }




    public function cancelService(Request $request)
    {
        DB::beginTransaction();
        try {

            $sales = Pengguna::find($request->sale_id);
            $kasir = Pengguna::find($request->kasir_id);
            $profil = Profil::latest()->first();
            $service = Service::with('pelanggan', 'pengguna')->find($request->service_id);
            $detail = DetailService::where('service_id', $request->service_id);
            $service->update([

                "status_transaksi" => 'cancel',
                "kasir_out" => $kasir->nama_pengguna,
                "sales_out" => $sales->nama_pengguna,

            ]);
            if (isset($detail)) {
                foreach ($detail->get() as $o) {
                    $item_old = Item::find($o->item_id);
                    if (isset($item_old)) {
                        $item_old->update([
                            "stok" => $item_old->stok + $o->jumlah
                        ]);
                    }
                }
            }

            // pesan Action
            $pesan_action = PesanAction::where('status', 'cancel')->first();
            if (isset($pesan_action)) {

                $placeholders = [
                    '{ service_id }',
                    '{ nama_pelanggan }',
                    '{ status }',
                    '{ biaya }',
                    '{ uang_muka }',
                    '{ grand_total }',
                    '{ tipe_hp }',
                    '{ kerusakan }',
                    '{ kasir }',
                    '{ nama_toko }'
                ];

                $replacements = [
                    $service->no_service,
                    @$service->pelanggan->nama_pelanggan ?? "-",
                    ucwords(str_replace('_', ' ', $service->status)),
                    $service->biaya,
                    $service->uang_bayar,
                    $service->grand_total,
                    $service->merk . ' (' . $service->tipe . ')',
                    $service->kerusakan,
                    @$service->pengguna->nama_pengguna ?? "-",
                    @$profil->nama_toko ?? "-"
                ];

                $isi_pesan = str_replace($placeholders, $replacements, $pesan_action->isi_pesan);
                if ($pesan_action->nota == 1) {
                    $sales = Pengguna::where('id', $service->sale_id)->first();
                    $pembayaran_service = PembayaranService::where('service_id', $service->id)->latest()->first();
                    
                    $data = [
                        "datas" => $service,
                        "sales" => $sales,
                        "pembayaran_service" => $pembayaran_service,
                        "profil" => $profil
                    ];

                    $pdf = Pdf::loadView('service.nota', $data);
                    $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
                    $pdf->setPaper('A4', 'landscape');
                    $pdf->render();
                    $path = public_path('pdf/Nota/' . $fileName);

                    $pdf->save($path);
                    // jalan kan route kirim nota
                    // return $pdf->stream($path, array("Attachment" => false));
                    $pdfUrl = url('pdf/Nota/' . $fileName);

                    Helper::sendNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl);
                }
            }

            Pesan::create([
                "isi_pesan" => $isi_pesan,
                "service_id" => $request->service_id,
            ]);
            // Remove pesan
            $pesan_otomatis = PesanOtomatis::where('id_service', $service->id)->where('status_batal', 'cancel')->get();


            if (isset($pesan_otomatis)) {
                foreach ($pesan_otomatis as $pesan) {
                    Helper::RemoveMessage($pesan->id_pesan);
                    $pesan->delete();
                }
            }


            DB::commit();

            Helper::sendWa($service->pelanggan->telp_pelanggan, $isi_pesan);
            return redirect()->route('service.index')->with('success', 'Status diubah menjadi cancel');
        } catch (\Throwable $th) {

            DB::rollback();
            Log::error($th);
            return redirect()->route('service.index')->with('error', 'Status gagal diubah menjadi cancel');
        }
    }
    public function guest()
    {
        $data['merk'] = Merk::where('jenis_merk', 2)->get();
        $data['pelanggan'] = Pelanggan::all();
        $data['list_kerusakan'] = $this->list_kerusakan;
        $data['list_kelengkapan'] = $this->list_kelengkapan;






        return response()->view('service.guest', $data);
    }

    public function guest_store(Request $request)
    {
        DB::beginTransaction();
        try {
            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
            if ($findPelanggan) {
                $request->validate([
                    'nama' => 'required',
                    'kontak' => 'required',
                    'kecamatan_pelanggan' => 'required',
                    'alamat' => 'required',
                ]);
                $update = $findPelanggan->update([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0

                ]);
                $pelanggan_id = $findPelanggan->id;
            } else {
                $request->validate([
                    'nama' => 'required',
                    'kontak' => 'required',
                    'kecamatan_pelanggan' => 'required',
                    'alamat' => 'required',
                ]);
                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0
                ]);
                $pelanggan->save();
                $pelanggan_id = $pelanggan->id;
            }




            $request->validate([
                'deskripsi' => 'required',
                'merk' => 'required',
                'imei1' => 'nullable|max:15',
                'imei2' => 'nullable|max:15',
                'deskripsi' => 'required',
                'garansi' => 'required',
                // 'biaya' => 'required',
                // 'uang_bayar' => 'required',
                'color' => 'required',
                'riwayat_servis' => 'required',
                'lama_pemakaian' => 'required',

            ]);
            $pengguna = Pengguna::where('nama_pengguna', 'like', '%Admin%')->first();
            $teknisi = Teknisi::where('nama_teknisi', 'like', '%Umum%')->first();

            $no_nota = "S-" . date("his");



            $kerusakan = (isset($request->kerusakan)) ? implode(",", $request->kerusakan) : " ";
            $kelengkapan = (isset($request->kelengkapan)) ? implode(",", $request->kelengkapan) : " ";

            $service = Service::create([
                'pelanggan_id' => $pelanggan_id,
                'pengguna_id' => $pengguna->id,
                'teknisi_id' => $teknisi->id,
                'sale_id' => auth()->user()->id,
                'no_service' => $no_nota,
                'merk' => $request->merk,
                'tipe' => $request->tipe,
                'imei1' => $request->imei1,
                'imei2' => $request->imei2,
                'kerusakan' => $kerusakan,
                'deskripsi' => $request->deskripsi,
                'kelengkapan' => $kelengkapan,
                'tanggal' => date("Y-m-d"),
                'garansi' => $request->garansi,
                'biaya' => $request->biaya,
                'uang_bayar' => 0,
                'pola' => $request->pola,
                'pin' => $request->pin,
                'color' => $request->color,
                'riwayat_servis' => $request->riwayat_servis,
                'lama_pemakaian' => $request->lama_pemakaian,
                'status_transaksi' => 'proses',
                //status: pending, dikerjakan, selesai, batal, diambil, refund
                'status' => "pending",
                'jam_mulai' => now()->addHours(8)
            ]);


            $service->save();
            DB::commit();

            return response()->view('service.guest_agreement');
        } catch (\Throwable $th) {
            // dd(auth()->user()->id);
            DB::rollback();
            Log::error($th);
            return redirect()->route('service.guest')->with('error', $th->getMessage());
        }
    }

    public function guest_done()
    {
        return redirect()->route('service.guest')->with('success', "Selamat, Proses pendaftaran Servis telah tercatat.Silahkan Tunggu Staf kami menghubungi Anda! ");
    }

    public function create_garansi($id)
    {
        $garansi = 1;
        $list_kerusakan = $this->list_kerusakan;
        $list_kelengkapan = $this->list_kelengkapan;
        $datas = Service::find($id);
        $detail = DetailService::where("service_id", $id)->get();
        $teknisi = Teknisi::all();
        $pelanggan = Pelanggan::all();
        $pengguna = Pengguna::all();
        $sale = Sale::all();
        $merk = Merk::where('jenis_merk', 2)->get();
        $kelengkapan = explode(",", $datas->kelengkapan);
        $kerusakan = explode(",", $datas->kerusakan);

        $data = [
            "datas" => $datas,
            "detail" => $detail,
            "teknisi" => $teknisi,
            "pelanggan" => $pelanggan,
            "pengguna" => $pengguna,
            "sale" => $sale,
            "merk" => $merk,
            "list_kelengkapan" => $list_kelengkapan,
            "list_kerusakan" => $list_kerusakan,
            "kelengkapan" => $kelengkapan,
            "kerusakan" => $kerusakan,
            "garansi" => $garansi
        ];

        // dd($datas->merk);
        // dd($detail);
        return response()->view("service.create_garansi", $data);
    }
    public function notaPage(string $id)
    {
        $data['datas'] = Service::with('detail', 'sales')->find($id);
        $data['sales'] = Pengguna::where('id', $data['datas']->sale_id)->first();
        $data['profil'] = Profil::first();



        $data['pembayaran_service'] = PembayaranService::where('service_id', $id)->latest()->first();


        $pdf = Pdf::loadView('service.nota', $data);
        $fileName = 'Nota-' . $data['datas']->pelanggan->telp_pelanggan . date('his') . '.pdf';
        $pdf->setPaper('A4', 'landscape');
        $pdf->render();
        $path = public_path('pdf/Nota/' . $fileName);

        return $pdf->stream($path, array("Attachment" => false));
    }
    public function nota(string $id)
    {

        $link = url('service/rincian/nota/' . $id);
        $data['datas'] = Service::with('detail', 'sales')->find($id);
        $data['sales'] = Pengguna::where('id', $data['datas']->sale_id)->first();
        $data['profil'] = Profil::first();



        $data['pembayaran_service'] = PembayaranService::where('service_id', $id)->latest()->first();


        $pdf = Pdf::loadView('service.nota', $data);
        $fileName = 'Nota-' . $data['datas']->pelanggan->telp_pelanggan . date('his') . '.pdf';
        $pdf->setPaper('A4', 'landscape');
        $pdf->render();
        $path = public_path('pdf/Nota/' . $fileName);
        $pdf->save($path);



        $pdfUrl = url('pdf/Nota/' . $fileName);
        $pesan = Helper::sendNotaPDF($data['datas']->pelanggan->telp_pelanggan, $pdfUrl);
        File::delete($path);
        if ($pesan) {

            return redirect()->back()->with('success', "Nota Berhasil Terkirim ");
        } else {
            return redirect()->back()->with('error', "Nota Gagal Terkirim ");
        }
    }
    public function cetak(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]);
            }
            // $end->modify('+1 day');

            $interval = new DateInterval('P1D');
            $daterange = new DatePeriod($begin, $interval, $end);
            $periodeTanggals = [];
            foreach ($daterange as $date) {

                $periodeTanggals[] = strftime("%d-%b", strtotime($date->format("Y-m-d")));
            }


            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";
                }
            }
            $datas = new Service;
            $datas = $datas->with('sales');


            // dd($start);



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

                    $datas = $datas->whereDate('created_at', $begin);
                } else {
                    $datas = $datas->created($begin, $end);
                }
            }
            if (isset($request->status)) {
                $datas = $datas->where("status", $request->status);
            }

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

                $datas = $datas->where("status_transaksi", $request->status_transaksi);
            }

            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->orderBy("created_at", "desc")->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 . ',';
                        }
                    }
                }
                $export[] = [
                    $data->no_service,
                    $data->tanggal,
                    $data->tanggal_selesai,
                    $data->pelanggan->nama_pelanggan ?? $data->pelanggan_id,
                    $data->status,
                    $data->status_pembayaran,
                    $data->status_transaksi,
                    $metode_bayar,
                    $data->merk . "(" . $data->tipe . ")",
                    $data->deskripsi,
                    $sparepart,
                    $jenis_spareparts,
                    $akhir_garansi,
                    $data->teknisi->nama_teknisi,
                    $data->pengguna->nama_pengguna,
                    $data->sales->nama_pengguna,
                    $data->kasir_out,
                    $data->sales_out,
                    $data->uang_bayar,
                    "0",
                    $data->biaya,
                    $data->total_modal_sparepart,
                    $data->total_jual_sparepart,
                    $data->total_jual_sparepart - $data->total_modal_sparepart

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

                return Excel::download(new TransaksiServiceExport($export), 'Laporan Transaksi Service.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,
                    "periodeTanggals" => $periodeTanggals,
                    "periode" => $periode,
                    "sorting_order" => $sorting_order,
                ];
                // $pdf = Pdf::loadView('laporan.service.cetak', $data);
                // return $pdf->download('Laporan Service.pdf');
                return response()->view("service.cetak", $data);
            }
        } catch (\Throwable $th) {

            return redirect()->route('laporan.service');
        }
    }
    public function pesanCustom(string $id, string $idPesan)
    {
        $profil = Profil::latest()->first();
        $service = Service::with('pelanggan', 'pengguna')->find($id);
        $pesan = PesanCustom::find($idPesan);


        $placeholders = [
            '{ service_id }',
            '{ nama_pelanggan }',
            '{ status }',
            '{ biaya }',
            '{ uang_muka }',
            '{ grand_total }',
            '{ tipe_hp }',
            '{ kerusakan }',
            '{ kasir }',
            '{ nama_toko }'
        ];

        $replacements = [
            $service->no_service,
            @$service->pelanggan->nama_pelanggan ?? "-",
            ucwords(str_replace('_', ' ', $service->status)),
            $service->biaya,
            $service->uang_bayar,
            $service->grand_total,
            $service->merk . ' (' . $service->tipe . ')',
            $service->kerusakan,
            @$service->pengguna->nama_pengguna ?? "-",
            @$profil->nama_toko ?? "-"
        ];

        $isi_pesan = str_replace($placeholders, $replacements, $pesan->isi_pesan);


        if ($service->follow_up == '') {
            $service->update(['follow_up' => $idPesan . ',']);
        } else {

            $service->update(['follow_up' => $service->follow_up . $idPesan . ',']);
        }


        if ($pesan->nota == 1) {
            $sales = Pengguna::where('id', $service->sale_id)->first();
            $pembayaran_service = PembayaranService::where('service_id', $id)->latest()->first();
            
            $data = [
                "datas" => $service,
                "sales" => $sales,
                "pembayaran_service" => $pembayaran_service,
                "profil" => $profil
            ];

            $pdf = Pdf::loadView('service.nota', $data);
            $fileName = 'NotaPegangan-' . $service->pelanggan->telp_pelanggan . date('Y') . '' . date('m') . '' . date('d') . '' . date('his') . '.pdf';
            $pdf->setPaper('A4', 'landscape');
            $pdf->render();
            $path = public_path('pdf/Nota/' . $fileName);

            $pdf->save($path);
            // jalan kan route kirim nota
            // return $pdf->stream($path, array("Attachment" => false));
            $pdfUrl = url('pdf/Nota/' . $fileName);

            $pesan_pdf = Helper::sendNotaPDF($service->pelanggan->telp_pelanggan, $pdfUrl);
            Pesan::create([
                "isi_pesan" => $isi_pesan,
                "service_id" => $id,
            ]);
            $nomor_telepon = $service->pelanggan->telp_pelanggan;
            $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

            $service->update(['status_pesan' => 1]);
            $kirimPesan = Helper::sendWa($service->pelanggan->telp_pelanggan, $isi_pesan);
            if ($pesan_pdf && $kirimPesan) {
                File::delete($path);
                DB::commit();
                return redirect()->back()->with('success', 'Pesan berhasil terkirim');
            } else {
                return redirect()->back()->with('error', 'Pesan nota Service gagal ditambah');
            }
        } else {
            Pesan::create([
                "isi_pesan" => $isi_pesan,
                "service_id" => $id,
            ]);
            $nomor_telepon = $service->pelanggan->telp_pelanggan;
            $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

            $service->update(['status_pesan' => 1]);

            $kirimPesan = Helper::sendWa($service->pelanggan->telp_pelanggan, $isi_pesan);
            if ($kirimPesan) {
                return redirect(route("service.index"))->with('success', 'pesan berhasil dikirim ');
            } else {
                return redirect(route("service.index"))->with('error', 'pesan Gagal dikirim ');
            }
        }
    }
}

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