Anons79 Mini Shell

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

<?php

namespace App\Http\Controllers;

use App\Helpers\Helper;
use App\Models\Konsultasi;
use App\Models\landing_content_manager;
use App\Models\Merk;
use App\Models\Pelanggan;
use App\Models\Pengguna;
use App\Models\PesanActionGlobal;
use App\Models\PesanDefault;
use App\Models\PesanKonsultasi;
use App\Models\PesanOtomatis;
use App\Models\PesanSchedule;
use App\Models\Profil;
use DateTime;
use Illuminate\Http\Request;
use Illuminate\Http\Testing\File;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class KonsultasiController extends Controller
{
    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)
    {
        $datas = Konsultasi::query();
        $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]);
        }

        if (isset($request->key)) {
            $datas = $datas->where('no_konsultasi', 'like', '%' . $request->key . '%')
                ->orWhere('nama_pelanggan', 'like', '%' . $request->key . '%')
                ->orWhere('telp_pelanggan', 'like', '%' . $request->key . '%');
        }
        if (request()->periode) {
            $datas = $datas->whereBetween('created_at', [$begin->format('Y-m-d') . " 00:00:00", $end->format('Y-m-d') . " 23:59:59"]);
        }
        if (request()->status) {
            $datas = $datas->where('status_penyelesaian', request()->status);
        }


        $datas = $datas->latest()->paginate(15);

        $total_masuk = Konsultasi::count();
        $datas_success = Konsultasi::where('status_penyelesaian', 'Service Masuk')->count();
        $datas_process = Konsultasi::where('status_penyelesaian', 'Process')->count();
        $datas_sudah_direspon = Konsultasi::where('status_penyelesaian', 'Sudah Direspon')->count();
        $datas_tidak_direspon = Konsultasi::where('status_penyelesaian', 'Tidak Respon Lagi')->count();

        $data_booking_service = Konsultasi::where('status_penyelesaian', 'Booking Service')->count();
        if (request()->periode) {
            $total_masuk = Konsultasi::whereBetween('created_at', [$begin->format('Y-m-d') . " 00:00:00", $end->format('Y-m-d') . " 23:59:59"])->count();
            $datas_success = Konsultasi::where('status_penyelesaian', 'Service Masuk')->whereBetween('created_at', [$begin->format('Y-m-d') . " 00:00:00", $end->format('Y-m-d') . " 23:59:59"])->count();
            $datas_process = Konsultasi::where('status_penyelesaian', 'Process')->whereBetween('created_at', [$begin->format('Y-m-d') . " 00:00:00", $end->format('Y-m-d') . " 23:59:59"])->count();
            $datas_sudah_direspon = Konsultasi::where('status_penyelesaian', 'Sudah Direspon')->whereBetween('created_at', [$begin->format('Y-m-d') . " 00:00:00", $end->format('Y-m-d') . " 23:59:59"])->count();
            $data_booking_service = Konsultasi::where('status_penyelesaian', 'Booking Service')
                ->whereBetween('created_at', [$begin->format('Y-m-d') . " 00:00:00", $end->format('Y-m-d') . " 23:59:59"])
                ->count();
        }
        $konsultasis = PesanKonsultasi::get();
        $rasio_masuk = ($datas_success > 0 && $total_masuk > 0) ? ($datas_success / $total_masuk) * 100 : 0;


        return response()->view('Konsultasi.index', [
            'datas' => $datas,
            'datas_process' => $datas_process,
            'datas_success' => $datas_success,
            'datas_sudah_direspon' => $datas_sudah_direspon,
            'request' => $request,
            'pesan_konsultasis' => $konsultasis,
            'periode' => $periode,
            'total_masuk' => $total_masuk,
            'rasio_masuk' => $rasio_masuk,
            'data_booking_service' => $data_booking_service,
            'datas_tidak_direspon' => $datas_tidak_direspon
        ]);
    }
    // public function edit($id)
    // {
    //     $datas = Konsultasi::find($id);
    //     return response()->view('konsultasi.edit', ['data' => $datas]);
    // }
    // public function create()
    // {
    //     return response()->view('kopnsultasi.create');
    // }
    //
    public function store(Request $request)
    {

        $request->validate([
            'nama_pelanggan' => 'required',
            'telp_pelanggan' => 'required',
            'kota_kecamatan_pelanggan' => 'required',
            'alamat_pelanggan' => 'required',
            'merk_hp' => 'required',
            'tipe_hp' => 'required',
            'keluhan' => 'required',
        ]);
        DB::beginTransaction();
        try {

            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->telp_pelanggan)->first();
            if ($findPelanggan) {
                $parts = explode('/', $request->kota_kecamatan_pelanggan);
                $kecamatan = isset($parts[1]) ? trim($parts[1]) : null;

                $findPelanggan->update([
                    'nama_pelanggan' => $request->nama_pelanggan,
                    'telp_pelanggan' => $request->telp_pelanggan,
                    'kecamatan_pelanggan' => $kecamatan,
                    'alamat_pelanggan' => $request->alamat_pelanggan,
                    'pengguna_id' => 0

                ]);
            } else {
                $parts = explode('/', $request->kota_kecamatan_pelanggan);
                $kecamatan = isset($parts[1]) ? trim($parts[1]) : null;

                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama_pelanggan,
                    'telp_pelanggan' => $request->telp_pelanggan,
                    'kecamatan_pelanggan' => $kecamatan,
                    'alamat_pelanggan' => $request->alamat_pelanggan,
                    'pengguna_id' => 0
                ]);
                $pelanggan->save();
            }
            $datas = [
                'no_konsultasi' => "K-" . date("his"),
                'nama_pelanggan' => $request->nama_pelanggan,
                'telp_pelanggan' => $request->telp_pelanggan,
                'kota_kecamatan_pelanggan' => $request->kota_kecamatan_pelanggan,
                'alamat_pelanggan' => $request->alamat_pelanggan,
                'merk_hp' => $request->merk_hp,
                'tipe_hp' => $request->tipe_hp,
                'keluhan' => $request->keluhan,
                'status' => 0,
                'status_penyelesaian' => "Process",
            ];
            $landing = landing_content_manager::first();
            $message = $landing->message;
            $placeholders = [
                '{ nama_pelanggan }',
                '{ no_wa }',
                '{ kota/kecamatan }',
                '{ tipeHp }',
                '{ merk }',
                '{ masalah }',
                '{ no_konsultasi }',

            ];

            $replacements = [
                $request->nama_pelanggan,
                $request->telp_pelanggan,
                $request->kota_kecamatan_pelanggan,
                $request->tipe_hp,
                $request->merk_hp,
                $request->keluhan,
                $datas['no_konsultasi']

            ];

            $pesan_custom = str_replace($placeholders, $replacements, $message);
            $isi_pesan = $pesan_custom;
            Helper::sendWa($request->telp_pelanggan, $isi_pesan);
            Konsultasi::create($datas);
            DB::commit();
            return redirect()->away(
                'https://wa.me/' . '628' . substr(Helper::profileToko()->kontak, 2) . '?text=' .
                    urlencode(
                        "---*Konsultasi HP*---\n" .
                            "Nama : " . $request->nama_pelanggan . "\n" .
                            "No Telp : " . $request->telp_pelanggan . "\n" .
                            "Kota Kecamatan : " . $request->kota_kecamatan_pelanggan . "\n" .
                            "Merk Hp : " . $request->tipe_hp . " (" . $request->merk_hp . ")\n" .
                            "Alamat : " . $request->alamat_pelanggan . "\n" .
                            "Konsultasi : " . $request->keluhan
                    )
            );
        } catch (\Throwable $th) {
            DB::rollback();
            return redirect()->back()->with('error', 'Pastikan data yang anda masukan benar!')->withInput($request->all());
        }
    }
    // public function update(Request $request, $id)
    // {
    //     DB::beginTransaction();
    //     try {
    //         $request->validate([
    //             'photo' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048'
    //         ]);

    //         $konsultasi = Konsultasi::find($id);


    //         if ($request->hasFile('photo')) {


    //             $photo_file = $request->file('photo');
    //             $photo_ekstensi = $photo_file->extension();
    //             $photo_baru = "photo-" . date('ymdhis') . ".$photo_ekstensi";
    //             $photo_file->move(public_path('images/konsultasi'), $photo_baru);
    //             $data['photo'] = $photo_baru;
    //             $photo_lama = $konsultasi->photo;
    //             File::delete(public_path('images/konsultasi') . "/" . $photo_lama);
    //         } else {
    //             return redirect()->route('konsultasi.index')->with('error', "Masukan Foto terlebih dahulu!");
    //         }

    //         $konsultasi->update($data);
    //         DB::commit();
    //         return redirect()->route('konsultasi.index')->with('success', 'Profil berhasil diubah');
    //     } catch (\Throwable $th) {
    //         DB::rollback();
    //         return redirect()->route('konsultasi.index')->with('error', $th->getMessage());
    //     }
    // }

    public function status($id)
    {
        DB::beginTransaction();
        try {
            $konsultasi = Konsultasi::find($id);

            $status = ['status' => 0];
            if ($konsultasi->status = 0) {
                $status['status'] = 1;
            } else {
                $status['status'] = 1;
            }

            $konsultasi->update($status);

            DB::commit();
            return redirect()->route('konsultasi.index')->with('success', 'konsultasi berhasil dihapus');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->route('konsultasi.index')->with('error', 'Item gagal dihapus');
        }
    }
    public function status_penyelesaian(Request $request, string $id)
    {
        DB::beginTransaction();
        try {
            $konsultasi = Konsultasi::find($id);
            // Pastikan $konsultasi ditemukan
            if (!$konsultasi) {
                DB::rollBack();
                return redirect()->route('konsultasi.index')->with('error', 'Data konsultasi tidak ditemukan.');
            }

            $profil = Profil::first();

            $status = [];

            // Periksa status dari request
            if ($request->status === "Sudah Direspon") {
                $status['status_penyelesaian'] = 'Sudah Direspon';
                $pesan_otomatis = PesanKonsultasi::where('status', 'sudah_direspon')->get();
                if (isset($pesan_otomatis)) {
                    foreach ($pesan_otomatis as $item) {

                        // replace autotext
                        $placeholders = [
                            '{ nama_pelanggan }',
                        ];

                        $replacements = [
                            $konsultasi->nama_pelanggan
                        ];

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


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

                        if ($item->satuan_waktu == 'hari') {
                            $datetimes = $datetimes->addDays($item->jumlah_waktu);
                        } elseif ($item->satuan_waktu == 'minggu') {
                            $datetimes = $datetimes->addWeekdays($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);
                        }

                        $carbonDate = Carbon::parse($item->jam);
                        $jam = $carbonDate->subHours(1);
                        list($hours, $minutes) = explode(':', $jam->format('H:i'));
                        $datetimes = $datetimes->setTime($hours, $minutes)->format('Y-m-d H:i');
                        $nomor_telepon = $konsultasi->telp_pelanggan;
                        $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

                        $id_pesan = Helper::SchaduleMessage($nomor_whatsapp, $pesan_custom, $datetimes);
                        $id_pesans[] = $id_pesan;
                        foreach ($id_pesans as $pesan_id) {

                            if ($pesan_id && $item->status_batal != null) {
                                PesanSchedule::create([
                                    'pesan_id' => $pesan_id,
                                    'model_name' => Konsultasi::class,
                                    'model_id' => $konsultasi->id,
                                    'status_batal' => $item->status_batal
                                ]);
                            }
                        }
                    }
                }
            } elseif ($request->status === "Service Masuk") {
                $status['status_penyelesaian'] = 'Service Masuk';
                $pesan_otomatis = PesanKonsultasi::where('status', 'service_masuk')->get();
                if (isset($pesan_otomatis)) {
                    foreach ($pesan_otomatis as $item) {

                        // replace autotext
                        $placeholders = [
                            '{ nama_pelanggan }',
                        ];

                        $replacements = [
                            $konsultasi->nama_pelanggan
                        ];

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


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

                        if ($item->satuan_waktu == 'hari') {
                            $datetimes = $datetimes->addDays($item->jumlah_waktu);
                        } elseif ($item->satuan_waktu == 'minggu') {
                            $datetimes = $datetimes->addWeekdays($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);
                        }

                        $carbonDate = Carbon::parse($item->jam);
                        $jam = $carbonDate->subHours(1);
                        list($hours, $minutes) = explode(':', $jam->format('H:i'));
                        $datetimes = $datetimes->setTime($hours, $minutes)->format('Y-m-d H:i');
                        $nomor_telepon = $konsultasi->telp_pelanggan;
                        $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

                        $id_pesan = Helper::SchaduleMessage($nomor_whatsapp, $pesan_custom, $datetimes);
                        $id_pesans[] = $id_pesan;



                        foreach ($id_pesans as $pesan_id) {


                            if ($pesan_id && $item->status_batal != null) {
                                PesanSchedule::create([
                                    'pesan_id' => $pesan_id,
                                    'model_name' => Konsultasi::class,
                                    'model_id' => $konsultasi->id,
                                    'status_batal' => $item->status_batal
                                ]);
                            }
                        }
                    }
                }

                $parts = explode('/', $konsultasi->kota_kecamatan_pelanggan);
                // $kecamatan_pelanggan = isset($parts[1]) ? trim($parts[1]) : null;
                $merk = Merk::where('jenis_merk', 2)->get();


                $data = [
                    'data_konsultasi' => $konsultasi,
                    'merk' => $merk
                ];
                $data['list_kerusakan'] = $this->list_kerusakan;
                $data['list_kelengkapan'] = $this->list_kelengkapan;
                $data['tokos'] = auth()->user()->role->tokos;

                $konsultasi->update($status);

                $batalkanPesans = PesanSchedule::where('model_name', Konsultasi::class)
                    ->where('model_id', $konsultasi->id)
                    ->where('status_batal', 'service_masuk')
                    ->get();

                foreach ($batalkanPesans as $pesan) {
                    $r = Helper::RemoveMessage($pesan->pesan_id);
                    Log::info($r);
                    $pesan->delete();
                }


                DB::commit();
                return response()->view('service.guest', $data);
            } elseif ($request->status === "Process") {
                $status['status_penyelesaian'] = 'Process';
                $pesan_otomatis = PesanKonsultasi::where('status', 'proses')->get();
                if (isset($pesan_otomatis)) {
                    foreach ($pesan_otomatis as $item) {

                        // replace autotext
                        $placeholders = [
                            '{ nama_pelanggan }',
                        ];

                        $replacements = [
                            $konsultasi->nama_pelanggan
                        ];

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


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

                        if ($item->satuan_waktu == 'hari') {
                            $datetimes = $datetimes->addDays($item->jumlah_waktu);
                        } elseif ($item->satuan_waktu == 'minggu') {
                            $datetimes = $datetimes->addWeekdays($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);
                        }

                        $carbonDate = Carbon::parse($item->jam);
                        $jam = $carbonDate->subHours(1);
                        list($hours, $minutes) = explode(':', $jam->format('H:i'));
                        $datetimes = $datetimes->setTime($hours, $minutes)->format('Y-m-d H:i');
                        $nomor_telepon = $konsultasi->telp_pelanggan;
                        $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

                        $id_pesan = Helper::SchaduleMessage($nomor_whatsapp, $pesan_custom, $datetimes);
                        $id_pesans[] = $id_pesan;



                        foreach ($id_pesans as $pesan_id) {


                            if ($pesan_id && $item->status_batal != null) {
                                PesanSchedule::create([
                                    'pesan_id' => $pesan_id,
                                    'model_name' => Konsultasi::class,
                                    'model_id' => $konsultasi->id,
                                    'status_batal' => $item->status_batal
                                ]);
                            }
                        }
                    }
                }
            } elseif ($request->status === "Tidak Respon Lagi") {
                $status['status_penyelesaian'] = 'Tidak Respon Lagi';
                $pesan_otomatis = PesanKonsultasi::where('status', 'tidak_respon_lagi')->get();
                if (isset($pesan_otomatis)) {
                    foreach ($pesan_otomatis as $item) {

                        // replace autotext
                        $placeholders = [
                            '{ nama_pelanggan }',
                        ];

                        $replacements = [
                            $konsultasi->nama_pelanggan
                        ];

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


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

                        if ($item->satuan_waktu == 'hari') {
                            $datetimes = $datetimes->addDays($item->jumlah_waktu);
                        } elseif ($item->satuan_waktu == 'minggu') {
                            $datetimes = $datetimes->addWeekdays($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);
                        }

                        $carbonDate = Carbon::parse($item->jam);
                        $jam = $carbonDate->subHours(1);
                        list($hours, $minutes) = explode(':', $jam->format('H:i'));
                        $datetimes = $datetimes->setTime($hours, $minutes)->format('Y-m-d H:i');
                        $nomor_telepon = $konsultasi->telp_pelanggan;
                        $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

                        $id_pesan = Helper::SchaduleMessage($nomor_whatsapp, $pesan_custom, $datetimes);
                        $id_pesans[] = $id_pesan;



                        foreach ($id_pesans as $pesan_id) {
                            if ($pesan_id && $item->status_batal != null) {
                                PesanSchedule::create([
                                    'pesan_id' => $pesan_id,
                                    'model_name' => Konsultasi::class,
                                    'model_id' => $konsultasi->id,
                                    'status_batal' => $item->status_batal
                                ]);
                            }
                        }
                    }
                }

                $batalkanPesans = PesanSchedule::where('model_name', Konsultasi::class)
                    ->where('model_id', $konsultasi->id)
                    ->where('status_batal', 'tidak_respon_lagi')
                    ->get();

                foreach ($batalkanPesans as $pesan) {
                    $r = Helper::RemoveMessage($pesan->pesan_id);
                    Log::info($r);
                    $pesan->delete();
                }
            } else {
                DB::rollBack();
                return redirect()->route('konsultasi.index')->with('error', 'Status tidak valid.');
            }

            // Update status
            $konsultasi->update($status);

            if ($konsultasi->tanggal_jam_booking != "" && $konsultasi->tanggal_jam_booking != null) {
                $pesan_actions = PesanActionGlobal::where('model_name', Konsultasi::class)->where('status', $status['status_penyelesaian'])->get();
                foreach ($pesan_actions as $pesan_action) {
                    $placeholders = [
                        '{ no_konsultasi }',
                        '{ nama_pelanggan }',
                        '{ merek_hp }',
                        '{ tipe_hp }',
                        '{ keluhan }',
                        '{ tanggal_booking }',
                        '{ jam_booking }',
                        '{ nama_toko }'
                    ];

                    $tanggal_booking = explode(' ', $konsultasi->tanggal_jam_booking)[0];
                    $jam_booking = explode(' ', $konsultasi->tanggal_jam_booking)[1];


                    $replacements = [
                        $konsultasi->no_konsultasi,
                        $konsultasi->nama_pelanggan ?? "-",
                        $konsultasi->merk_hp,
                        $konsultasi->tipe_hp,
                        $konsultasi->keluhan,
                        $tanggal_booking,
                        $jam_booking,
                        @$profil->nama_toko ?? "-"
                    ];

                    $isi_pesan = str_replace($placeholders, $replacements, $pesan_action->isi_pesan);
                    Helper::sendWa($request->telp_pelanggan, $isi_pesan);
                }
            }



            Helper::addUserLog('Mengubah status prospek/konsultasi : ' . $konsultasi->no_konsultasi . ', ' . $status['status_penyelesaian'], $konsultasi->toArray());

            DB::commit();
            return redirect()->route('konsultasi.index')->with('success', 'Status berhasil diubah.');
        } catch (\Exception $e) {
            DB::rollBack();
            Log::error($e);
            return redirect()->route('konsultasi.index')->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
        }
    }
    public function destroy(string $id)
    {
        DB::beginTransaction();
        try {
            $konsultasi = Konsultasi::find($id);
            $konsultasi->delete();
            $scheduleLama = PesanSchedule::where('model_name', Konsultasi::class)->where('model_id', $konsultasi->id)->get();
            foreach ($scheduleLama as $old) {
                if ($old->pesan_id) {
                    $r = Helper::RemoveMessage($old->pesan_id);
                    Log::info($r);
                    $old->delete();
                }
            }
            Helper::addUserLog('Menghapus data prospek/konsultasi : ' . $konsultasi->no_konsultasi, $konsultasi->toArray());
            DB::commit();
            return redirect()->route('konsultasi.index')->with('success', 'konsultasi berhasil dihapus');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->route('konsultasi.index')->with('error', 'Data gagal dihapus');
        }
    }


    public function PesanKonsultasi(string $id, string $idPesan)
    {
        $konsultasi = Konsultasi::find($id);
        $pesan = PesanKonsultasi::find($idPesan);


        $placeholders = [
            '{ nama_pelanggan }',
            '{ kerusakan }',
        ];

        $replacements = [
            $konsultasi->nama_pelanggan,
            $konsultasi->kerusakan,
        ];

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


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

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



        $nomor_telepon = $konsultasi->telp_pelanggan;
        $nomor_whatsapp = "+628" . substr($nomor_telepon, 2);

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

    public function getKonsultasiById(string $id)
    {
        $konsultasi = Konsultasi::find($id);
        if ($konsultasi) {
            return response()->json($konsultasi);
        } else {
            return response()->json(['message' => 'Konsultasi not found'], 404);
        }
    }

    public function updateTanggalJamBooking(Request $request, string $id)
    {
        DB::beginTransaction();
        try {
            $profil = Profil::first();
            $konsultasi = Konsultasi::find($id);
            if (!$konsultasi) {
                DB::rollBack();
                return redirect()->route('konsultasi.index')->with('error', 'Konsultasi tidak ditemukan.');
            }

            $request->validate([
                'tanggal_booking' => 'required|date',
                'jam_booking' => 'required',
            ]);

            $konsultasi->update([
                'status_penyelesaian' => 'Booking Service',
                'tanggal_jam_booking' => Carbon::parse($request->tanggal_booking . ' ' . $request->jam_booking)->format('Y-m-d H:i:s')
            ]);


            if($konsultasi->tanggal_jam_booking != null && $konsultasi->tanggal_jam_booking != ""){
                $pesan_notifs = PesanDefault::where('menu', 'form_konsultasi')->where('aksi', 'notif')->get();
                foreach ($pesan_notifs as $pesan_notif) {
                    $placeholders = [
                        '{ no_konsultasi }',
                        '{ nama_pelanggan }',
                        '{ merek_hp }',
                        '{ tipe_hp }',
                        '{ keluhan }',
                        '{ tanggal_booking }',
                        '{ jam_booking }',
                        '{ nama_toko }'
                    ];

                    $tanggal_booking = explode(' ', $konsultasi->tanggal_jam_booking)[0];
                    $jam_booking = explode(' ', $konsultasi->tanggal_jam_booking)[1];


                    $replacements = [
                        $konsultasi->no_konsultasi,
                        $konsultasi->nama_pelanggan ?? "-",
                        $konsultasi->merk_hp,
                        $konsultasi->tipe_hp,
                        $konsultasi->keluhan,
                        $tanggal_booking,
                        $jam_booking,
                        @$profil->nama_toko ?? "-"
                    ];

                    $isi_pesan = str_replace($placeholders, $replacements, $pesan_notif->isi);
                    $id = Helper::sendWa($konsultasi->telp_pelanggan, $isi_pesan);
                    Log::info($id);
                }

                $scheduleLama = PesanSchedule::where('model_name', Konsultasi::class)->where('model_id', $konsultasi->id)->get();
                foreach ($scheduleLama as $old) {
                    if ($old->pesan_id) {
                        $r = Helper::RemoveMessage($old->pesan_id);
                        Log::info($r);
                        $old->delete();
                    }
                }

                $pesan_schedules = PesanDefault::where('menu', 'form_konsultasi')->where('aksi', 'schedule')->get();

                foreach ($pesan_schedules as $pesan_schedule) {
                    $placeholders = [
                        '{ no_konsultasi }',
                        '{ nama_pelanggan }',
                        '{ merek_hp }',
                        '{ tipe_hp }',
                        '{ keluhan }',
                        '{ tanggal_booking }',
                        '{ jam_booking }',
                        '{ nama_toko }'
                    ];

                    $tanggal_booking = explode(' ', $konsultasi->tanggal_jam_booking)[0];
                    $jam_booking = explode(' ', $konsultasi->tanggal_jam_booking)[1];


                    $replacements = [
                        $konsultasi->no_konsultasi,
                        $konsultasi->nama_pelanggan ?? "-",
                        $konsultasi->merk_hp,
                        $konsultasi->tipe_hp,
                        $konsultasi->keluhan,
                        $tanggal_booking,
                        $jam_booking,
                        @$profil->nama_toko ?? "-"
                    ];

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

                    //$datetimes = now()->addHours(7);
                    $datetimes = Carbon::parse($konsultasi->tanggal_jam_booking);
                    if ($pesan_schedule->schedule_in == 'hari') {
                        $datetimes = $datetimes->addDays($pesan_schedule->schedule_time);
                    } elseif ($pesan_schedule->schedule_in == 'minggu') {
                        $datetimes = $datetimes->addWeekdays($pesan_schedule->schedule_time);
                    } elseif ($pesan_schedule->schedule_in == 'bulan') {
                        $datetimes = $datetimes->addMonths($pesan_schedule->schedule_time);
                    }




                    $datetimes = $datetimes->format('Y-m-d H:i');
                    if (env("APP_ENV") != "production") {
                        Log::info([
                            "id" => $pesan_schedule->id,
                            "schedule_in" => $pesan_schedule->schedule_in,
                            "schedule_time" => $pesan_schedule->schedule_time,
                        ]);
                        Log::info($datetimes);
                    }
                    $id = Helper::SchaduleMessage($konsultasi->telp_pelanggan, $isi_pesan, $datetimes);
                    if (env("APP_ENV") != "production") {
                        Log::info($id);
                    }
                    if ($id) {

                        PesanSchedule::create([
                            'pesan_id' => $id,
                            'model_name' => Konsultasi::class,
                            'model_id' => $konsultasi->id,
                            'status_batal' => $pesan_schedule->status_batal ?? "-"
                        ]);
                    }
                }
            }
            Helper::addUserLog('Mengubah tanggal booking prospek/konsultasi : ' . $konsultasi->no_konsultasi, $konsultasi->toArray());
            DB::commit();

            //return json
            return response()->json(['message' => 'Tanggal dan jam booking berhasil diperbarui.', 'konsultasi' => $konsultasi], 200);
        } catch (\Exception $e) {
            DB::rollBack();
            Log::error($e);
            return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
        }
    }

    public function guest()
    {
        $merk = Merk::where('jenis_merk', 2)->get();
        return view('Konsultasi.guest', compact('merk'));
    }

    public function guestStore(Request $request)
    {
        $request->validate([
            'nama_pelanggan' => 'required',
            'telp_pelanggan' => 'required',
            'kota_kecamatan_pelanggan' => 'required',
            'alamat_pelanggan' => 'required',
            'merk_hp' => 'required',
            'tipe_hp' => 'required',
            'keluhan' => 'required',
            'tanggal_booking' => 'nullable|date',
        ]);
        DB::beginTransaction();
        try {

            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->telp_pelanggan)->first();
            if ($findPelanggan) {
                $parts = explode('/', $request->kota_kecamatan_pelanggan);
                $kecamatan = isset($parts[1]) ? trim($parts[1]) : null;

                $findPelanggan->update([
                    'nama_pelanggan' => $request->nama_pelanggan,
                    'telp_pelanggan' => $request->telp_pelanggan,
                    'kecamatan_pelanggan' => $kecamatan,
                    'alamat_pelanggan' => $request->alamat_pelanggan,
                    'pengguna_id' => 0

                ]);
            } else {
                $parts = explode('/', $request->kota_kecamatan_pelanggan);
                $kecamatan = isset($parts[1]) ? trim($parts[1]) : null;

                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama_pelanggan,
                    'telp_pelanggan' => $request->telp_pelanggan,
                    'kecamatan_pelanggan' => $kecamatan,
                    'alamat_pelanggan' => $request->alamat_pelanggan,
                    'pengguna_id' => 0
                ]);
                $pelanggan->save();
            }
            $datas = [
                'no_konsultasi' => "K-" . date("his"),
                'nama_pelanggan' => $request->nama_pelanggan,
                'telp_pelanggan' => $request->telp_pelanggan,
                'kota_kecamatan_pelanggan' => $request->kota_kecamatan_pelanggan,
                'alamat_pelanggan' => $request->alamat_pelanggan,
                'merk_hp' => $request->merk_hp,
                'tipe_hp' => $request->tipe_hp,
                'keluhan' => $request->keluhan,
                'status' => 0,
                'status_penyelesaian' => 'Booking Service',
                'tanggal_jam_booking' => $request->tanggal_booking ? Carbon::parse($request->tanggal_booking . ' ' . $request->jam_booking)->format('Y-m-d H:i:s') : null
            ];

            $data = Konsultasi::create($datas);
            Helper::addUserLog('Menambah booking service : ' . $data->no_konsultasi, $data->toArray());
            DB::commit();
            return redirect()->route('konsultasi.index')->with('success', 'Konsultasi & Booking Service berhasil dibuat.');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->back()->with('error', 'Ops! Terjadi kesalahan saat membuat konsultasi. Pastikan data yang anda masukan benar!')->withInput($request->all());
        }
    }

    public function editPesanDefault()
    {
        $data = PesanDefault::firstOrCreate(['menu' => 'form_konsultasi', 'aksi' => 'notif']);
        return view('Konsultasi.pesan-default', compact('data'));
    }

    public function editPesanDefaultAction(Request $request)
    {
        DB::beginTransaction();
        try {
            $data = PesanDefault::updateOrCreate(['menu' => 'form_konsultasi', 'aksi' => 'notif'], [
                'judul' => $request->judul,
                'isi' => $request->isi
            ]);

            DB::commit();

            return redirect()->route('konsultasi.pesan-default')->with('success', 'Pesan berhasil diubah');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            return redirect()->back()->withInput($request->all())->with('error', 'Pesan gagal diubah');
        }
    }

    public function pesanDefaultSchedule()
    {
        $datas = PesanDefault::where('menu', 'form_konsultasi')->where('aksi', 'schedule')->orderBy('created_at', 'DESC')->paginate(10);
        return view('Konsultasi.pesan-default-schedule.index', compact('datas'));
    }

    public function pesanDefaultScheduleCreate()
    {
        return view('Konsultasi.pesan-default-schedule.create');
    }

    public function pesanDefaultScheduleStore(Request $request)
    {

        DB::beginTransaction();
        try {
            $data = PesanDefault::create([
                'menu' => 'form_konsultasi',
                'aksi' => 'schedule',
                'judul' => $request->judul,
                'isi' => $request->isi,
                'schedule_time' => $request->schedule_time,
                'jam' => $request->jam,
                'schedule_in' => $request->schedule_in,
                'status_batal' => $request->status_batal
            ]);

            DB::commit();


            return redirect()->route('konsultasi.pesan-default-schedule.index')->with('success', 'Pesan berhasil ditambah');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            return redirect()->back()->withInput($request->all())->with('error', 'Pesan gagal ditambah');
        }
    }

    public function pesanDefaultScheduleEdit($id)
    {
        $data = PesanDefault::findOrFail($id);
        return view('Konsultasi.pesan-default-schedule.edit', compact('data'));
    }

    public function pesanDefaultScheduleUpdate(Request $request, $id)
    {

        DB::beginTransaction();
        try {
            $data = PesanDefault::findOrFail($id)->update([
                'menu' => 'form_konsultasi',
                'aksi' => 'schedule',
                'judul' => $request->judul,
                'isi' => $request->isi,
                'schedule_time' => $request->schedule_time,
                'jam' => $request->jam,
                'schedule_in' => $request->schedule_in,
                'status_batal' => $request->status_batal
            ]);

            DB::commit();


            return redirect()->route('konsultasi.pesan-default-schedule.index')->with('success', 'Pesan berhasil diubah');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->back()->withInput($request->all())->with('error', 'Pesan gagal diubah');
        }
    }

    public function pesanDefaultScheduleDelete($id)
    {

        DB::beginTransaction();
        try {
            $data = PesanDefault::findOrFail($id)->delete();

            DB::commit();


            return redirect()->route('konsultasi.pesan-default-schedule.index')->with('error', 'Pesan berhasil dihapus');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            return redirect()->back()->with('error', 'Pesan gagal dihapus');
        }
    }
}

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