<?php
namespace App\Http\Controllers;
use App\Models\Konsultasi;
use App\Models\landing_content_manager;
use App\Models\Merk;
use App\Models\Pelanggan;
use App\Models\PesanKonsultasi;
use App\Models\PesanOtomatis;
use DateTime;
use Illuminate\Http\Request;
use Illuminate\Http\Testing\File;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use PDO;
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);
}
$total_masuk = $datas->count();
$datas = $datas->latest()->paginate(15);
$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();
if(request()->periode){
$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();
}
$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
]);
}
// 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)
{
DB::beginTransaction();
try {
$request->validate([
'nama_pelanggan' => 'required',
'telp_pelanggan' => 'required',
'kota_kecamatan_pelanggan' => 'required',
'alamat_pelanggan' => 'required',
'merk_hp' => 'required',
'tipe_hp' => 'required',
'keluhan' => 'required',
]);
$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();
dd($th->getMessage());
return redirect()->route('home')->with('error', 'Pastikan data yang anda masukan benar!');
}
}
// 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();
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.');
}
$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);
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);
}
$carbonDate = Carbon::parse($item->jam);
$jam = $carbonDate->subHours(1);
list($hours, $minutes) = explode(':', $jam->format('H:i'));
$datetimes = $datetimes->setTime($hours, $minutes);
$nomor_telepon = $konsultasi->telp_pelanggan;
$nomor_whatsapp = "+628" . substr($nomor_telepon, 2);
$id_pesan = \Helper::SchaduleMessage($nomor_whatsapp, $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' => $konsultasi->id,
'status_batal' => $item->status_batal
];
PesanOtomatis::create($pesan_otomatis);
}
}
}
} 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);
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);
}
$carbonDate = Carbon::parse($item->jam);
$jam = $carbonDate->subHours(1);
list($hours, $minutes) = explode(':', $jam->format('H:i'));
$datetimes = $datetimes->setTime($hours, $minutes);
$nomor_telepon = $konsultasi->telp_pelanggan;
$nomor_whatsapp = "+628" . substr($nomor_telepon, 2);
$id_pesan = \Helper::SchaduleMessage($nomor_whatsapp, $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' => $konsultasi->id,
'status_batal' => $item->status_batal
];
PesanOtomatis::create($pesan_otomatis);
}
}
}
$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;
$konsultasi->update($status);
DB::commit();
return response()->view('service.guest', $data);
} elseif ($request->status === "Process") {
$status['status_penyelesaian'] = 'Process';
$pesan_otomatis = pesanKonsultasi::where('status', 'Process')->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);
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);
}
$carbonDate = Carbon::parse($item->jam);
$jam = $carbonDate->subHours(1);
list($hours, $minutes) = explode(':', $jam->format('H:i'));
$datetimes = $datetimes->setTime($hours, $minutes);
$nomor_telepon = $konsultasi->telp_pelanggan;
$nomor_whatsapp = "+628" . substr($nomor_telepon, 2);
$id_pesan = \Helper::SchaduleMessage($nomor_whatsapp, $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' => $konsultasi->id,
'status_batal' => $item->status_batal
];
PesanOtomatis::create($pesan_otomatis);
}
}
}
} else {
DB::rollBack();
return redirect()->route('konsultasi.index')->with('error', 'Status tidak valid.');
}
// Update status
$konsultasi->update($status);
DB::commit();
return redirect()->route('konsultasi.index')->with('success', 'Status berhasil diubah.');
} catch (\Exception $e) {
DB::rollBack();
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();
DB::commit();
return redirect()->route('konsultasi.index')->with('success', 'konsultasi berhasil dihapus');
} catch (\Throwable $th) {
DB::rollback();
return redirect()->route('konsultasi.index')->with('error', 'Item 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 ');
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]