<?php
namespace App\Http\Controllers;
use App\Exports\TransaksiServiceExport;
use App\Exports\TransaksiServicesExport;
use App\Helpers\Helper;
use App\Models\Toko;
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\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"],
["kotak", "Kotak"],
["tidak_ada", "Tidak Ada"]
];
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')->filterToko();
if (!isset($request->sorting_order)) {
$sorting_order = "asc";
}
if (isset($request->sorting_order)) {
if ($request->sorting_order == "desc") {
$sorting_order = "asc";
} else if ($request->sorting_order == "asc") {
$sorting_order = "desc";
}
}
if (isset($begin) && isset($end)) {
$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)
->filterToko()
->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)
->filterToko()
->count();
$charts_perjam['servicePerjam'][] = $service_jam;
$charts_perjam['servicePerjam_keluar'][] = $service_jam_keluar;
}
$totalTransaksi = Service::tanggal($begin, $end)->filterToko()->count();
$totalProses = Service::tanggal($begin, $end)->where('status_transaksi', 'proses')->filterToko()->count();
$totalSuccess = Service::tanggal($begin, $end)->where('status_transaksi', 'success')->filterToko()->count();
$totalCancel = Service::tanggal($begin, $end)->where('status_transaksi', 'cancel')->filterToko()->count();
// omset Transfer
$pengguna = Pengguna::all();
$belum_dihubungi = Service::where('status_pesan', null)->created($begin, $end)->filterToko()->count();
// status_transaksi
$proses = Service::where('status_transaksi', 'proses')->tanggal($begin, $end)->filterToko()->count();
$success = Service::where('status_transaksi', 'success')->tanggal($begin, $end)->filterToko()->count();
$cancel = Service::where('status_transaksi', 'cancel')->tanggal($begin, $end)->filterToko()->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;
$pelanggan = Pelanggan::all();
$merk = Merk::where('jenis_merk', 2)->get();
$sale = Sale::all();
$pengguna = Pengguna::all();
$tokos = auth()->user()->role->tokos;
$data = [
"pelanggan" => $pelanggan,
"pengguna" => $pengguna,
"sale" => $sale,
"merk" => $merk,
"list_kelengkapan" => $list_kelengkapan,
"list_kerusakan" => $list_kerusakan,
"tokos" => $tokos,
];
return response()->view("service.create", $data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'toko_id' => 'required',
'nama' => 'required',
'kontak' => 'required|numeric',
'kecamatan_pelanggan' => 'required',
'alamat' => 'required',
//detail gadget
'merk' => 'required',
'tipe' => 'required',
'imei1' => 'nullable|max:15',
'imei2' => 'nullable|max:15',
'lama_pemakaian' => 'required',
'riwayat_servis' => 'required',
'kelengkapan_unit' => 'required',
'kelengkapan' => 'required|array',
'fungsi_tombol' => 'required',
'arus_charger' => 'required',
'kondisi_layar' => 'required',
'garansi' => 'required',
'kerusakan' => 'required|array',
"bukti_transfer_dp" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
]);
DB::beginTransaction();
try {
$findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
if ($findPelanggan) {
$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 {
$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;
}
$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,
'kelengkapan_unit' => $request->kelengkapan_unit,
'fungsi_tombol' => $request->fungsi_tombol,
'arus_charger' => $request->arus_charger,
'kondisi_layar' => $request->kondisi_layar,
'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();
$createService->tokos()->sync($request->toko_id);
if (isset($request->jumlah)) {
for ($i = 0; $i < count($request->jumlah); $i++) {
$item = Item::with('stok_item_tokos')->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],
]);
$item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $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);
}
}
Helper::addUserLog('Menambah Service Untuk Pelanggan ' . $createService->pelanggan->nama_pelanggan, $createService->toArray());
DB::commit();
return redirect(route("service.index"))->with('success', 'Service berhasil ditambah');
} catch (\Throwable $th) {
DB::rollback();
return redirect()->back()->with('error', $th->getMessage())->withInput($request->all());
}
}
/**
* Display the specified resource.
*/
public function show(string $id): Response
{
$pengguna = Pengguna::all();
$datas = Service::findOrFail($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();
$sale = Sale::all();
$pelanggan = Pelanggan::all();
$pengguna = Pengguna::all();
$merk = Merk::where('jenis_merk', 2)->get();
$kelengkapan = explode(",", $datas->kelengkapan);
$kerusakan = explode(",", $datas->kerusakan);
$tokos = auth()->user()->role->tokos;
$data = [
"datas" => $datas,
"detail" => $detail,
"sparepart_luar" => $sparepart_luar,
"sale" => $sale,
"pelanggan" => $pelanggan,
"merk" => $merk,
'pengguna' => $pengguna,
"list_kelengkapan" => $list_kelengkapan,
"list_kerusakan" => $list_kerusakan,
"kelengkapan" => $kelengkapan,
"kerusakan" => $kerusakan,
"tokos" => $tokos,
];
// 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
{
$request->validate([
'toko_id' => 'required',
"bukti_transfer_dp" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
]);
$data = Service::findOrFail($id);
// foreach($old_detail as $od)
// {
// $old_sparepart = Sparepart::find($od->sparepart_id);
// $old_sparepart->update([
// "stok" => $old_sparepart + $od->jumlah,
// ]);
// }
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 {
$pelanggan = Pelanggan::create([
'nama_pelanggan' => $request->nama,
'telp_pelanggan' => $request->kontak,
'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
'alamat_pelanggan' => $request->alamat,
'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) : " ";
$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,
'kelengkapan_unit' => $request->kelengkapan_unit,
'fungsi_tombol' => $request->fungsi_tombol,
'arus_charger' => $request->arus_charger,
'kondisi_layar' => $request->kondisi_layar,
'tanggal' => $request->tanggal,
'garansi' => $request->garansi,
'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);
$data->tokos()->sync($request->toko_id);
$old_detail = DetailService::where("service_id", $id);
foreach ($old_detail->get() as $o) {
$item_old = Item::with('stok_item_tokos')->find($o->item_id);
if (isset($item_old)) {
$item_old->update([
"stok" => $item_old->stok + $o->jumlah
]);
$item_old->stok_item_tokos()->updateOrCreate(['toko_id' => $request->toko_id],[
"stok" => (@$item_old->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) + $o->jumlah,
]);
}
}
$old_detail->Delete();
if (isset($request->jumlah)) {
for ($i = 0; $i < count($request->jumlah); $i++) {
$item = Item::with('stok_item_tokos')->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],
]);
$item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
"stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $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
{
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->tokos()->attach($data->tokos->pluck('id')->toArray());
// $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::with('tokos')->find($id);
$detail = DetailService::where('service_id', $id);
if ($data->status_transaksi != 'cancel') {
if (isset($detail)) {
foreach ($detail->get() as $o) {
$item_old = Item::with('stok_item_tokos')->find($o->item_id);
if (isset($item_old)) {
$item_old->update([
"stok" => $item_old->stok + $o->jumlah
]);
$toko_id = @$data->tokos->first()->id ?? 0;
if($toko_id){
$item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$toko_id], [
"stok" => (@$item_old->stok_item_tokos->where("toko_id", $toko_id)->first()->stok ?? 0) + $o->jumlah,
]);
}
}
}
}
$data->delete();
} else {
$data->delete();
$detail->delete();
}
$data->tokos()->detach();;
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;
$data['tokos'] = auth()->user()->role->tokos;
return response()->view('service.guest', $data);
}
public function guest_store(Request $request)
{
$request->validate([
'toko_id' => 'required',
'nama' => 'required',
'kontak' => 'required|numeric',
'kecamatan_pelanggan' => 'required',
'alamat' => 'required',
//detail gadget
'merk' => 'required',
'tipe' => 'required',
'imei1' => 'nullable|max:15',
'imei2' => 'nullable|max:15',
'lama_pemakaian' => 'required',
'riwayat_servis' => 'required',
'kelengkapan_unit' => 'required',
'kelengkapan' => 'required|array',
'fungsi_tombol' => 'required',
'arus_charger' => 'required',
'kondisi_layar' => 'required',
'garansi' => 'required',
'kerusakan' => 'required|array',
]);
DB::beginTransaction();
try {
$findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
if ($findPelanggan) {
$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 {
$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;
}
$pengguna = Pengguna::where('nama_pengguna', 'like', '%Admin%')->first();
$teknisi = Pengguna::where('nama_pengguna', '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,
'kelengkapan_unit' => $request->kelengkapan_unit,
'fungsi_tombol' => $request->fungsi_tombol,
'arus_charger' => $request->arus_charger,
'kondisi_layar' => $request->kondisi_layar,
'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();
$service->tokos()->attach($request->toko_id);
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();
$pelanggan = Pelanggan::all();
$pengguna = Pengguna::all();
$sale = Sale::all();
$merk = Merk::where('jenis_merk', 2)->get();
$kelengkapan = explode(",", $datas->kelengkapan);
$kerusakan = explode(",", $datas->kerusakan);
$tokos = auth()->user()->role->tokos;
$data = [
"datas" => $datas,
"detail" => $detail,
"pelanggan" => $pelanggan,
"pengguna" => $pengguna,
"sale" => $sale,
"merk" => $merk,
"list_kelengkapan" => $list_kelengkapan,
"list_kerusakan" => $list_kerusakan,
"kelengkapan" => $kelengkapan,
"kerusakan" => $kerusakan,
"garansi" => $garansi,
"tokos" => $tokos
];
// 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_pengguna,
$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]