<?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]