Compare commits
No commits in common. "production" and "test" have entirely different histories.
production
...
test
@ -4,28 +4,22 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use App\Mail\NotifikasiCustomer;
|
use App\Mail\NotifikasiCustomer;
|
||||||
use App\Mail\NotifikasiPembayaran;
|
use App\Mail\NotifikasiPembayaran;
|
||||||
use App\Models\JadwalKonsul;
|
|
||||||
use App\Models\Karbohidrat;
|
use App\Models\Karbohidrat;
|
||||||
use App\Models\Karyawan;
|
|
||||||
use App\Models\MasterMcu;
|
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
use App\Models\OrderDetail;
|
use App\Models\OrderDetail;
|
||||||
use App\Models\UnitInstalasi;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonPeriod;
|
use Carbon\CarbonPeriod;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Support\Facades\Validator;
|
|
||||||
|
|
||||||
class CustomerController extends Controller
|
class CustomerController extends Controller
|
||||||
{
|
{
|
||||||
public function index(){
|
public function index(){
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Halaman Utama',
|
'title' => 'Halaman Utama'
|
||||||
'mcu' => false,
|
|
||||||
];
|
];
|
||||||
return view('guest.index', $payload);
|
return view('guest.index', $payload);
|
||||||
}
|
}
|
||||||
@ -34,14 +28,11 @@ class CustomerController extends Controller
|
|||||||
public function dataOrder(){
|
public function dataOrder(){
|
||||||
$search = request('search');
|
$search = request('search');
|
||||||
$jenis_menu = request('jenis_menu');
|
$jenis_menu = request('jenis_menu');
|
||||||
$perPage = request()->get('per_page', 50);
|
$perPage = request()->get('per_page', 12);
|
||||||
$tanggal_awal = (int) request('tanggal_awal');
|
$tanggal_awal = (int) request('tanggal_awal');
|
||||||
$tanggal_akhir = (int) request('tanggal_akhir');
|
$tanggal_akhir = (int) request('tanggal_akhir');
|
||||||
if($jenis_menu === "konsultasi"){
|
|
||||||
return self::konsultasi();
|
return self::menuOrder($search, $jenis_menu, $perPage, $tanggal_awal, $tanggal_akhir);
|
||||||
}else{
|
|
||||||
return self::menuOrder($search, $jenis_menu, $perPage, $tanggal_awal, $tanggal_akhir);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -66,7 +57,8 @@ class CustomerController extends Controller
|
|||||||
// Step 2: Query menu
|
// Step 2: Query menu
|
||||||
$menuQuery = DB::connection('dbOrderGizi')
|
$menuQuery = DB::connection('dbOrderGizi')
|
||||||
->table('public.master_menu as mn')
|
->table('public.master_menu as mn')
|
||||||
->where(['mn.statusenabled' => true, 'mn.status' => true]);
|
->where('mn.statusenabled', true);
|
||||||
|
|
||||||
if (!empty($jenis_menu)) {
|
if (!empty($jenis_menu)) {
|
||||||
$menuQuery->where('mn.jenis_menu', 'ILIKE', '%' . $jenis_menu . '%');
|
$menuQuery->where('mn.jenis_menu', 'ILIKE', '%' . $jenis_menu . '%');
|
||||||
}
|
}
|
||||||
@ -104,6 +96,7 @@ class CustomerController extends Controller
|
|||||||
)->get();
|
)->get();
|
||||||
|
|
||||||
$menuIds = $menuItems->pluck('master_menu_id')->toArray();
|
$menuIds = $menuItems->pluck('master_menu_id')->toArray();
|
||||||
|
|
||||||
if (empty($menuIds)) {
|
if (empty($menuIds)) {
|
||||||
return self::emptyMenuResponse($perPage);
|
return self::emptyMenuResponse($perPage);
|
||||||
}
|
}
|
||||||
@ -120,6 +113,13 @@ class CustomerController extends Controller
|
|||||||
->table('public.detail_menu_paket_harian as dmph')
|
->table('public.detail_menu_paket_harian as dmph')
|
||||||
->whereIn('dmph.master_menu_id', $menuIds)
|
->whereIn('dmph.master_menu_id', $menuIds)
|
||||||
->select('dmph.master_menu_id', 'dmph.tgl_harian')
|
->select('dmph.master_menu_id', 'dmph.tgl_harian')
|
||||||
|
// ->orderByRaw("
|
||||||
|
// CASE
|
||||||
|
// WHEN tgl_harian >= ? THEN 0
|
||||||
|
// ELSE 1
|
||||||
|
// END,
|
||||||
|
// tgl_harian ASC
|
||||||
|
// ", [$today])
|
||||||
->get()
|
->get()
|
||||||
->groupBy('master_menu_id');
|
->groupBy('master_menu_id');
|
||||||
$kkal = DB::connection('dbOrderGizi')
|
$kkal = DB::connection('dbOrderGizi')
|
||||||
@ -130,65 +130,43 @@ class CustomerController extends Controller
|
|||||||
->get()
|
->get()
|
||||||
->groupBy('master_menu_id');
|
->groupBy('master_menu_id');
|
||||||
|
|
||||||
function buildGroupLabel($tglList, $isSomeday){
|
// Step 4: Transform response
|
||||||
if($isSomeday) return 'Menu Sameday';
|
$enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) {
|
||||||
|
return [
|
||||||
if(empty($tglList)) return '-';
|
'master_menu_id' => $menu->master_menu_id,
|
||||||
|
'nama' => $menu->nama_menu,
|
||||||
$days = collect($tglList)
|
'foto' => $menu->foto,
|
||||||
->map(fn($t) => substr($t, -2))
|
'jenis_menu' => $menu->jenis_menu,
|
||||||
->unique()
|
'harga_public' => $menu->harga_public,
|
||||||
->sort()
|
'harga_karyawan' => $menu->harga_karyawan,
|
||||||
->values();
|
'harga_keluarga_pasien' => $menu->harga_keluarga_pasien,
|
||||||
|
'status' => $menu->status,
|
||||||
// Jika semua tanggal memiliki digit terakhir yang sama, gabungkan
|
'deskripsi' => $menu->deskripsi,
|
||||||
$tanggal = implode(',', $days->toArray());
|
'apakah_someday' => $menu->apakah_someday,
|
||||||
|
'apakah_menu_sore' => $menu->apakah_menu_sore,
|
||||||
return 'Menu Normal Tersedia Tanggal ' . $tanggal;
|
'apakah_menu_siang' => $menu->apakah_menu_siang,
|
||||||
}
|
'klasifikasiMenu' => isset($klasifikasi[$menu->master_menu_id]) ? $klasifikasi[$menu->master_menu_id]->map(function ($item) {
|
||||||
// Step 4: Transform response
|
return [
|
||||||
$enriched = $menuItems->map(function ($menu) use ($klasifikasi, $dmph, $kkal) {
|
'kategori_diet_id' => $item->kategori_diet_id,
|
||||||
|
'nama_kategori_diet' => $item->nama_kategori_diet,
|
||||||
$tglList = isset($dmph[$menu->master_menu_id]) ? collect($dmph[$menu->master_menu_id])->pluck('tgl_harian')->toArray() : [];
|
];
|
||||||
|
})->values() : [],
|
||||||
$groupLabel = buildGroupLabel($tglList, $menu->apakah_someday);
|
'dmph' => isset($dmph[$menu->master_menu_id]) ? $dmph[$menu->master_menu_id]->map(function ($item) {
|
||||||
return [
|
return [
|
||||||
'master_menu_id' => $menu->master_menu_id,
|
'tgl_harian' => $item->tgl_harian
|
||||||
'nama' => $menu->nama_menu,
|
];
|
||||||
'exist_foto' => file_exists(public_path('gambar/' . $menu->foto)) ? true : false,
|
})->values() : [],
|
||||||
'foto' => $menu->foto,
|
'kalori' => isset($kkal[$menu->master_menu_id]) ? $kkal[$menu->master_menu_id]->map(function ($item) {
|
||||||
'jenis_menu' => $menu->jenis_menu,
|
return [
|
||||||
'harga_public' => $menu->harga_public,
|
'nilai_kalori' => $item->nilai_kalori,
|
||||||
'harga_karyawan' => $menu->harga_karyawan,
|
];
|
||||||
'harga_keluarga_pasien' => $menu->harga_keluarga_pasien,
|
})->values() : [],
|
||||||
'status' => $menu->status,
|
];
|
||||||
'deskripsi' => $menu->deskripsi,
|
|
||||||
'apakah_someday' => $menu->apakah_someday,
|
|
||||||
'apakah_menu_sore' => $menu->apakah_menu_sore,
|
|
||||||
'apakah_menu_siang' => $menu->apakah_menu_siang,
|
|
||||||
'group_label' => $groupLabel,
|
|
||||||
'klasifikasiMenu' => isset($klasifikasi[$menu->master_menu_id]) ? $klasifikasi[$menu->master_menu_id]->map(function ($item) {
|
|
||||||
return [
|
|
||||||
'kategori_diet_id' => $item->kategori_diet_id,
|
|
||||||
'nama_kategori_diet' => $item->nama_kategori_diet,
|
|
||||||
];
|
|
||||||
})->values() : [],
|
|
||||||
'dmph' => isset($dmph[$menu->master_menu_id]) ? $dmph[$menu->master_menu_id]->map(function ($item) {
|
|
||||||
return [
|
|
||||||
'tgl_harian' => $item->tgl_harian
|
|
||||||
];
|
|
||||||
})->values() : [],
|
|
||||||
'kalori' => isset($kkal[$menu->master_menu_id]) ? $kkal[$menu->master_menu_id]->map(function ($item) {
|
|
||||||
return [
|
|
||||||
'nilai_kalori' => $item->nilai_kalori,
|
|
||||||
];
|
|
||||||
})->values() : [],
|
|
||||||
];
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Urutkan: someday → tgl_harian terdekat
|
// Urutkan: someday → tgl_harian terdekat
|
||||||
$sorted = $enriched->sortBy(function ($menu) {
|
$sorted = $enriched->sortBy(function ($menu) {
|
||||||
$besok = now()->addDay()->day;
|
$hariIni = now()->day;
|
||||||
$isSomeday = $menu['apakah_someday'] ? 0 : 1;
|
$isSomeday = $menu['apakah_someday'] ? 0 : 1;
|
||||||
|
|
||||||
if ($menu['apakah_someday']) {
|
if ($menu['apakah_someday']) {
|
||||||
@ -196,11 +174,8 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$tglTerdekat = collect($menu['dmph'])->pluck('tgl_harian')
|
$tglTerdekat = collect($menu['dmph'])->pluck('tgl_harian')
|
||||||
->map(function ($tgl) use ($besok) {
|
->map(function ($tgl) use ($hariIni) {
|
||||||
if ($tgl == $besok) {
|
return $tgl >= $hariIni ? $tgl : $tgl + 31;
|
||||||
return 0; // Besok paling awal
|
|
||||||
}
|
|
||||||
return $tgl > $besok ? $tgl : $tgl + 31;
|
|
||||||
})
|
})
|
||||||
->sort()
|
->sort()
|
||||||
->first() ?? 99;
|
->first() ?? 99;
|
||||||
@ -243,21 +218,79 @@ class CustomerController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function konsultasi(){
|
|
||||||
$data = JadwalKonsul::where('statusenabled', true)->with('tglAvailable')->get();
|
|
||||||
return response()->json([
|
// paket do komen dulu
|
||||||
'status' => true,
|
// private static function dataPaketMenuOrder($search = null, $perPage){
|
||||||
'message' => 'Berhasil mendapatkan data',
|
// $query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn')
|
||||||
'data' => $data
|
// ->where('mpn.statusenabled', true);
|
||||||
]);
|
|
||||||
}
|
// if(!empty($search)){
|
||||||
|
// $query->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%');
|
||||||
|
// }
|
||||||
|
|
||||||
|
// $paginated = $query->select(
|
||||||
|
// 'mpn.master_paket_menu_id',
|
||||||
|
// 'mpn.nama_paket',
|
||||||
|
// 'mpn.foto',
|
||||||
|
// 'mpn.harga_public',
|
||||||
|
// 'mpn.harga_karyawan',
|
||||||
|
// 'mpn.harga_keluarga_pasien',
|
||||||
|
// 'mpn.deskripsi',
|
||||||
|
// 'mpn.status',
|
||||||
|
// 'dmph.detail_menu_paket_harian_id',
|
||||||
|
// 'dmph.tgl_harian'
|
||||||
|
// )->paginate($perPage);
|
||||||
|
|
||||||
|
// $paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray();
|
||||||
|
// dd($paketMenuIds);
|
||||||
|
// $klasifikasi = DB::connection('dbOrderGizi')
|
||||||
|
// ->table('public.klasifikasi_menu_diet as kmd')
|
||||||
|
// ->join('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id')
|
||||||
|
// ->whereIn('kmd.master_paket_menu_id', $paketMenuIds)
|
||||||
|
// ->select('kmd.master_paket_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet')
|
||||||
|
// ->get()
|
||||||
|
// ->groupBy('master_paket_menu_id');
|
||||||
|
|
||||||
|
// $result = collect($paginated->items())->map(function ($paketMenu) use ($klasifikasi) {
|
||||||
|
// return [
|
||||||
|
// 'master_paket_menu_id' => $paketMenu->master_paket_menu_id,
|
||||||
|
// 'nama' => $paketMenu->nama_paket,
|
||||||
|
// 'foto' => $paketMenu->foto,
|
||||||
|
// 'jenis_menu' => "paket",
|
||||||
|
// 'harga_public' => $paketMenu->harga_public,
|
||||||
|
// 'harga_karyawan' => $paketMenu->harga_karyawan,
|
||||||
|
// 'harga_keluarga_pasien' => $paketMenu->harga_keluarga_pasien,
|
||||||
|
// 'status' => $paketMenu->status,
|
||||||
|
// 'deskripsi' => $paketMenu->deskripsi,
|
||||||
|
// 'klasifikasiMenu' => isset($klasifikasi[$paketMenu->master_paket_menu_id]) ? $klasifikasi[$paketMenu->master_paket_menu_id]->map(function ($item) {
|
||||||
|
// return [
|
||||||
|
// 'kategori_diet_id' => $item->kategori_diet_id,
|
||||||
|
// 'nama_kategori_diet' => $item->nama_kategori_diet,
|
||||||
|
// ];
|
||||||
|
// })->values() : [],
|
||||||
|
// ];
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// return response()->json([
|
||||||
|
// 'status' => true,
|
||||||
|
// 'message' => 'Berhasil mendapatkan data',
|
||||||
|
// 'data' => [
|
||||||
|
// 'data' => $result,
|
||||||
|
// 'current_page' => $paginated->currentPage(),
|
||||||
|
// 'last_page' => $paginated->lastPage(),
|
||||||
|
// 'per_page' => $paginated->perPage(),
|
||||||
|
// 'total' => $paginated->total(),
|
||||||
|
// ]
|
||||||
|
// ]);
|
||||||
|
// }
|
||||||
|
|
||||||
public function checkout(){
|
public function checkout(){
|
||||||
$karbohidrat = Karbohidrat::where('statusenabled', true)->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori')->get();
|
$karbohidrat = Karbohidrat::where('statusenabled', true)->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori')->get();
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Checkout ',
|
'title' => 'Checkout ',
|
||||||
'karbohidrat' => $karbohidrat,
|
'karbohidrat' => $karbohidrat
|
||||||
'mcu' => false,
|
|
||||||
];
|
];
|
||||||
return view('guest.checkout.checkout_payment', $payload);
|
return view('guest.checkout.checkout_payment', $payload);
|
||||||
}
|
}
|
||||||
@ -267,7 +300,7 @@ class CustomerController extends Controller
|
|||||||
$dataCart = request()->input('cartResult');
|
$dataCart = request()->input('cartResult');
|
||||||
$biodataResult = request()->input('biodataResult');
|
$biodataResult = request()->input('biodataResult');
|
||||||
$totalHarga = request()->input('totalHarga');
|
$totalHarga = request()->input('totalHarga');
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
DB::beginTransaction();
|
||||||
try {
|
try {
|
||||||
$jenisCustomer = $biodataResult['jenis_customer'];
|
$jenisCustomer = $biodataResult['jenis_customer'];
|
||||||
$today = now()->toDateString();
|
$today = now()->toDateString();
|
||||||
@ -283,24 +316,18 @@ class CustomerController extends Controller
|
|||||||
'no_wa' => $biodataResult['no_whatsapp'],
|
'no_wa' => $biodataResult['no_whatsapp'],
|
||||||
'tinggi_badan' => $biodataResult['tinggi_badan'],
|
'tinggi_badan' => $biodataResult['tinggi_badan'],
|
||||||
'berat_badan' => $biodataResult['berat_badan'],
|
'berat_badan' => $biodataResult['berat_badan'],
|
||||||
|
'nama_pasien' => $biodataResult['nama_pasien'],
|
||||||
|
'ruang_perawatan' => $biodataResult['ruang_perawatan'],
|
||||||
|
'no_kamar_perawatan' => $biodataResult['no_kamar'],
|
||||||
|
'kelas_perawatan' => $biodataResult['kelas_perawatan'],
|
||||||
|
'bagian_instalasi' => $biodataResult['bagian_instalasi'],
|
||||||
|
'no_ekstensien' => $biodataResult['no_ekstensien'],
|
||||||
'total_harga' => $totalHarga,
|
'total_harga' => $totalHarga,
|
||||||
'status_order' => "Belum Bayar",
|
'status_order' => "Belum Bayar",
|
||||||
'email' => $biodataResult['email'],
|
'email' => $biodataResult['email'],
|
||||||
|
'alamat' => $biodataResult['alamat'],
|
||||||
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
||||||
];
|
];
|
||||||
if($jenisCustomer === "Karyawan RSAB Harapan Kita"){
|
|
||||||
$nip_pns = Karyawan::where('namalengkap',$biodataResult['nama_pemesan'])->first()?->nip_pns;
|
|
||||||
$payloadOrder['nip'] = $nip_pns ?? null;
|
|
||||||
$payloadOrder['bagian_instalasi'] = $biodataResult['bagian_instalasi'] ?? null;
|
|
||||||
$payloadOrder['no_ekstensien'] = $biodataResult['no_ekstensien'] ?? null;
|
|
||||||
}else if($jenisCustomer === "Keluarga Pasien / Penunggu Pasien"){
|
|
||||||
$payloadOrder['nama_pasien'] = $biodataResult['nama_pasien'] ?? null;
|
|
||||||
$payloadOrder['ruang_perawatan'] = $biodataResult['ruang_perawatan'] ?? null;
|
|
||||||
$payloadOrder['no_kamar_perawatan'] = $biodataResult['no_kamar'] ?? null;
|
|
||||||
$payloadOrder['kelas_perawatan'] = $biodataResult['kelas_perawatan'] ?? null;
|
|
||||||
}else{
|
|
||||||
$payloadOrder['alamat'] = $biodataResult['alamat'] ?? null;
|
|
||||||
}
|
|
||||||
$order = Order::create($payloadOrder);
|
$order = Order::create($payloadOrder);
|
||||||
foreach ($dataCart as $cart) {
|
foreach ($dataCart as $cart) {
|
||||||
$payloadOrderDetail = [
|
$payloadOrderDetail = [
|
||||||
@ -314,21 +341,19 @@ class CustomerController extends Controller
|
|||||||
$payloadOrderDetail['type'] = $value['kategoriPemesanan'];
|
$payloadOrderDetail['type'] = $value['kategoriPemesanan'];
|
||||||
$payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null;
|
$payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null;
|
||||||
$payloadOrderDetail['catatan'] = $value['catatan'] ?? null;
|
$payloadOrderDetail['catatan'] = $value['catatan'] ?? null;
|
||||||
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
|
if($cart['jenis_menu'] === "paket"){
|
||||||
$payloadOrderDetail['total_kalori'] = $value['resultKalori'] ?? ($cart['kalori'] ?? null);
|
$payloadOrderDetail['master_paket_menu_id'] = $cart['id_menu'];
|
||||||
OrderDetail::create($payloadOrderDetail);
|
}else{
|
||||||
|
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
|
||||||
|
}
|
||||||
|
OrderDetail::create($payloadOrderDetail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//code...
|
//code...
|
||||||
if($order->email){
|
if($order->email){
|
||||||
try {
|
Mail::to($order->email)->queue(new NotifikasiCustomer($order->nama_pemesan, $order->no_order, $order->total_harga));
|
||||||
Mail::to($order->email)->send(new NotifikasiCustomer($order->nama_pemesan, $order->no_order, $order->total_harga));
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
//throw $th;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
DB::connection('dbOrderGizi')->commit();
|
DB::commit();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'data' => $order,
|
'data' => $order,
|
||||||
@ -336,7 +361,7 @@ class CustomerController extends Controller
|
|||||||
'message' => 'Data berhasil disimpan'
|
'message' => 'Data berhasil disimpan'
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
DB::rollBack();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Data gagal disimpan ' . $th->getMessage()
|
'message' => 'Data gagal disimpan ' . $th->getMessage()
|
||||||
@ -345,11 +370,10 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function finishCheckout(){
|
public function finishCheckout(){
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
DB::beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$noOrder = request('no_order_result');
|
$noOrder = request('no_order_result');
|
||||||
$medical_record = request('medical_record');
|
|
||||||
$evidence = request()->file('bukti_pembayaran');
|
$evidence = request()->file('bukti_pembayaran');
|
||||||
|
|
||||||
$caraPembayaran = request('cara_pembayaran');
|
$caraPembayaran = request('cara_pembayaran');
|
||||||
@ -378,33 +402,23 @@ class CustomerController extends Controller
|
|||||||
}else{
|
}else{
|
||||||
$payload['cara_pembayaran'] = 'Billing';
|
$payload['cara_pembayaran'] = 'Billing';
|
||||||
$payload['status_order'] = 'Menunggu Konfirmasi Pembayaran Via Billing';
|
$payload['status_order'] = 'Menunggu Konfirmasi Pembayaran Via Billing';
|
||||||
$payload['medical_record'] = $medical_record ?? null;
|
|
||||||
}
|
}
|
||||||
// Update data order
|
// Update data order
|
||||||
$order->update($payload);
|
$order->update($payload);
|
||||||
|
|
||||||
if($order->email){
|
if($order->email){
|
||||||
try {
|
Mail::to($order->email)->queue(new NotifikasiPembayaran($order->nama_pemesan, $order->no_order));
|
||||||
Mail::to($order->email)->send(
|
|
||||||
new NotifikasiPembayaran($order->nama_pemesan, $order->no_order)
|
|
||||||
);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
// log error biar bisa ditelusuri nanti
|
|
||||||
// \Log::error('Gagal mengirim email ke ' . $order->email . ': ' . $e->getMessage());
|
|
||||||
// continue tanpa break flow
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
DB::connection('dbOrderGizi')->commit();
|
DB::commit();
|
||||||
session()->flash('payment_success', true);
|
session()->flash('payment_success', true);
|
||||||
session()->flash('no_order', $noOrder);
|
session()->flash('no_order', $noOrder);
|
||||||
return response([
|
return response([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'no_order' => $noOrder,
|
|
||||||
'message' => 'Terima kasih atas pesanan Anda. Mohon tunggu, kami sedang memprosesnya'
|
'message' => 'Terima kasih atas pesanan Anda. Mohon tunggu, kami sedang memprosesnya'
|
||||||
], 200);
|
], 200);
|
||||||
return back()->with('success', 'Bukti pembayaran berhasil diunggah.');
|
return back()->with('success', 'Bukti pembayaran berhasil diunggah.');
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
DB::rollBack();
|
||||||
return response([
|
return response([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Gagal melakukan pesanan!'
|
'message' => 'Gagal melakukan pesanan!'
|
||||||
@ -418,8 +432,7 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Berhasil Melakukan Pembayaran ',
|
'title' => 'Berhasil Melakukan Pembayaran ',
|
||||||
'no_order' => session('no_order'),
|
'no_order' => session('no_order')
|
||||||
'mcu' => false,
|
|
||||||
];
|
];
|
||||||
return view('guest.success_page', $payload);
|
return view('guest.success_page', $payload);
|
||||||
}
|
}
|
||||||
@ -427,8 +440,7 @@ class CustomerController extends Controller
|
|||||||
public function checkOrder(){
|
public function checkOrder(){
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'title' => 'Check Order',
|
'title' => 'Check Order'
|
||||||
'mcu' => false,
|
|
||||||
];
|
];
|
||||||
return view('guest.check_order.index', $payload);
|
return view('guest.check_order.index', $payload);
|
||||||
}
|
}
|
||||||
@ -439,7 +451,7 @@ class CustomerController extends Controller
|
|||||||
->table('public.order as o')
|
->table('public.order as o')
|
||||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
||||||
->leftJoin('public.master_menu as mm', 'mm.master_menu_id', '=', 'od.master_menu_id')
|
->leftJoin('public.master_menu as mm', 'mm.master_menu_id', '=', 'od.master_menu_id')
|
||||||
->leftJoin('public.menu_mcu as mcu', 'mcu.menu_mcu_id', '=', 'od.menu_mcu_id')
|
->leftJoin('public.master_paket_menu as mpm', 'mpm.master_paket_menu_id', '=', 'od.master_paket_menu_id')
|
||||||
->where('o.no_order', 'ILIKE', '%' . $noOrder . '%')
|
->where('o.no_order', 'ILIKE', '%' . $noOrder . '%')
|
||||||
->select(
|
->select(
|
||||||
'o.*',
|
'o.*',
|
||||||
@ -448,12 +460,8 @@ class CustomerController extends Controller
|
|||||||
'od.tgl_antar',
|
'od.tgl_antar',
|
||||||
'od.harga_satuan',
|
'od.harga_satuan',
|
||||||
'od.status_order as status_order_detail',
|
'od.status_order as status_order_detail',
|
||||||
'od.catatan',
|
DB::raw("COALESCE(mm.nama_menu, mpm.nama_paket) as nama_item"),
|
||||||
'od.total_kalori',
|
DB::raw("COALESCE(mm.foto, mpm.foto) as foto"),
|
||||||
'od.type',
|
|
||||||
'od.jam_layanan',
|
|
||||||
DB::raw('COALESCE(mm.nama_menu, mcu.nama_mcu) as nama_item'),
|
|
||||||
'mm.foto as foto'
|
|
||||||
)
|
)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
@ -487,22 +495,15 @@ class CustomerController extends Controller
|
|||||||
// karyawan
|
// karyawan
|
||||||
'no_ekstensien' => $data->no_ekstensien,
|
'no_ekstensien' => $data->no_ekstensien,
|
||||||
'bagian_instalasi' => $data->bagian_instalasi,
|
'bagian_instalasi' => $data->bagian_instalasi,
|
||||||
// umum
|
|
||||||
'alamat' => $data->alamat,
|
|
||||||
'items' => $order->map(function ($item) {
|
'items' => $order->map(function ($item) {
|
||||||
return [
|
return [
|
||||||
'order_detail_id' => $item->order_detail_id,
|
'order_detail_id' => $item->order_detail_id,
|
||||||
'nama_item' => $item->nama_item,
|
'nama_item' => $item->nama_item,
|
||||||
'tgl_antar' => $item->tgl_antar,
|
'tgl_antar' => $item->tgl_antar,
|
||||||
'exist_foto' => file_exists(public_path('gambar/' . $item->foto)) ? true : false,
|
|
||||||
'foto' => $item->foto,
|
'foto' => $item->foto,
|
||||||
'jumlah' => $item->jumlah,
|
'jumlah' => $item->jumlah,
|
||||||
'harga_satuan' => $item->harga_satuan,
|
'harga_satuan' => $item->harga_satuan,
|
||||||
'status_order' => $item->status_order_detail,
|
'status_order' => $item->status_order_detail,
|
||||||
'catatan' => $item->catatan ?? '-',
|
|
||||||
'total_kalori' => $item->total_kalori,
|
|
||||||
'type' => $item->type,
|
|
||||||
'jam_layanan' => $item->jam_layanan,
|
|
||||||
// tambahkan field tambahan jika diperlukan
|
// tambahkan field tambahan jika diperlukan
|
||||||
];
|
];
|
||||||
})->values(),
|
})->values(),
|
||||||
@ -514,127 +515,4 @@ class CustomerController extends Controller
|
|||||||
'data' => $result,
|
'data' => $result,
|
||||||
], 200);
|
], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function indexMcu(){
|
|
||||||
$paketMcu = MasterMcu::where('statusenabled', true)->get();
|
|
||||||
$data = [
|
|
||||||
'title' => 'Order Gizi MCU',
|
|
||||||
'paketMcu' => $paketMcu,
|
|
||||||
'mcu' => true,
|
|
||||||
];
|
|
||||||
return view('guest.mcu.index', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function storeMcu(){
|
|
||||||
try {
|
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
|
||||||
$today = now()->toDateString();
|
|
||||||
$jumlahHariIni = Order::whereDate('entry_at', $today)->count();
|
|
||||||
$priceMcu = MasterMcu::where('menu_mcu_id', request('paket_mcu'))->first();
|
|
||||||
$urutan = $jumlahHariIni + 1;
|
|
||||||
$noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . now()->day .'/MCU/' . Str::random(6) .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT);
|
|
||||||
$payload = [
|
|
||||||
'email' => request('email') ?? null,
|
|
||||||
'nama_pemesan' => request('nama_pemesan'),
|
|
||||||
'jenis_customer' => 'MCU',
|
|
||||||
'medical_record' => request('no_mr'),
|
|
||||||
'jenis_kelamin' => request('jenis_kelamin'),
|
|
||||||
'no_order' => $noOrder,
|
|
||||||
'no_wa' => request('no_hp') ?? null,
|
|
||||||
'tinggi_badan' => request('tinggi_badan') ?? null,
|
|
||||||
'berat_badan' => request('berat_badan') ?? null,
|
|
||||||
'nama_institusi' => request('nama_institusi'),
|
|
||||||
'status_order' =>'Menunggu Konfirmasi Pesanan MCU',
|
|
||||||
'total_harga' => $priceMcu ? $priceMcu->harga : null,
|
|
||||||
'cara_pembayaran' =>'MCU',
|
|
||||||
];
|
|
||||||
$order = Order::create($payload);
|
|
||||||
|
|
||||||
$payloadDetail = [
|
|
||||||
'order_id' => $order->order_id,
|
|
||||||
'jumlah' => 1,
|
|
||||||
'tgl_antar' => request('tgl_mcu'),
|
|
||||||
'menu_mcu_id' => request('paket_mcu'),
|
|
||||||
'jam_layanan' => request('jam_layanan'),
|
|
||||||
'status_order' =>'Pending',
|
|
||||||
'harga_satuan' => $priceMcu ? $priceMcu->harga : null,
|
|
||||||
];
|
|
||||||
OrderDetail::create($payloadDetail);
|
|
||||||
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
|
||||||
session()->flash('success_mcu', true);
|
|
||||||
session()->flash('no_order', $noOrder);
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Pesanan Berhasil diproses'
|
|
||||||
]);
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
|
||||||
return response()->json([
|
|
||||||
'status' => false,
|
|
||||||
'message' => 'Pesanan gagal diproses ' . $th->getMessage()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function successMcu(){
|
|
||||||
if(!session()->has('success_mcu')){
|
|
||||||
return redirect('/order-mcu');
|
|
||||||
}
|
|
||||||
$payload = [
|
|
||||||
'title' => 'Berhasil Melakukan Pesanan ',
|
|
||||||
'no_order' => session('no_order'),
|
|
||||||
'back_href' => '/order-mcu',
|
|
||||||
'mcu' => false
|
|
||||||
];
|
|
||||||
return view('guest.success_page', $payload);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function karyawan(Request $request)
|
|
||||||
{
|
|
||||||
$search = trim($request->input('search'));
|
|
||||||
|
|
||||||
// 1. Validasi dulu
|
|
||||||
$validator = Validator::make(
|
|
||||||
['search' => $search],
|
|
||||||
['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/']
|
|
||||||
);
|
|
||||||
if ($validator->fails()) {
|
|
||||||
return response()->json(['error' => 0, 'data' => []]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. Baru query kalau ada keyword
|
|
||||||
$data =Karyawan::where('statusenabled', true)->where('kedudukanfk', 1)
|
|
||||||
->where('namalengkap', 'ILIKE', "%{$search}%")
|
|
||||||
->limit(5)
|
|
||||||
->pluck('namalengkap') // langsung ambil string
|
|
||||||
->map(fn($nama) => ['label' => $nama]);
|
|
||||||
|
|
||||||
return response()->json(['error' => 0, 'data' => $data]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function unitInstalasi(Request $request)
|
|
||||||
{
|
|
||||||
$search = trim($request->input('search'));
|
|
||||||
|
|
||||||
// 1. Validasi dulu
|
|
||||||
$validator = Validator::make(
|
|
||||||
['search' => $search],
|
|
||||||
['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/']
|
|
||||||
);
|
|
||||||
if ($validator->fails()) {
|
|
||||||
return response()->json(['error' => 0, 'data' => []]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. Baru query kalau ada keyword
|
|
||||||
$data = UnitInstalasi::where('statusenabled', true)
|
|
||||||
->select('name')
|
|
||||||
->where('name', 'ILIKE', "%{$search}%")
|
|
||||||
->limit(5)
|
|
||||||
->get()
|
|
||||||
->map(fn($row) => ['label' => $row->name]);
|
|
||||||
|
|
||||||
return response()->json(['error' => 0, 'data' => $data]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -61,15 +61,15 @@ class DashboardController extends Controller
|
|||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
];
|
];
|
||||||
})->values();
|
})->values();
|
||||||
$pemasukanKaryawan = $grouped->where('jenis_customer', 'Karyawan RSAB Harapan Kita')->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
$pemasukanKaryawan = $grouped->where('jenis_customer', 'Karyawan RSAB Harapan Kita')->sum('total_harga');
|
||||||
$pemasukanMasyarakat = $grouped->where('jenis_customer', 'Masyarakat Umum')->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
$pemasukanMasyarakat = $grouped->where('jenis_customer', 'Masyarakat Umum')->sum('total_harga');
|
||||||
$pemasukanKeluargaPasien = $grouped->where('jenis_customer', 'Keluarga Pasien / Penunggu Pasien')->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
$pemasukanKeluargaPasien = $grouped->where('jenis_customer', 'Keluarga Pasien / Penunggu Pasien')->sum('total_harga');
|
||||||
|
|
||||||
$totalPemasukan = $grouped->whereNotIn('status_order', ['Belum Bayar'])->sum('total_harga');
|
$totalPemasukan = $grouped->sum('total_harga');
|
||||||
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan', 'Belum Bayar'])->count();
|
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan'])->count();
|
||||||
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
||||||
$pesananBatal = $grouped->where('status_order', 'Dibatalkan')->count();
|
$pesananBatal = $grouped->where('status_order', 'Dibatalkan')->count();
|
||||||
$totalPesanan = $grouped->whereNotIn('status_order', ['Belum Bayar'])->count();
|
$totalPesanan = $grouped->count();
|
||||||
|
|
||||||
$pesananSelesai = DB::connection('dbOrderGizi')->table('public.order as o')
|
$pesananSelesai = DB::connection('dbOrderGizi')->table('public.order as o')
|
||||||
->where('o.statusenabled', true)
|
->where('o.statusenabled', true)
|
||||||
|
|||||||
@ -1,140 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use App\Models\JadwalKonsul;
|
|
||||||
use App\Models\JadwalKonsulDetail;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
|
|
||||||
class JadwalKonsulController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display a listing of the resource.
|
|
||||||
*/
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$data = [
|
|
||||||
'title' => 'Master Jadwal Konsul'
|
|
||||||
];
|
|
||||||
return view('dashboard.jadwal_konsul.index', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the form for creating a new resource.
|
|
||||||
*/
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store a newly created resource in storage.
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
|
||||||
$datas = request('data');
|
|
||||||
foreach ($datas as $data) {
|
|
||||||
$payload = [
|
|
||||||
'nama_dokter' => $data['nama_dokter']
|
|
||||||
];
|
|
||||||
$jk = JadwalKonsul::create($payload);
|
|
||||||
if(isset($data['tanggal'])){
|
|
||||||
$tanggal = $data['tanggal'];
|
|
||||||
foreach ($tanggal as $tgl) {
|
|
||||||
$payloadTgl = [
|
|
||||||
'tgl_harian' => $tgl,
|
|
||||||
'jadwal_konsul_id' => $jk->jadwal_konsul_id,
|
|
||||||
];
|
|
||||||
JadwalKonsulDetail::create($payloadTgl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//code...
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Data berhasil ditambahkan!'
|
|
||||||
]);
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
|
||||||
return response()->json([
|
|
||||||
'status' => false,
|
|
||||||
'message' => 'Data gagal ditambahkan!',
|
|
||||||
'errors' => $th->getMessage()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display the specified resource.
|
|
||||||
*/
|
|
||||||
public function show(JadwalKonsul $jadwalKonsul)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the form for editing the specified resource.
|
|
||||||
*/
|
|
||||||
public function edit(JadwalKonsul $jadwalKonsul)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the specified resource in storage.
|
|
||||||
*/
|
|
||||||
public function update(Request $request, string $id)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
|
||||||
JadwalKonsulDetail::where('jadwal_konsul_id', $id)->delete();
|
|
||||||
|
|
||||||
$jadwalKonsul = JadwalKonsul::where('jadwal_konsul_id', $id)->first();
|
|
||||||
$jadwalKonsul->update([
|
|
||||||
'nama_dokter' => request('nama_dokter')
|
|
||||||
]);
|
|
||||||
$tanggals = request('tanggal');
|
|
||||||
foreach ($tanggals as $tgl) {
|
|
||||||
$payload = [
|
|
||||||
'jadwal_konsul_id' => $id,
|
|
||||||
'tgl_harian' => $tgl
|
|
||||||
];
|
|
||||||
JadwalKonsulDetail::create($payload);
|
|
||||||
}
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Data berhasil diperbarui!'
|
|
||||||
]);
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
|
||||||
return response()->json([
|
|
||||||
'status' => false,
|
|
||||||
'message' => 'Data gagal diperbarui!',
|
|
||||||
'errors' => $th->getMessage()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Remove the specified resource from storage.
|
|
||||||
*/
|
|
||||||
public function destroy(string $id)
|
|
||||||
{
|
|
||||||
$jadwalKonsul = JadwalKonsul::where('jadwal_konsul_id', $id)->first();
|
|
||||||
$jadwalKonsul->update([
|
|
||||||
'statusenabled' => false
|
|
||||||
]);
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Data berhasil dihapus!'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function datatable(){
|
|
||||||
return JadwalKonsul::where('statusenabled', true)->with('tglAvailable')->get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,117 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use App\Models\MasterMcu;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
|
|
||||||
class MasterMcuController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display a listing of the resource.
|
|
||||||
*/
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$payload = [
|
|
||||||
'title' => 'Master MCU'
|
|
||||||
];
|
|
||||||
return view('dashboard.master.mcu.index', $payload);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the form for creating a new resource.
|
|
||||||
*/
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store a newly created resource in storage.
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
|
||||||
$datas = request('data');
|
|
||||||
foreach ($datas as $data) {
|
|
||||||
$payload =[
|
|
||||||
'nama_mcu' => $data['nama_mcu']
|
|
||||||
];
|
|
||||||
if($data['harga']){
|
|
||||||
$harga = $data['harga'] ? str_replace('.', '', $data['harga']) : null;
|
|
||||||
$payload['harga'] = $harga;
|
|
||||||
}
|
|
||||||
MasterMcu::create($payload);
|
|
||||||
}
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Data berhasil ditambahkan!'
|
|
||||||
]);
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
|
||||||
return response()->json([
|
|
||||||
'status' => false,
|
|
||||||
'message' => 'Data gagal ditambahkan!',
|
|
||||||
'errors' => $th->getMessage()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display the specified resource.
|
|
||||||
*/
|
|
||||||
public function show(MasterMcu $masterMcu)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the form for editing the specified resource.
|
|
||||||
*/
|
|
||||||
public function edit(MasterMcu $masterMcu)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the specified resource in storage.
|
|
||||||
*/
|
|
||||||
public function update(string $id)
|
|
||||||
{
|
|
||||||
$masterMcu = MasterMcu::where('menu_mcu_id', $id)->first();
|
|
||||||
$payload =[
|
|
||||||
'nama_mcu' => request('nama_mcu'),
|
|
||||||
];
|
|
||||||
if(request('harga')){
|
|
||||||
$harga = request('harga') ? str_replace('.', '', request('harga')) : null;
|
|
||||||
$payload['harga'] = $harga;
|
|
||||||
}
|
|
||||||
$masterMcu->update($payload);
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Data berhasil diperbarui!'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the specified resource from storage.
|
|
||||||
*/
|
|
||||||
public function destroy(string $id)
|
|
||||||
{
|
|
||||||
$masterMcu = MasterMcu::where('menu_mcu_id', $id)->first();
|
|
||||||
$masterMcu->update([
|
|
||||||
'statusenabled' => false
|
|
||||||
]);
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Data berhasil dihapus!'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function datatable(){
|
|
||||||
return MasterMcu::where('statusenabled', true)->get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -58,7 +58,7 @@ class MenuController extends Controller
|
|||||||
'status' => true,
|
'status' => true,
|
||||||
'apakah_someday' => $data['kategori_menu'] === "Menu Normal" ? false : true,
|
'apakah_someday' => $data['kategori_menu'] === "Menu Normal" ? false : true,
|
||||||
'apakah_menu_siang' => (isset($data['apakah_menu_siang']) && $data['apakah_menu_siang'] === "iya") ? true : false,
|
'apakah_menu_siang' => (isset($data['apakah_menu_siang']) && $data['apakah_menu_siang'] === "iya") ? true : false,
|
||||||
'apakah_menu_sore' => (isset($data['apakah_menu_sore']) && $data['apakah_menu_sore'] === "iya") ? true : false
|
'apakah_menu_sore' => (isset($data['apakah_menu_sore']) && $data['apakah_menu_sore'] === "iya") ? true : false,
|
||||||
];
|
];
|
||||||
|
|
||||||
if($data['foto']){
|
if($data['foto']){
|
||||||
@ -115,6 +115,7 @@ class MenuController extends Controller
|
|||||||
]);
|
]);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
DB::connection('dbOrderGizi')->rollBack();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Menu gagal ditambahkan!',
|
'message' => 'Menu gagal ditambahkan!',
|
||||||
@ -168,7 +169,7 @@ class MenuController extends Controller
|
|||||||
'status' => true,
|
'status' => true,
|
||||||
'apakah_someday' => request('kategori_menu') === "Menu Normal" ? false : true,
|
'apakah_someday' => request('kategori_menu') === "Menu Normal" ? false : true,
|
||||||
'apakah_menu_siang' => (request('apakah_menu_siang') && request('apakah_menu_siang') === "iya") ? true : false,
|
'apakah_menu_siang' => (request('apakah_menu_siang') && request('apakah_menu_siang') === "iya") ? true : false,
|
||||||
'apakah_menu_sore' => (request('apakah_menu_sore') && request('apakah_menu_sore') === "iya") ? true : false
|
'apakah_menu_sore' => (request('apakah_menu_sore') && request('apakah_menu_sore') === "iya") ? true : false,
|
||||||
];
|
];
|
||||||
if(request()->hasFile('foto')){
|
if(request()->hasFile('foto')){
|
||||||
$imageName = Str::random(15) . '.' . request('foto')->getClientOriginalExtension();
|
$imageName = Str::random(15) . '.' . request('foto')->getClientOriginalExtension();
|
||||||
@ -234,8 +235,8 @@ class MenuController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function destroy(string $id)
|
public function destroy(string $id)
|
||||||
{
|
{
|
||||||
$data = Menu::where(['statusenabled' => true, 'master_menu_id' => $id])->first();
|
$data = Menu::where(['statusenabled' => true, 'master_menu_id' => $id])->first();
|
||||||
$payload = [
|
$payload = [
|
||||||
'statusenabled' => false,
|
'statusenabled' => false,
|
||||||
'pegawai_id_entry' => auth()->user()->id,
|
'pegawai_id_entry' => auth()->user()->id,
|
||||||
'pegawai_nama_entry' => auth()->user()->full_name,
|
'pegawai_nama_entry' => auth()->user()->full_name,
|
||||||
@ -341,18 +342,4 @@ class MenuController extends Controller
|
|||||||
'message' => 'berhasil mendapatkan data'
|
'message' => 'berhasil mendapatkan data'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function switchMenu(string $id, $status){
|
|
||||||
$data = Menu::where('master_menu_id', $id)->first();
|
|
||||||
$statusResult = $status === "true" ? true : false;
|
|
||||||
|
|
||||||
$data->update([
|
|
||||||
'status' => $statusResult
|
|
||||||
]);
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'berhasil memperbarui data'
|
|
||||||
], 200);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,8 +11,6 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
||||||
|
|
||||||
class PesananController extends Controller
|
class PesananController extends Controller
|
||||||
{
|
{
|
||||||
@ -37,16 +35,6 @@ class PesananController extends Controller
|
|||||||
}else{
|
}else{
|
||||||
$tanggalFormatted = [Carbon::now()->toDateString()];
|
$tanggalFormatted = [Carbon::now()->toDateString()];
|
||||||
}
|
}
|
||||||
|
|
||||||
$dataPending = Order::where('statusenabled', true)->whereIn('status_order', [
|
|
||||||
'Menunggu Konfirmasi Pembayaran',
|
|
||||||
'Menunggu Konfirmasi Pembayaran Via Billing',
|
|
||||||
'Menunggu Konfirmasi Pesanan MCU'
|
|
||||||
])
|
|
||||||
->select(DB::raw('COUNT(DISTINCT DATE(entry_at)) as total'))
|
|
||||||
->value('total');
|
|
||||||
|
|
||||||
|
|
||||||
$orders = DB::connection('dbOrderGizi')->table('public.order as o')
|
$orders = DB::connection('dbOrderGizi')->table('public.order as o')
|
||||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
||||||
->where('o.statusenabled', true)
|
->where('o.statusenabled', true)
|
||||||
@ -54,7 +42,6 @@ class PesananController extends Controller
|
|||||||
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
|
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
|
||||||
$tanggalFormatted
|
$tanggalFormatted
|
||||||
)
|
)
|
||||||
->whereIn('o.status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing', 'Menunggu Konfirmasi Pesanan MCU'])
|
|
||||||
->select(
|
->select(
|
||||||
'o.order_id',
|
'o.order_id',
|
||||||
'o.entry_at',
|
'o.entry_at',
|
||||||
@ -66,8 +53,6 @@ class PesananController extends Controller
|
|||||||
'o.total_harga',
|
'o.total_harga',
|
||||||
'o.bukti_pembayaran',
|
'o.bukti_pembayaran',
|
||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'o.medical_record',
|
|
||||||
'o.nama_institusi',
|
|
||||||
'od.status_order as detail_status_order'
|
'od.status_order as detail_status_order'
|
||||||
)->get()->groupBy('order_id');
|
)->get()->groupBy('order_id');
|
||||||
$grouped = $orders->map(function($items){
|
$grouped = $orders->map(function($items){
|
||||||
@ -85,23 +70,19 @@ class PesananController extends Controller
|
|||||||
'status_order' => $first->status_order,
|
'status_order' => $first->status_order,
|
||||||
'cara_pembayaran' => $first->cara_pembayaran,
|
'cara_pembayaran' => $first->cara_pembayaran,
|
||||||
'bukti_pembayaran' => $first->bukti_pembayaran,
|
'bukti_pembayaran' => $first->bukti_pembayaran,
|
||||||
'medical_record' => $first->medical_record,
|
|
||||||
'progress' => $progress,
|
'progress' => $progress,
|
||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
'nama_institusi' => $first->nama_institusi,
|
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
->filter(function($item){
|
->filter(function($item){
|
||||||
return $item['total_detail'] > 0 && $item['total_detail'] != $item['selesai_detail'];
|
return $item['total_detail'] > 0 && $item['total_detail'] != $item['selesai_detail'];
|
||||||
})->values();
|
})->values();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'rows' => $grouped->values(),
|
'rows' => $grouped->values(),
|
||||||
'total' => $grouped->count(),
|
'total' => $grouped->count()
|
||||||
'dataPending'=> $dataPending
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,13 +102,8 @@ class PesananController extends Controller
|
|||||||
}
|
}
|
||||||
$order->update($payload);
|
$order->update($payload);
|
||||||
|
|
||||||
if($order->email && $order->status_order === "Lunas"){
|
if($order->email){
|
||||||
try {
|
Mail::to($order->email)->queue(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
||||||
//code...
|
|
||||||
Mail::to($order->email)->send(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
//throw $th;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
DB::connection('dbOrderGizi')->commit();
|
||||||
@ -148,23 +124,18 @@ class PesananController extends Controller
|
|||||||
public function actionOrderViaBilling(Request $request, string $order_id){
|
public function actionOrderViaBilling(Request $request, string $order_id){
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
DB::connection('dbOrderGizi')->beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$order = Order::where('order_id', $order_id)->first();
|
$order = Order::where('order_id', $order_id)->first();
|
||||||
$payload = [
|
$payload = [
|
||||||
'pegawai_id_confirm_order' => auth()->user()->id,
|
'pegawai_id_confirm_order' => auth()->user()->id,
|
||||||
'pegawai_name_confirm_order' => auth()->user()->full_name,
|
'pegawai_name_confirm_order' => auth()->user()->full_name,
|
||||||
'pegawai_at_confirm_order' => Carbon::now(),
|
'pegawai_at_confirm_order' => Carbon::now(),
|
||||||
'status_order' => 'Lunas',
|
'status_order' => 'Lunas',
|
||||||
|
'cara_pembayaran' => 'Billing'
|
||||||
];
|
];
|
||||||
if($request->hasFile('evidence_medical_record')){
|
|
||||||
$file = $request->file('evidence_medical_record');
|
|
||||||
$path = $file->store('evidence_medical_record', 'public');
|
|
||||||
$payload['evidence_medical_record'] = $path;
|
|
||||||
}
|
|
||||||
$order->update($payload);
|
$order->update($payload);
|
||||||
|
|
||||||
if($order->email){
|
if($order->email){
|
||||||
Mail::to($order->email)->send(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
Mail::to($order->email)->queue(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga));
|
||||||
}
|
}
|
||||||
DB::connection('dbOrderGizi')->commit();
|
DB::connection('dbOrderGizi')->commit();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -198,24 +169,6 @@ class PesananController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dataPending(){
|
|
||||||
$data = Order::selectRaw('DATE(entry_at) as tgl, COUNT(*) as total')
|
|
||||||
->where('statusenabled', true)
|
|
||||||
->whereIn('status_order', [
|
|
||||||
'Menunggu Konfirmasi Pembayaran',
|
|
||||||
'Menunggu Konfirmasi Pembayaran Via Billing',
|
|
||||||
'Menunggu Konfirmasi Pesanan MCU'
|
|
||||||
])
|
|
||||||
->groupBy(DB::raw('DATE(entry_at)'))
|
|
||||||
->orderBy('tgl', 'asc')
|
|
||||||
->get();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'rows' => $data->values(),
|
|
||||||
'total' => $data->count()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function indexSelesai()
|
public function indexSelesai()
|
||||||
{
|
{
|
||||||
$payload = [
|
$payload = [
|
||||||
@ -252,9 +205,6 @@ class PesananController extends Controller
|
|||||||
'o.status_order',
|
'o.status_order',
|
||||||
'o.bukti_pembayaran',
|
'o.bukti_pembayaran',
|
||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'o.medical_record',
|
|
||||||
'o.evidence_medical_record',
|
|
||||||
'o.nama_institusi',
|
|
||||||
'od.status_order as detail_status_order'
|
'od.status_order as detail_status_order'
|
||||||
)->get()->groupBy('order_id');
|
)->get()->groupBy('order_id');
|
||||||
|
|
||||||
@ -273,13 +223,10 @@ class PesananController extends Controller
|
|||||||
'status_order' => $first->status_order,
|
'status_order' => $first->status_order,
|
||||||
'bukti_pembayaran' => $first->bukti_pembayaran,
|
'bukti_pembayaran' => $first->bukti_pembayaran,
|
||||||
'cara_pembayaran' => $first->cara_pembayaran,
|
'cara_pembayaran' => $first->cara_pembayaran,
|
||||||
'medical_record' => $first->medical_record,
|
|
||||||
'evidence_medical_record' => $first->evidence_medical_record,
|
|
||||||
'progress' => $progress,
|
'progress' => $progress,
|
||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
'nama_institusi' => $first->nama_institusi,
|
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
->filter(function($item){
|
->filter(function($item){
|
||||||
@ -302,11 +249,10 @@ class PesananController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getPekerjaan(){
|
public function getPekerjaan(){
|
||||||
$data = OrderDetail::with(['menu', 'masterMcu', 'order', 'karbohidrat'])->whereHas('order', function($q){
|
$data = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){
|
||||||
$q->where('status_order', 'Lunas');
|
$q->where('status_order', 'Lunas');
|
||||||
});
|
});
|
||||||
$tanggal = request('tanggal');
|
$tanggal = request('tanggal');
|
||||||
$status = request('status');
|
|
||||||
if(!empty($tanggal)){
|
if(!empty($tanggal)){
|
||||||
$flattened = is_array($tanggal[0]) ? Arr::flatten($tanggal) : $tanggal;
|
$flattened = is_array($tanggal[0]) ? Arr::flatten($tanggal) : $tanggal;
|
||||||
$data->whereIn('tgl_antar', $flattened);
|
$data->whereIn('tgl_antar', $flattened);
|
||||||
@ -314,42 +260,16 @@ class PesananController extends Controller
|
|||||||
$now = Carbon::now()->format('Y-m-d');
|
$now = Carbon::now()->format('Y-m-d');
|
||||||
$data->where('tgl_antar', $now);
|
$data->where('tgl_antar', $now);
|
||||||
}
|
}
|
||||||
// if($status !== "all"){
|
|
||||||
// $data->where('status_order', $status);
|
|
||||||
// }
|
|
||||||
$dataPending = OrderDetail::whereHas('order', function($query) {
|
|
||||||
$query->where('status_order', 'Lunas');
|
|
||||||
})->where('status_order', 'Pending')
|
|
||||||
->select(DB::raw('COUNT(DISTINCT DATE(tgl_antar)) as total'))
|
|
||||||
->value('total');
|
|
||||||
|
|
||||||
$data = $data->get();
|
$data = $data->get();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'rows' => $data->values(),
|
|
||||||
'total' => $data->count(),
|
|
||||||
'dataPending' => $dataPending
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dataPekerjaanPending(){
|
|
||||||
$data = OrderDetail::with('order')->where('status_order', 'Pending')
|
|
||||||
->select(DB::raw('DATE(tgl_antar) as tgl'), DB::raw('COUNT(*) as total'))
|
|
||||||
->whereHas('order', function($query) {
|
|
||||||
$query->where('status_order', 'Lunas'); // filter status di tabel orders
|
|
||||||
})
|
|
||||||
->groupBy(DB::raw('DATE(tgl_antar)'))
|
|
||||||
->orderBy('tgl', 'asc')
|
|
||||||
->get();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'rows' => $data->values(),
|
'rows' => $data->values(),
|
||||||
'total' => $data->count()
|
'total' => $data->count()
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPekerjaanDetail($order_detail_id){
|
public function getPekerjaanDetail($order_detail_id){
|
||||||
$data = OrderDetail::where('order_detail_id', $order_detail_id)->with(['order', 'menu', 'masterMcu'])->first();
|
$data = OrderDetail::where('order_detail_id', $order_detail_id)->with(['order', 'menu', 'paketMenu'])->first();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'data' => $data
|
'data' => $data
|
||||||
@ -359,28 +279,13 @@ class PesananController extends Controller
|
|||||||
public function exportPekerjaan(){
|
public function exportPekerjaan(){
|
||||||
$startDate = request('start_date');
|
$startDate = request('start_date');
|
||||||
$endDate = request('end_date');
|
$endDate = request('end_date');
|
||||||
$type_customer = request('type_customer');
|
|
||||||
$type = request('type');
|
|
||||||
|
|
||||||
$orderDetail = OrderDetail::with(['menu', 'masterMcu', 'order', 'karbohidrat'])->whereHas('order', function($q) use($type_customer){
|
|
||||||
$q->where('status_order', 'Lunas');
|
|
||||||
if($type_customer !== 'all'){
|
|
||||||
$q->where('jenis_customer', $type_customer);
|
|
||||||
}
|
|
||||||
})->whereBetween('tgl_antar', [$startDate, $endDate])->get();
|
|
||||||
|
|
||||||
if($type === 'pdf'){
|
|
||||||
return $this->helperPdfPekerjaan($orderDetail, $startDate, $endDate);
|
|
||||||
}else{
|
|
||||||
return $this->helperExcelPekerjaan($orderDetail, $startDate, $endDate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function helperPdfPekerjaan($orderDetail, $startDate, $endDate){
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$now = Carbon::now()->format('Y-m-d H-i');
|
$now = Carbon::now()->format('Y-m-d H-i');
|
||||||
|
$orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){
|
||||||
|
$q->where('status_order', 'Lunas');
|
||||||
|
})->whereBetween('tgl_antar', [$startDate, $endDate])->get();
|
||||||
|
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
||||||
|
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
||||||
|
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
||||||
$data = [
|
$data = [
|
||||||
'pekerjaan' => $orderDetail,
|
'pekerjaan' => $orderDetail,
|
||||||
'waktu_cetak' => $waktu_cetak,
|
'waktu_cetak' => $waktu_cetak,
|
||||||
@ -391,241 +296,36 @@ class PesananController extends Controller
|
|||||||
return $pdf->stream("daftar-pesanan-{$now}.pdf");
|
return $pdf->stream("daftar-pesanan-{$now}.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function helperExcelPekerjaan($orderDetail, $startDate, $endDate){
|
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$spreadsheet = new Spreadsheet();
|
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
|
||||||
|
|
||||||
$sheet->setCellValue('A1', "Menu Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
|
||||||
$sheet->mergeCells('A1:P1');
|
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
|
||||||
$sheet->mergeCells('A2:P2');
|
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
// Header tabel
|
|
||||||
$headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Pembayaran", "Jenis Customer", "Ruangan", "Status Pesanan", "Jenis Menu", "Menu Pesanan", "Karbohidrat", "Total Kalori (kal)", "Jumlah", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Harga Total", "Catatan"];
|
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
|
||||||
$sheet->getStyle('A4:P4')->applyFromArray([
|
|
||||||
'font' => ['bold' => true],
|
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
|
||||||
'borders' => [
|
|
||||||
'allBorders' => [
|
|
||||||
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$sheet->getStyle('A4:P4')->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle('A4:P4')->getAlignment()->setHorizontal('center');
|
|
||||||
$sheet->getStyle('A4:P4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
// Isi data
|
|
||||||
$row = 5;
|
|
||||||
$totalPendapatan = 0;
|
|
||||||
foreach ($orderDetail as $index => $item) {
|
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
|
||||||
$sheet->setCellValue("B{$row}", $item?->order?->no_order);
|
|
||||||
$sheet->setCellValue("C{$row}", $item?->order?->nama_pemesan);
|
|
||||||
$sheet->setCellValue("D{$row}", $item?->order?->cara_pembayaran);
|
|
||||||
$sheet->setCellValue("E{$row}", $item?->order?->jenis_customer === "MCU" ? $item?->order?->nama_institusi . '- MCU' : $item?->order?->jenis_customer);
|
|
||||||
if($item->order?->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){
|
|
||||||
$sheet->setCellValue("F{$row}", $item?->order?->kelas_perawatan . '/' . $item?->order?->no_kamar_perawatan . '/' . $item?->order?->ruang_perawatan);
|
|
||||||
}else if($item->order?->jenis_customer === "Karyawan RSAB Harapan Kita"){
|
|
||||||
$sheet->setCellValue("F{$row}", $item?->order?->bagian_instalasi ?? '-');
|
|
||||||
}else{
|
|
||||||
$sheet->setCellValue("F{$row}", '-');
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("G{$row}", $item?->status_order ?? "-");
|
|
||||||
if($item->menu?->masterMcu){
|
|
||||||
$sheet->setCellValue("H{$row}", 'Menu MCU');
|
|
||||||
}else{
|
|
||||||
$sheet->setCellValue("H{$row}", $item?->menu?->apakah_someday ? "Menu Sameday" : "Menu Normal");
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("I{$row}", $item?->menu?->nama_menu ?? $item?->masterMcu?->nama_mcu);
|
|
||||||
$karbohidratNama = $item?->karbohidrat?->nama_karbohidrat ?? '-';
|
|
||||||
$karbohidratNilai = $item?->karbohidrat?->nilai_kalori ?? '-';
|
|
||||||
$sheet->setCellValue("J{$row}", $karbohidratNama . ($karbohidratNilai !== '-' ? " ({$karbohidratNilai} kal)" : ''));
|
|
||||||
$sheet->setCellValue("K{$row}", $item?->total_kalori ?? '-');
|
|
||||||
$sheet->setCellValue("L{$row}", $item?->jumlah ?? '-');
|
|
||||||
$sheet->setCellValue("M{$row}", $item?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
|
||||||
$sheet->setCellValue("N{$row}", $item?->type ?? $item->jam_layanan);
|
|
||||||
$sheet->setCellValue("O{$row}", $item?->order?->total_harga);
|
|
||||||
$sheet->setCellValue("P{$row}", $item?->catatan ?? "-");
|
|
||||||
// Border tiap baris
|
|
||||||
$sheet->getStyle("A{$row}:P{$row}")->getBorders()->getAllBorders()
|
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
$totalPendapatan += $item?->order?->total_harga;
|
|
||||||
$row++;
|
|
||||||
}
|
|
||||||
$sheet->getStyle("L{$row}:O{$row}")->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle("L{$row}:O{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
$sheet->setCellValue("M{$row}", 'Total Pendapatan');
|
|
||||||
$sheet->setCellValue("O{$row}", $totalPendapatan);
|
|
||||||
|
|
||||||
// Auto size kolom
|
|
||||||
foreach(range('A', 'P') as $col){
|
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
|
||||||
}
|
|
||||||
$lastRow = $row - 1;
|
|
||||||
$sheet->setAutoFilter("A4:P{$lastRow}");
|
|
||||||
// Download file
|
|
||||||
$fileName = 'menu-pesanan' . now()->format('Ymd-His') . '.xlsx';
|
|
||||||
$writer = new Xlsx($spreadsheet);
|
|
||||||
|
|
||||||
// Output ke browser
|
|
||||||
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
||||||
header("Content-Disposition: attachment; filename=\"{$fileName}\"");
|
|
||||||
header('Cache-Control: max-age=0');
|
|
||||||
|
|
||||||
$writer->save('php://output');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function exportPending(){
|
public function exportPending(){
|
||||||
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
||||||
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
||||||
$type = request('type');
|
$order = Order::where('statusenabled', true)
|
||||||
$type_customer = request('type_customer');
|
|
||||||
$query = Order::where('statusenabled', true)
|
|
||||||
->whereBetween('entry_at', [$startDate, $endDate])
|
->whereBetween('entry_at', [$startDate, $endDate])
|
||||||
->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing', 'Menunggu Konfirmasi Pesanan MCU']);
|
->with('orderDetail')
|
||||||
if($type_customer !== 'all'){
|
->whereHas('orderDetail', function($q) {
|
||||||
$query->where('jenis_customer', $type_customer);
|
$q->where('status_order', '!=', 'Selesai');
|
||||||
}
|
})
|
||||||
$order = $query->with('orderDetail')->get();
|
->get();
|
||||||
$title= 'konfirmasi-pesanan';
|
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
||||||
$titlePdf = 'LAPORAN KONFIRMASI PESANAN';
|
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
||||||
if($type === 'pdf'){
|
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
||||||
return $this->pdfHelper($startDate, $endDate, $order, $titlePdf, $title);
|
|
||||||
}else{
|
|
||||||
return $this->excelHelper($startDate, $endDate, $order, $title);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
$data = [
|
||||||
|
'waktu_cetak' => $waktu_cetak,
|
||||||
|
'orders' => $order,
|
||||||
|
'startDate' => $startDateFormatted,
|
||||||
|
'endDate' => $endDateFormatted
|
||||||
|
];
|
||||||
|
$pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data);
|
||||||
|
|
||||||
public function pdfHelper($startDate, $endDate, $order, $titlePdf, $title){
|
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'laporan' => $titlePdf,
|
|
||||||
'waktu_cetak' => $waktu_cetak,
|
|
||||||
'orders' => $order,
|
|
||||||
'startDate' => $startDateFormatted,
|
|
||||||
'endDate' => $endDateFormatted
|
|
||||||
];
|
|
||||||
$pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data);
|
|
||||||
|
|
||||||
return $pdf->stream($title . now()->format('Ymd-His') . '.pdf');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function excelHelper($startDate, $endDate, $order, $title){
|
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$spreadsheet = new Spreadsheet();
|
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
|
||||||
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
|
||||||
$sheet->mergeCells('A1:T1');
|
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
|
||||||
$sheet->mergeCells('A2:T2');
|
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
// Header tabel
|
|
||||||
$headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Ruangan", "Status Pembayaran", "Jenis Kelamin", "NO.HP/WA", "Email" , "Jenis Pembayaran", "Tanggal Pesan", "Harga Total", "Jenis Menu", "Menu Pesanan", "Total Kalori", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"];
|
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
|
||||||
$sheet->getStyle('A4:T4')->applyFromArray([
|
|
||||||
'font' => ['bold' => true],
|
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
|
||||||
'borders' => [
|
|
||||||
'allBorders' => [
|
|
||||||
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$sheet->getStyle('A4:T4')->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle('A4:T4')->getAlignment()->setHorizontal('center');
|
|
||||||
$sheet->getStyle('A4:T4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
// Isi data
|
|
||||||
$totalPendapatan = 0;
|
|
||||||
$row = 5;
|
|
||||||
foreach ($order as $index => $item) {
|
|
||||||
foreach($item->orderDetail as $detail){
|
|
||||||
|
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
|
||||||
$sheet->setCellValue("B{$row}", $item->no_order);
|
|
||||||
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
|
||||||
$sheet->setCellValue("D{$row}", $item->jenis_customer === "MCU" ? $item->nama_institusi . '-' . $item->jenis_customer : $item->jenis_customer);
|
|
||||||
if($item->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){
|
|
||||||
$sheet->setCellValue("E{$row}", $item->kelas_perawatan . '/' . $item->no_kamar_perawatan . '/' . $item->ruang_perawatan);
|
|
||||||
}else if($item->jenis_customer === "Karyawan RSAB Harapan Kita"){
|
|
||||||
$sheet->setCellValue("E{$row}", $item->bagian_instalasi ?? '-');
|
|
||||||
}else{
|
|
||||||
$sheet->setCellValue("E{$row}", '-');
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("F{$row}", $item->status_order);
|
|
||||||
$sheet->setCellValue("G{$row}", $item->jenis_kelamin);
|
|
||||||
$sheet->setCellValue("H{$row}", $item->no_wa);
|
|
||||||
$sheet->setCellValue("I{$row}", $item->email);
|
|
||||||
$sheet->setCellValue("J{$row}", $item->cara_pembayaran);
|
|
||||||
$sheet->setCellValue("K{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
|
||||||
$sheet->setCellValue("L{$row}", $item->total_harga);
|
|
||||||
if($detail?->masterMcu){
|
|
||||||
$sheet->setCellValue("M{$row}", 'Menu MCU');
|
|
||||||
}else{
|
|
||||||
$sheet->setCellValue("M{$row}", $detail?->menu?->apakah_someday ? "Menu Sameday" : "Menu Normal");
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("N{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu);
|
|
||||||
$sheet->setCellValue("O{$row}", $detail?->total_kalori ?? '-');
|
|
||||||
$sheet->setCellValue("P{$row}", $detail?->jumlah ?? '-');
|
|
||||||
$sheet->setCellValue("Q{$row}", $detail?->status_order ?? "-");
|
|
||||||
$sheet->setCellValue("R{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "Tanggal Antar");
|
|
||||||
$sheet->setCellValue("S{$row}", $detail?->type ?? $detail->jam_layanan);
|
|
||||||
$sheet->setCellValue("T{$row}", $detail?->catatan ?? "-");
|
|
||||||
// Border tiap baris
|
|
||||||
$sheet->getStyle("A{$row}:T{$row}")->getBorders()->getAllBorders()
|
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
if($item->status_order === "Lunas"){
|
|
||||||
$totalPendapatan += $item?->total_harga;
|
|
||||||
}
|
|
||||||
$row++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$sheet->getStyle("K{$row}:L{$row}")->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle("K{$row}:L{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
$sheet->setCellValue("K{$row}", 'Total Pendapatan');
|
|
||||||
$sheet->setCellValue("L{$row}", $totalPendapatan);
|
|
||||||
// Auto size kolom
|
|
||||||
foreach(range('A', 'T') as $col){
|
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
|
||||||
}
|
|
||||||
$lastRow = $row - 1;
|
|
||||||
$sheet->setAutoFilter("A4:T{$lastRow}");
|
|
||||||
// Download file
|
|
||||||
$fileName = $title . now()->format('Ymd-His') . '.xlsx';
|
|
||||||
$writer = new Xlsx($spreadsheet);
|
|
||||||
|
|
||||||
// Output ke browser
|
|
||||||
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
||||||
header("Content-Disposition: attachment; filename=\"{$fileName}\"");
|
|
||||||
header('Cache-Control: max-age=0');
|
|
||||||
|
|
||||||
$writer->save('php://output');
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function exportSelesai(){
|
public function exportSelesai(){
|
||||||
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
||||||
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
||||||
$type = request('type');
|
|
||||||
$order = Order::where('statusenabled', true)
|
$order = Order::where('statusenabled', true)
|
||||||
->whereBetween('entry_at', [$startDate, $endDate])
|
->whereBetween('entry_at', [$startDate, $endDate])
|
||||||
->with('orderDetail')
|
->with('orderDetail')
|
||||||
@ -634,460 +334,34 @@ class PesananController extends Controller
|
|||||||
$q->where('status_order', '!=', 'Selesai');
|
$q->where('status_order', '!=', 'Selesai');
|
||||||
})
|
})
|
||||||
->get();
|
->get();
|
||||||
$title= 'pesanan-selesai';
|
|
||||||
$titlePdf = 'LAPORAN PESANAN SELESAI';
|
|
||||||
|
|
||||||
if($type === 'pdf'){
|
|
||||||
return $this->pdfHelper($startDate, $endDate, $order, $titlePdf, $title);
|
|
||||||
}else{
|
|
||||||
return $this->excelHelper($startDate, $endDate, $order, $title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function countKonfirmasiPesanan(){
|
|
||||||
$count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing', 'Menunggu Konfirmasi Pesanan MCU'])->count();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'count' => $count,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function countVerifikasiPesanan(){
|
|
||||||
$count = OrderDetail::where('status_order', 'Pending')->with('order')->whereHas('order', function($q){
|
|
||||||
$q->where('status_order', 'Lunas');
|
|
||||||
})->count();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'count' => $count,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function laporanPesanan(){
|
|
||||||
$data = [
|
|
||||||
'title' => 'Laporan Pesanan'
|
|
||||||
];
|
|
||||||
return view('dashboard.pesanan.laporan.pesanan.index', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLaporanPesanan(){
|
|
||||||
$tanggal = request('tanggal');
|
|
||||||
if(!empty($tanggal)){
|
|
||||||
$tanggalFormatted = collect($tanggal)->map(function ($tgl){
|
|
||||||
return Carbon::parse($tgl)->toDateString();
|
|
||||||
})->toArray();
|
|
||||||
}else{
|
|
||||||
$tanggalFormatted = [Carbon::now()->toDateString()];
|
|
||||||
}
|
|
||||||
$orders = self::helperLaporanPesanan($tanggalFormatted);
|
|
||||||
$grouped = $orders->map(function($items){
|
|
||||||
$first = $items->first();
|
|
||||||
$totalDetail = $items->count();
|
|
||||||
$selesaiDetail = $items->where('detail_status_order', 'Selesai')->count();
|
|
||||||
$progress = $totalDetail > 0 ? round(($selesaiDetail / $totalDetail) * 100) : 0;
|
|
||||||
return [
|
|
||||||
'order_id' => $first->order_id,
|
|
||||||
'entry_at' => $first->entry_at,
|
|
||||||
'no_order' => $first->no_order,
|
|
||||||
'nama_pemesan' => $first->nama_pemesan,
|
|
||||||
'jenis_customer' => $first->jenis_customer,
|
|
||||||
'total_harga' => $first->total_harga,
|
|
||||||
'status_order' => $first->status_order,
|
|
||||||
'bukti_pembayaran' => $first->bukti_pembayaran,
|
|
||||||
'cara_pembayaran' => $first->cara_pembayaran,
|
|
||||||
'medical_record' => $first->medical_record,
|
|
||||||
'evidence_medical_record' => $first->evidence_medical_record,
|
|
||||||
'progress' => $progress,
|
|
||||||
'total_detail' => $totalDetail,
|
|
||||||
'selesai_detail' => $selesaiDetail,
|
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
|
||||||
'nama_institusi' => $first->nama_institusi,
|
|
||||||
];
|
|
||||||
})
|
|
||||||
->values();
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'rows' => $grouped->values(),
|
|
||||||
'total' => $grouped->count()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function helperLaporanPesanan($tanggalFormatted){
|
|
||||||
$data = DB::connection('dbOrderGizi')->table('public.order as o')
|
|
||||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
|
||||||
->where(['o.statusenabled' => true, 'o.status_order' => 'Lunas'])
|
|
||||||
->whereRaw(
|
|
||||||
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
|
|
||||||
$tanggalFormatted
|
|
||||||
)
|
|
||||||
->select(
|
|
||||||
'o.order_id',
|
|
||||||
'o.entry_at',
|
|
||||||
'o.no_order',
|
|
||||||
'o.nama_pemesan',
|
|
||||||
'o.jenis_customer',
|
|
||||||
'o.total_harga',
|
|
||||||
'o.cara_pembayaran',
|
|
||||||
'o.status_order',
|
|
||||||
'o.bukti_pembayaran',
|
|
||||||
'o.note_dibatalkan',
|
|
||||||
'o.medical_record',
|
|
||||||
'o.evidence_medical_record',
|
|
||||||
'o.nama_institusi',
|
|
||||||
'od.status_order as detail_status_order'
|
|
||||||
)->get()->groupBy('order_id');
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exportLaporanPesanan(){
|
|
||||||
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
|
||||||
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
|
||||||
$type = request('type');
|
|
||||||
$type_customer = request('type_customer');
|
|
||||||
$query = Order::where('statusenabled', true)->where('status_order', 'Lunas');
|
|
||||||
|
|
||||||
if($type_customer !== 'all'){
|
|
||||||
$query->where('jenis_customer', $type_customer);
|
|
||||||
}
|
|
||||||
|
|
||||||
$order = $query->whereBetween('entry_at', [$startDate, $endDate])->with('orderDetail')->get();
|
|
||||||
|
|
||||||
if($type === 'pdf'){
|
|
||||||
return $this->pdfPesanan($startDate, $endDate, $order);
|
|
||||||
}else{
|
|
||||||
return $this->excelPesanan($startDate, $endDate, $order);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pdfPesanan($startDate, $endDate, $order){
|
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'laporan' => 'Laporan Pesanan',
|
|
||||||
'waktu_cetak' => $waktu_cetak,
|
'waktu_cetak' => $waktu_cetak,
|
||||||
'orders' => $order,
|
'orders' => $order,
|
||||||
'startDate' => $startDateFormatted,
|
'startDate' => $startDateFormatted,
|
||||||
'endDate' => $endDateFormatted
|
'endDate' => $endDateFormatted
|
||||||
];
|
];
|
||||||
$pdf = Pdf::loadView('dashboard.pesanan.laporan.pesanan.pdfPesanan', $data);
|
$pdf = Pdf::loadView('dashboard.pesanan.selesai.pdf', $data);
|
||||||
|
|
||||||
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
|
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function excelPesanan($startDate, $endDate, $order){
|
public function countPesananPending(){
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
$count = Order::where('statusenabled', true)->whereIn('status_order', ['Menunggu Konfirmasi Pembayaran', 'Menunggu Konfirmasi Pembayaran Via Billing'])->count();
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$spreadsheet = new Spreadsheet();
|
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
|
||||||
|
|
||||||
$sheet->setCellValue('A1', "Laporan Pesanan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
|
||||||
$sheet->mergeCells('A1:R1');
|
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
|
||||||
$sheet->mergeCells('A2:S2');
|
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
// Header tabel
|
|
||||||
$headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Ruangan", "Jenis Kelamin", "NO.HP/WA", "Email" , "Jenis Pembayaran", "Tanggal Pesan", "Harga Total", "Jenis Menu", "Menu Pesanan", "Total Kalori (kal)", "Jumlah", "Status Pesanan", "Tanggal Antar", "Waktu Makan / Jam Layanan", "Catatan"];
|
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
|
||||||
$sheet->getStyle('A4:S4')->applyFromArray([
|
|
||||||
'font' => ['bold' => true],
|
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
|
||||||
'borders' => [
|
|
||||||
'allBorders' => [
|
|
||||||
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$sheet->getStyle('A4:S4')->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle('A4:S4')->getAlignment()->setHorizontal('center');
|
|
||||||
$sheet->getStyle('A4:S4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
|
|
||||||
// Isi data
|
|
||||||
$row = 5;
|
|
||||||
$totalPendapatan = 0;
|
|
||||||
foreach ($order as $index => $item) {
|
|
||||||
foreach($item->orderDetail as $detail){
|
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
|
||||||
$sheet->setCellValue("B{$row}", $item->no_order);
|
|
||||||
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
|
||||||
$sheet->setCellValue("D{$row}", $item->jenis_customer === "MCU" ? $item->nama_institusi . '-' . $item->jenis_customer : $item->jenis_customer);
|
|
||||||
if($item->jenis_customer === "Keluarga Pasien / Penunggu Pasien"){
|
|
||||||
$sheet->setCellValue("E{$row}", $item->kelas_perawatan . '/' . $item->no_kamar_perawatan . '/' . $item->ruang_perawatan);
|
|
||||||
}else if($item->jenis_customer === "Karyawan RSAB Harapan Kita"){
|
|
||||||
$sheet->setCellValue("E{$row}", $item->bagian_instalasi ?? '-');
|
|
||||||
}else{
|
|
||||||
$sheet->setCellValue("E{$row}", '-');
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("F{$row}", $item->jenis_kelamin);
|
|
||||||
$sheet->setCellValue("G{$row}", $item->no_wa);
|
|
||||||
$sheet->setCellValue("H{$row}", $item->email);
|
|
||||||
$sheet->setCellValue("I{$row}", $item->cara_pembayaran);
|
|
||||||
$sheet->setCellValue("J{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
|
||||||
$sheet->setCellValue("K{$row}", $item->total_harga);
|
|
||||||
|
|
||||||
if($detail?->masterMcu){
|
|
||||||
$sheet->setCellValue("L{$row}", 'Menu MCU');
|
|
||||||
}else{
|
|
||||||
$sheet->setCellValue("L{$row}", $detail?->menu?->apakah_someday ? "Menu Sameday" : "Menu Normal");
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("M{$row}", $detail?->menu?->nama_menu ?? $detail?->masterMcu?->nama_mcu);
|
|
||||||
$sheet->setCellValue("N{$row}", $detail?->total_kalori ?? '-');
|
|
||||||
$sheet->setCellValue("O{$row}", $detail?->jumlah ?? '-');
|
|
||||||
$sheet->setCellValue("P{$row}", $detail?->status_order ?? "-");
|
|
||||||
$sheet->setCellValue("Q{$row}", $detail?->tgl_antar ? Carbon::parse($item->tgl_antar)->translatedFormat('d F Y') : "-");
|
|
||||||
$sheet->setCellValue("R{$row}", $detail?->type ?? $detail->jam_layanan);
|
|
||||||
$sheet->setCellValue("S{$row}", $detail?->catatan ?? "-");
|
|
||||||
// Border tiap baris
|
|
||||||
$sheet->getStyle("A{$row}:S{$row}")->getBorders()->getAllBorders()
|
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
$totalPendapatan += $item->total_harga;
|
|
||||||
$row++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$sheet->getStyle("I{$row}:K{$row}")->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle("I{$row}:K{$row}")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
$sheet->setCellValue("I{$row}", 'Total Pendapatan');
|
|
||||||
$sheet->setCellValue("K{$row}", $totalPendapatan);
|
|
||||||
// dd($totalPendapatan);
|
|
||||||
// Auto size kolom
|
|
||||||
foreach(range('A', 'S') as $col){
|
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
|
||||||
}
|
|
||||||
$lastRow = $row - 1;
|
|
||||||
$sheet->setAutoFilter("A4:S{$lastRow}");
|
|
||||||
// Download file
|
|
||||||
$fileName = 'laporan-pesanan-' . now()->format('Ymd-His') . '.xlsx';
|
|
||||||
$writer = new Xlsx($spreadsheet);
|
|
||||||
|
|
||||||
// Output ke browser
|
|
||||||
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
||||||
header("Content-Disposition: attachment; filename=\"{$fileName}\"");
|
|
||||||
header('Cache-Control: max-age=0');
|
|
||||||
|
|
||||||
$writer->save('php://output');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exportLaporanPendapatan(){
|
|
||||||
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
|
||||||
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
|
||||||
$type = request('type');
|
|
||||||
$type_customer = request('type_customer');
|
|
||||||
$query = Order::where('statusenabled', true)->where('status_order', 'Lunas');
|
|
||||||
if($type_customer !== 'all'){
|
|
||||||
$query->where('jenis_customer', $type_customer);
|
|
||||||
}
|
|
||||||
$order = $query->whereBetween('entry_at', [$startDate, $endDate])->get();
|
|
||||||
|
|
||||||
if($type === 'pdf'){
|
|
||||||
return $this->pdfPendapatan($startDate, $endDate, $order);
|
|
||||||
}else{
|
|
||||||
return $this->excelPendapatan($startDate, $endDate, $order);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exportSemuaPesanan(){
|
|
||||||
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
|
||||||
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
|
||||||
$type = request('type');
|
|
||||||
$type_customer = request('type_customer');
|
|
||||||
$query = Order::where('statusenabled', true)
|
|
||||||
->whereBetween('entry_at', [$startDate, $endDate]);
|
|
||||||
if($type_customer !== 'all'){
|
|
||||||
$query->where('jenis_customer', $type_customer);
|
|
||||||
}
|
|
||||||
$order = $query->with('orderDetail')->get();
|
|
||||||
$title= 'semua-pesanan';
|
|
||||||
$titlePdf = 'LAPORAN SEMUA PESANAN';
|
|
||||||
if($type === 'pdf'){
|
|
||||||
return $this->pdfHelper($startDate, $endDate, $order, $titlePdf, $title);
|
|
||||||
}else{
|
|
||||||
return $this->excelHelper($startDate, $endDate, $order, $title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pdfPendapatan($startDate, $endDate, $order){
|
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$data = [
|
|
||||||
'laporan' => 'Laporan Pendapatan',
|
|
||||||
'waktu_cetak' => $waktu_cetak,
|
|
||||||
'orders' => $order,
|
|
||||||
'startDate' => $startDateFormatted,
|
|
||||||
'endDate' => $endDateFormatted
|
|
||||||
];
|
|
||||||
$pdf = Pdf::loadView('dashboard.pesanan.laporan.pesanan.pdfPendapatan', $data);
|
|
||||||
|
|
||||||
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function excelPendapatan($startDate, $endDate, $order){
|
|
||||||
$startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y');
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$spreadsheet = new Spreadsheet();
|
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
|
||||||
|
|
||||||
$sheet->setCellValue('A1', "Laporan Pendapatan dari {$startDateFormatted} sampai {$endDateFormatted}");
|
|
||||||
$sheet->mergeCells('A1:G1');
|
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
|
||||||
$sheet->mergeCells('A2:G2');
|
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
// Header tabel
|
|
||||||
$headers = ["No", "Nomor Order", "Nama Pemesan", "Jenis Customer", "Cara Pembayaran", "Tanggal Pesan", "Harga Total"];
|
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
|
||||||
$sheet->getStyle('A4:G4')->applyFromArray([
|
|
||||||
'font' => ['bold' => true],
|
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
|
||||||
'borders' => [
|
|
||||||
'allBorders' => [
|
|
||||||
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$sheet->getStyle('A4:G4')->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle('A4:G4')->getAlignment()->setHorizontal('center');
|
|
||||||
$sheet->getStyle('A4:G4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
|
|
||||||
// Isi data
|
|
||||||
$row = 5;
|
|
||||||
$totalPendapatan = 0;
|
|
||||||
foreach ($order as $index => $item) {
|
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
|
||||||
$sheet->setCellValue("B{$row}", $item->no_order);
|
|
||||||
$sheet->setCellValue("C{$row}", $item->nama_pemesan);
|
|
||||||
$sheet->setCellValue("D{$row}", $item->jenis_customer === "MCU" ? $item->nama_institusi . ' - ' . $item->jenis_customer : $item->jenis_customer);
|
|
||||||
$sheet->setCellValue("E{$row}", $item->cara_pembayaran);
|
|
||||||
$sheet->setCellValue("F{$row}", Carbon::parse($item->entry_at)->translatedFormat('d F Y H:i'));
|
|
||||||
$sheet->setCellValue("G{$row}", $item->total_harga);
|
|
||||||
$totalPendapatan += $item->total_harga;
|
|
||||||
// Border tiap baris
|
|
||||||
$sheet->getStyle("A{$row}:G{$row}")->getBorders()->getAllBorders()
|
|
||||||
->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
$row++;
|
|
||||||
}
|
|
||||||
$sheet->setCellValue("F{$row}", "Total Pendapatan");
|
|
||||||
$sheet->setCellValue("G{$row}", $totalPendapatan);
|
|
||||||
$sheet->getStyle("F{$row}:G{$row}")->applyFromArray([
|
|
||||||
'font' => ['bold' => true],
|
|
||||||
'borders' => [
|
|
||||||
'allBorders' => [
|
|
||||||
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
// Auto size kolom
|
|
||||||
foreach(range('A', 'G') as $col){
|
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
|
||||||
}
|
|
||||||
$lastRow = $row - 1;
|
|
||||||
$sheet->setAutoFilter("A4:G{$lastRow}");
|
|
||||||
// Download file
|
|
||||||
$fileName = 'laporan-pendapatan-' . now()->format('Ymd-His') . '.xlsx';
|
|
||||||
$writer = new Xlsx($spreadsheet);
|
|
||||||
|
|
||||||
// Output ke browser
|
|
||||||
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
||||||
header("Content-Disposition: attachment; filename=\"{$fileName}\"");
|
|
||||||
header('Cache-Control: max-age=0');
|
|
||||||
|
|
||||||
$writer->save('php://output');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function indexSemua(){
|
|
||||||
$payload = [
|
|
||||||
'title' => 'Semua Pesanan',
|
|
||||||
];
|
|
||||||
return view('dashboard.pesanan.semua.index', $payload);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getSemuaPekerjaan(){
|
|
||||||
$tanggal = request('tanggal');
|
|
||||||
if(!empty($tanggal)){
|
|
||||||
$tanggalFormatted = collect($tanggal)->map(function ($tgl){
|
|
||||||
return Carbon::parse($tgl)->toDateString();
|
|
||||||
})->toArray();
|
|
||||||
}else{
|
|
||||||
$tanggalFormatted = [Carbon::now()->toDateString()];
|
|
||||||
}
|
|
||||||
$orders = DB::connection('dbOrderGizi')->table('public.order as o')
|
|
||||||
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
|
|
||||||
->where(['o.statusenabled' => true])
|
|
||||||
->whereRaw(
|
|
||||||
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
|
|
||||||
$tanggalFormatted
|
|
||||||
)
|
|
||||||
->select(
|
|
||||||
'o.order_id',
|
|
||||||
'o.entry_at',
|
|
||||||
'o.no_order',
|
|
||||||
'o.nama_pemesan',
|
|
||||||
'o.jenis_customer',
|
|
||||||
'o.total_harga',
|
|
||||||
'o.cara_pembayaran',
|
|
||||||
'o.status_order',
|
|
||||||
'o.bukti_pembayaran',
|
|
||||||
'o.note_dibatalkan',
|
|
||||||
'o.medical_record',
|
|
||||||
'o.evidence_medical_record',
|
|
||||||
'o.nama_institusi',
|
|
||||||
'od.status_order as detail_status_order'
|
|
||||||
)->get()->groupBy('order_id');
|
|
||||||
|
|
||||||
$grouped = $orders->map(function($items){
|
|
||||||
$first = $items->first();
|
|
||||||
$totalDetail = $items->count();
|
|
||||||
$selesaiDetail = $items->where('detail_status_order', 'Selesai')->count();
|
|
||||||
$progress = $totalDetail > 0 ? round(($selesaiDetail / $totalDetail) * 100) : 0;
|
|
||||||
return [
|
|
||||||
'order_id' => $first->order_id,
|
|
||||||
'entry_at' => $first->entry_at,
|
|
||||||
'no_order' => $first->no_order,
|
|
||||||
'nama_pemesan' => $first->nama_pemesan,
|
|
||||||
'jenis_customer' => $first->jenis_customer,
|
|
||||||
'total_harga' => $first->total_harga,
|
|
||||||
'status_order' => $first->status_order,
|
|
||||||
'bukti_pembayaran' => $first->bukti_pembayaran,
|
|
||||||
'cara_pembayaran' => $first->cara_pembayaran,
|
|
||||||
'medical_record' => $first->medical_record,
|
|
||||||
'evidence_medical_record' => $first->evidence_medical_record,
|
|
||||||
'progress' => $progress,
|
|
||||||
'total_detail' => $totalDetail,
|
|
||||||
'selesai_detail' => $selesaiDetail,
|
|
||||||
'note_dibatalkan' => $first->note_dibatalkan,
|
|
||||||
'nama_institusi' => $first->nama_institusi,
|
|
||||||
];
|
|
||||||
})
|
|
||||||
->values();
|
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'rows' => $grouped->values(),
|
'count' => $count,
|
||||||
'total' => $grouped->count()
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function downloadLabel(){
|
public function downloadLabel(Request $request){
|
||||||
$data = request('data');
|
$items = $request->input('items');
|
||||||
$dataArray = explode(',', $data);
|
|
||||||
$orderDetail = OrderDetail::whereIn('order_detail_id', $dataArray)->with(['masterMcu', 'menu', 'order'])->get();
|
|
||||||
$pdf = Pdf::loadView('dashboard.label.multi', compact('orderDetail'));
|
|
||||||
|
|
||||||
return $pdf->stream('label_.pdf');
|
dd(json_encode($items));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Show the form for creating a new resource.
|
* Show the form for creating a new resource.
|
||||||
|
|||||||
@ -1,178 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use App\Models\Survey;
|
|
||||||
use Carbon\Carbon;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
||||||
|
|
||||||
class SurveyController extends Controller
|
|
||||||
{
|
|
||||||
public function index(Request $request){
|
|
||||||
if(!session()->has('payment_success')){
|
|
||||||
return redirect('/');
|
|
||||||
}
|
|
||||||
$no_order = $request->query('no_order');
|
|
||||||
$type = $request->query('type');
|
|
||||||
$data = [
|
|
||||||
'title' => 'Survey Gizi',
|
|
||||||
'mcu' => false,
|
|
||||||
'no_order' => $no_order,
|
|
||||||
'type' => $type
|
|
||||||
];
|
|
||||||
return view('guest.survey.index', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function store(){
|
|
||||||
DB::connection('dbOrderGizi')->beginTransaction();
|
|
||||||
try {
|
|
||||||
$payload =[
|
|
||||||
'no_order' => request('no_order'),
|
|
||||||
'type' => request('type'),
|
|
||||||
'keterangan' => request('kritik_saran'),
|
|
||||||
'kepuasan' => request('kepuasan'),
|
|
||||||
'created_at' => now()
|
|
||||||
];
|
|
||||||
Survey::create($payload);
|
|
||||||
DB::connection('dbOrderGizi')->commit();
|
|
||||||
session()->flash('payment_success', true);
|
|
||||||
session()->flash('no_order', $payload['no_order']);
|
|
||||||
return response()->json([
|
|
||||||
'status' => true,
|
|
||||||
'message' => 'Survei berhasil disimpan'
|
|
||||||
]);
|
|
||||||
} catch (\Throwable $th) {
|
|
||||||
DB::connection('dbOrderGizi')->rollBack();
|
|
||||||
return response()->json([
|
|
||||||
'status' => false,
|
|
||||||
'message' => 'Data gagal disimpan ' . $th->getMessage()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function datatable(){
|
|
||||||
$data = Survey::query();
|
|
||||||
$tanggal = request('tanggal');
|
|
||||||
if(!empty($tanggal)){
|
|
||||||
$flattened = is_array($tanggal[0]) ? Arr::flatten($tanggal) : $tanggal;
|
|
||||||
$data->whereIn(DB::raw('DATE(created_at)'), $flattened);
|
|
||||||
}else{
|
|
||||||
$now = Carbon::now()->format('Y-m-d');
|
|
||||||
$data->whereDate('created_at', $now);
|
|
||||||
}
|
|
||||||
$data = $data->get();
|
|
||||||
return response()->json([
|
|
||||||
'rows' => $data->values(),
|
|
||||||
'total' => $data->count(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function chartDataSurvey(Request $request)
|
|
||||||
{
|
|
||||||
$tanggal = $request->query('tanggal');
|
|
||||||
if(is_string($tanggal)) $tanggal = json_decode($tanggal, true);
|
|
||||||
|
|
||||||
$query = Survey::query();
|
|
||||||
if (!empty($tanggal) && is_array($tanggal)) {
|
|
||||||
$query->whereIn(DB::raw('DATE(created_at)'), $tanggal);
|
|
||||||
} else {
|
|
||||||
$query->whereDate('created_at', Carbon::today());
|
|
||||||
}
|
|
||||||
|
|
||||||
$allData = $query->get();
|
|
||||||
|
|
||||||
// Pisahkan data untuk perhitungan Card
|
|
||||||
$dataBaru = $allData->where('type', 'pengguna_baru');
|
|
||||||
$dataLama = $allData->where('type', 'pelanggan_setia');
|
|
||||||
|
|
||||||
return response()->json([
|
|
||||||
'responden' => [
|
|
||||||
'baru' => $dataBaru->count(),
|
|
||||||
'lama' => $dataLama->count(),
|
|
||||||
],
|
|
||||||
'kepuasan_baru' => [
|
|
||||||
'total' => $dataBaru->count(),
|
|
||||||
'puas' => $dataBaru->where('kepuasan', 'Puas')->count(),
|
|
||||||
'tidak_puas' => $dataBaru->where('kepuasan', 'Tidak Puas')->count(),
|
|
||||||
],
|
|
||||||
'kepuasan_lama' => [
|
|
||||||
'total' => $dataLama->count(),
|
|
||||||
'puas' => $dataLama->where('kepuasan', 'Puas')->count(),
|
|
||||||
'tidak_puas' => $dataLama->where('kepuasan', 'Tidak Puas')->count(),
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function dashboardSurvey(){
|
|
||||||
$data = [
|
|
||||||
'title' => 'List Survey Order Gizi'
|
|
||||||
];
|
|
||||||
return view('dashboard.survey.index', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exportSurveyExcel(){
|
|
||||||
$startDate = Carbon::parse(request('start_date'))->startOfDay();
|
|
||||||
$endDate = Carbon::parse(request('end_date'))->endOfDay();
|
|
||||||
$data = Survey::whereBetween('created_at', [$startDate, $endDate])->get();
|
|
||||||
$waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y');
|
|
||||||
$spreadsheet = new Spreadsheet();
|
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
|
||||||
$sheet->setCellValue('A1', "Laporan Survei dari {$startDate->format('Y-m-d')} sampai {$endDate->format('Y-m-d')}");
|
|
||||||
$sheet->mergeCells('A1:E1');
|
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
$sheet->setCellValue('A2', "Waktu Cetak: {$waktu_cetak}");
|
|
||||||
$sheet->mergeCells('A2:E2');
|
|
||||||
$sheet->getStyle('A2')->getAlignment()->setHorizontal('center');
|
|
||||||
|
|
||||||
// Header tabel
|
|
||||||
$headers = ["No", "Nama", "Tipe Survei", "Kepuasan", "Kritik dan Saran"];
|
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
|
||||||
$sheet->getStyle('A4:E4')->applyFromArray([
|
|
||||||
'font' => ['bold' => true],
|
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
|
||||||
'borders' => [
|
|
||||||
'allBorders' => [
|
|
||||||
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
$sheet->getStyle('A4:E4')->getFont()->setBold(true);
|
|
||||||
$sheet->getStyle('A4:E4')->getAlignment()->setHorizontal('center');
|
|
||||||
$sheet->getStyle('A4:E4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
|
||||||
// Isi data
|
|
||||||
$row = 5;
|
|
||||||
foreach ($data as $index => $item) {
|
|
||||||
$sheet->setCellValue("A{$row}", $index + 1);
|
|
||||||
$sheet->setCellValue("B{$row}", $item->order->nama_pemesan);
|
|
||||||
$sheet->setCellValue("C{$row}", $item->type === "pelanggan_setia" ? "Pelanggan Setia" : "Pengguna Baru");
|
|
||||||
$sheet->setCellValue("D{$row}", $item->kepuasan);
|
|
||||||
$sheet->setCellValue("E{$row}", $item->keterangan);
|
|
||||||
$row++;
|
|
||||||
}
|
|
||||||
// Auto size kolom
|
|
||||||
foreach(range('A', 'E') as $col){
|
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
|
||||||
}
|
|
||||||
$lastRow = $row - 1;
|
|
||||||
$sheet->setAutoFilter("A4:E{$lastRow}");
|
|
||||||
// Download file
|
|
||||||
$fileName = "Laporan Survei {$startDate->format('Y-m-d')} sampai {$endDate->format('Y-m-d')} ". '.xlsx';
|
|
||||||
$writer = new Xlsx($spreadsheet);
|
|
||||||
|
|
||||||
// Output ke browser
|
|
||||||
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
||||||
header("Content-Disposition: attachment; filename=\"{$fileName}\"");
|
|
||||||
header('Cache-Control: max-age=0');
|
|
||||||
|
|
||||||
$writer->save('php://output');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -30,11 +30,44 @@ class NotifikasiCustomer extends Mailable
|
|||||||
* Get the message content definition.
|
* Get the message content definition.
|
||||||
*/
|
*/
|
||||||
public function build(){
|
public function build(){
|
||||||
return $this->subject('Konfirmasi Pesanan Anda')->view('mail_view.customer')
|
return $this->subject('Konfirmasi Pesanan Anda')->html("
|
||||||
->with([
|
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
|
||||||
'pemesan' => $this->pemesan,
|
<h2 style='color: #28a745;'>✅ Pesanan Berhasil!</h2>
|
||||||
'noOrder' => $this->noOrder,
|
<p>Halo, <strong>{$this->pemesan}</strong>,</p>
|
||||||
'total_harga' => $this->total_harga
|
<p>Terima kasih telah melakukan pemesanan. Berikut detail pesanan Anda:</p>
|
||||||
]);
|
|
||||||
|
<table style='width: 100%; border-collapse: collapse; margin-top: 16px;'>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>No. Order</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>{$this->noOrder}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Tanggal</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>" . now()->format('d M Y H:i') . "</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Status</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Menunggu Pembayaran</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Nominal Harus Bayar</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Rp ". number_format($this->total_harga, 0,',', '.')
|
||||||
|
."</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p style='margin-top: 24px;'>Silakan segera lakukan pembayaran ke rekening berikut:</p>
|
||||||
|
<ul style='list-style: none; padding: 0;'>
|
||||||
|
<li><strong>Bank:</strong> BCA</li>
|
||||||
|
<li><strong>Nomor Rekening:</strong> 1234-5678-9101</li>
|
||||||
|
<li><strong>Atas Nama:</strong> RSAB Harapan Kita</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p style='margin-top: 24px; font-size: 14px; color: #555;'>Jika Anda tidak merasa melakukan pesanan ini, abaikan email ini.</p>
|
||||||
|
|
||||||
|
<hr style='margin-top: 40px;'>
|
||||||
|
<p style='text-align: center; font-size: 12px; color: #888;'>© " . date('Y') . " RSAB Harapan Kita</p>
|
||||||
|
</div>
|
||||||
|
");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,13 +30,32 @@ class NotifikasiKonfirmasiPembayaran extends Mailable
|
|||||||
* Get the message content definition.
|
* Get the message content definition.
|
||||||
*/
|
*/
|
||||||
public function build(){
|
public function build(){
|
||||||
return $this->subject('Pembayaran Telah Dikonfirmasi')
|
return $this->subject('Pembayaran Telah Dikonfirmasi')->html("
|
||||||
->view('mail_view.konfirmasi_pesanan')
|
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
|
||||||
->with([
|
<h2 style='color: #28a745;'>✅ Pembayaran Berhasil Diverifikasi</h2>
|
||||||
'pemesan' => $this->pemesan,
|
<p>Halo, <strong>{$this->pemesan}</strong>,</p>
|
||||||
'noOrder' => $this->noOrder,
|
<p>Pembayaran kamu untuk pesanan <strong>#{$this->noOrder}</strong> telah berhasil kami verifikasi.</p>
|
||||||
'total_harga' => $this->total_harga,
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
<table style='margin-top: 16px; width: 100%; border-collapse: collapse;'>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Nomor Order</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>{$this->noOrder}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Total Pembayaran</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Rp " . number_format($this->total_harga, 0, ',', '.') . "</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd;'>Status</td>
|
||||||
|
<td style='padding: 8px; border: 1px solid #ddd; color: green;'>Pembayaran Diterima</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p style='margin-top: 24px;'>Pesanan kamu sedang kami proses. Silakan tunggu pemberitahuan berikutnya untuk pengambilan makanan.</p>
|
||||||
|
|
||||||
|
<hr style='margin-top: 40px;'>
|
||||||
|
<p style='text-align: center; font-size: 12px; color: #888;'>© " . date('Y') . " RSAB Harapan Kita</p>
|
||||||
|
</div>
|
||||||
|
");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,10 +28,20 @@ class NotifikasiPembayaran extends Mailable
|
|||||||
* Get the message content definition.
|
* Get the message content definition.
|
||||||
*/
|
*/
|
||||||
public function build(){
|
public function build(){
|
||||||
return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->view('mail_view.pembayaran')
|
return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->html("
|
||||||
->with([
|
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 24px;'>
|
||||||
'pemesan' => $this->pemesan,
|
<h2 style='color: #0787ffff;'>Menunggu Konfirmasi Pembayaran</h2>
|
||||||
'noOrder' => $this->noOrder,
|
<p>Halo, <strong>{$this->pemesan}</strong>,</p>
|
||||||
]);
|
<p>Kami telah menerima bukti pembayaran untuk pesanan kamu dengan nomor <strong>{$this->noOrder}</strong>.</p>
|
||||||
|
<p><strong>Tim kami akan segera memverifikasi pembayaran tersebut.</strong></p>
|
||||||
|
|
||||||
|
<p style='margin-top: 16px;'>Mohon tunggu konfirmasi selanjutnya dari admin. Kami akan kirimkan email ketika pembayaran telah diverifikasi.</p>
|
||||||
|
|
||||||
|
<p style='margin-top: 32px; font-size: 14px; color: #555;'>Terima kasih telah melakukan pemesanan.</p>
|
||||||
|
|
||||||
|
<hr style='margin-top: 40px;'>
|
||||||
|
<p style='text-align: center; font-size: 12px; color: #888;'>© " . date('Y') . " RSAB Harapan Kita</p>
|
||||||
|
</div>
|
||||||
|
");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class JadwalKonsul extends Model
|
|
||||||
{
|
|
||||||
protected $connection = 'dbOrderGizi';
|
|
||||||
protected $table = 'public.jadwal_konsul';
|
|
||||||
public $timestamps = false;
|
|
||||||
protected $primaryKey = "jadwal_konsul_id";
|
|
||||||
protected $fillable =[
|
|
||||||
'nama_dokter',
|
|
||||||
'status',
|
|
||||||
'statusenabled'
|
|
||||||
];
|
|
||||||
|
|
||||||
public function tglAvailable(){
|
|
||||||
return $this->hasMany(JadwalKonsulDetail::class, 'jadwal_konsul_id', 'jadwal_konsul_id');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class JadwalKonsulDetail extends Model
|
|
||||||
{
|
|
||||||
protected $connection = 'dbOrderGizi';
|
|
||||||
protected $table = 'public.jadwal_konsul_detail';
|
|
||||||
public $timestamps = false;
|
|
||||||
protected $primaryKey = "jadwal_konsul_detail_id";
|
|
||||||
protected $fillable =[
|
|
||||||
'jadwal_konsul_id',
|
|
||||||
'tgl_harian'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class Karyawan extends Model
|
|
||||||
{
|
|
||||||
protected $connection = 'dbKaryawan';
|
|
||||||
protected $table = 'public.pegawai_m';
|
|
||||||
public $timestamps = false;
|
|
||||||
protected $primaryKey = "id";
|
|
||||||
protected $guarded =[
|
|
||||||
'id'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -19,6 +19,7 @@ class KategoriKlasifikasiPaketMenu extends Model
|
|||||||
'pegawai_nama_modified',
|
'pegawai_nama_modified',
|
||||||
'statusenabled',
|
'statusenabled',
|
||||||
'kategori_diet_id',
|
'kategori_diet_id',
|
||||||
'master_menu_id'
|
'master_menu_id',
|
||||||
|
'master_paket_menu_id'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ class KlasifikasiMenuKalori extends Model
|
|||||||
'pegawai_nama_modified',
|
'pegawai_nama_modified',
|
||||||
'statusenabled',
|
'statusenabled',
|
||||||
'kalori_id',
|
'kalori_id',
|
||||||
'master_menu_id'
|
'master_menu_id',
|
||||||
|
'master_paket_menu_id'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class MasterMcu extends Model
|
|
||||||
{
|
|
||||||
protected $connection = 'dbOrderGizi';
|
|
||||||
protected $table = 'public.menu_mcu';
|
|
||||||
public $timestamps = false;
|
|
||||||
protected $primaryKey = "menu_mcu_id";
|
|
||||||
protected $fillable =[
|
|
||||||
'nama_mcu',
|
|
||||||
'harga',
|
|
||||||
'statusenabled'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -28,7 +28,7 @@ class Menu extends Model
|
|||||||
'status',
|
'status',
|
||||||
'apakah_someday',
|
'apakah_someday',
|
||||||
'apakah_menu_siang',
|
'apakah_menu_siang',
|
||||||
'apakah_menu_sore',
|
'apakah_menu_sore'
|
||||||
];
|
];
|
||||||
|
|
||||||
public function klasifikasiMenuKalori(){
|
public function klasifikasiMenuKalori(){
|
||||||
|
|||||||
@ -36,11 +36,7 @@ class Order extends Model
|
|||||||
'bagian_instalasi',
|
'bagian_instalasi',
|
||||||
'note_dibatalkan',
|
'note_dibatalkan',
|
||||||
'email',
|
'email',
|
||||||
'alamat',
|
'alamat'
|
||||||
'medical_record',
|
|
||||||
'evidence_medical_record',
|
|
||||||
'nama_institusi',
|
|
||||||
'nip'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $cast = [
|
protected $cast = [
|
||||||
@ -49,6 +45,6 @@ class Order extends Model
|
|||||||
];
|
];
|
||||||
|
|
||||||
public function orderDetail(){
|
public function orderDetail(){
|
||||||
return $this->hasMany(OrderDetail::class, 'order_id')->with('masterMcu', 'menu');
|
return $this->hasMany(OrderDetail::class, 'order_id')->with('paketMenu', 'menu');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ class OrderDetail extends Model
|
|||||||
'modified_at',
|
'modified_at',
|
||||||
'statusenabled',
|
'statusenabled',
|
||||||
'master_menu_id',
|
'master_menu_id',
|
||||||
'menu_mcu_id',
|
'master_paket_menu_id',
|
||||||
'harga_satuan',
|
'harga_satuan',
|
||||||
'jumlah',
|
'jumlah',
|
||||||
'tgl_antar',
|
'tgl_antar',
|
||||||
@ -23,23 +23,20 @@ class OrderDetail extends Model
|
|||||||
'order_id',
|
'order_id',
|
||||||
'status_order',
|
'status_order',
|
||||||
'karbohidrat_id',
|
'karbohidrat_id',
|
||||||
'catatan',
|
'catatan'
|
||||||
'jam_layanan',
|
|
||||||
'total_kalori'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function menu(){
|
public function menu(){
|
||||||
return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto', 'apakah_someday', 'apakah_mcu');
|
return $this->belongsTo(Menu::class, 'master_menu_id', 'master_menu_id')->select('master_menu_id', 'nama_menu', 'foto');
|
||||||
}
|
}
|
||||||
public function karbohidrat(){
|
|
||||||
return $this->belongsTo(Karbohidrat::class, 'karbohidrat_id', 'karbohidrat_id')->select('karbohidrat_id', 'nama_karbohidrat', 'nilai_kalori');
|
public function paketMenu(){
|
||||||
|
return $this->belongsTo(PaketMenu::class, 'master_paket_menu_id', 'master_paket_menu_id')->select('master_paket_menu_id', 'nama_paket', 'foto');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function order(){
|
public function order(){
|
||||||
return $this->belongsTo(Order::class, 'order_id', 'order_id');
|
return $this->belongsTo(Order::class, 'order_id', 'order_id');
|
||||||
}
|
}
|
||||||
public function masterMcu(){
|
|
||||||
return $this->belongsTo(MasterMcu::class, 'menu_mcu_id', 'menu_mcu_id');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class Survey extends Model
|
|
||||||
{
|
|
||||||
protected $connection = 'dbOrderGizi';
|
|
||||||
protected $table = 'public.survey';
|
|
||||||
public $timestamps = false;
|
|
||||||
protected $primaryKey = "id";
|
|
||||||
protected $with = ['order'];
|
|
||||||
protected $fillable =[
|
|
||||||
'no_order',
|
|
||||||
'type',
|
|
||||||
'keterangan',
|
|
||||||
'kepuasan',
|
|
||||||
'created_at'
|
|
||||||
];
|
|
||||||
|
|
||||||
public function order(){
|
|
||||||
return $this->belongsTo(Order::class, 'no_order', 'no_order')->select('no_order', 'nama_pemesan');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -19,6 +19,7 @@ class TanggalMenuTersedia extends Model
|
|||||||
'pegawai_nama_modified',
|
'pegawai_nama_modified',
|
||||||
'statusenabled',
|
'statusenabled',
|
||||||
'tgl_harian',
|
'tgl_harian',
|
||||||
|
'master_paket_menu_id',
|
||||||
'master_menu_id'
|
'master_menu_id'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class UnitInstalasi extends Model
|
|
||||||
{
|
|
||||||
protected $connection = 'dbKaryawan';
|
|
||||||
protected $table = 'public.unitkerjapegawai_m';
|
|
||||||
public $timestamps = false;
|
|
||||||
protected $primaryKey = "id";
|
|
||||||
protected $guarded =[
|
|
||||||
'id'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Blade;
|
|
||||||
use Illuminate\Support\Facades\URL;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
@ -21,10 +19,6 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
Blade::component('dashboard.pesanan.components.modalExport', 'modalExport');
|
//
|
||||||
Blade::component('dashboard.pesanan.components.infoPesanan', 'infoPesanan');
|
|
||||||
if ($this->app->environment('production')) {
|
|
||||||
URL::forceScheme('https');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,6 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
"barryvdh/laravel-dompdf": "^3.1",
|
"barryvdh/laravel-dompdf": "^3.1",
|
||||||
"barryvdh/laravel-snappy": "^1.0",
|
|
||||||
"laravel/framework": "^12.0",
|
"laravel/framework": "^12.0",
|
||||||
"laravel/tinker": "^2.10.1",
|
"laravel/tinker": "^2.10.1",
|
||||||
"phpoffice/phpspreadsheet": "^4.5"
|
"phpoffice/phpspreadsheet": "^4.5"
|
||||||
|
|||||||
147
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "9d83b6a45b530b893999cf984c08fde5",
|
"content-hash": "696ae0d1187bc1634529f1760a11ffd0",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-dompdf",
|
"name": "barryvdh/laravel-dompdf",
|
||||||
@ -83,84 +83,6 @@
|
|||||||
],
|
],
|
||||||
"time": "2025-02-13T15:07:54+00:00"
|
"time": "2025-02-13T15:07:54+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "barryvdh/laravel-snappy",
|
|
||||||
"version": "v1.0.4",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/barryvdh/laravel-snappy.git",
|
|
||||||
"reference": "5b8668e4a54be630973fd309b4cb1abe75a8afbb"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/5b8668e4a54be630973fd309b4cb1abe75a8afbb",
|
|
||||||
"reference": "5b8668e4a54be630973fd309b4cb1abe75a8afbb",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"illuminate/filesystem": "^9|^10|^11|^12",
|
|
||||||
"illuminate/support": "^9|^10|^11|^12",
|
|
||||||
"knplabs/knp-snappy": "^1.4.4",
|
|
||||||
"php": "^8.1"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"orchestra/testbench": "^7|^8|^9|^10"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"laravel": {
|
|
||||||
"aliases": {
|
|
||||||
"PDF": "Barryvdh\\Snappy\\Facades\\SnappyPdf",
|
|
||||||
"SnappyImage": "Barryvdh\\Snappy\\Facades\\SnappyImage"
|
|
||||||
},
|
|
||||||
"providers": [
|
|
||||||
"Barryvdh\\Snappy\\ServiceProvider"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.0-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Barryvdh\\Snappy\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Barry vd. Heuvel",
|
|
||||||
"email": "barryvdh@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Snappy PDF/Image for Laravel",
|
|
||||||
"keywords": [
|
|
||||||
"image",
|
|
||||||
"laravel",
|
|
||||||
"pdf",
|
|
||||||
"snappy",
|
|
||||||
"wkhtmltoimage",
|
|
||||||
"wkhtmltopdf"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/barryvdh/laravel-snappy/issues",
|
|
||||||
"source": "https://github.com/barryvdh/laravel-snappy/tree/v1.0.4"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://fruitcake.nl",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/barryvdh",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2025-02-24T15:20:06+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
"version": "0.13.1",
|
"version": "0.13.1",
|
||||||
@ -1443,73 +1365,6 @@
|
|||||||
],
|
],
|
||||||
"time": "2025-02-03T10:55:03+00:00"
|
"time": "2025-02-03T10:55:03+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "knplabs/knp-snappy",
|
|
||||||
"version": "v1.5.1",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/KnpLabs/snappy.git",
|
|
||||||
"reference": "3dd138e9e47de91cd2e056c5e6e1a0dd72547ee7"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/KnpLabs/snappy/zipball/3dd138e9e47de91cd2e056c5e6e1a0dd72547ee7",
|
|
||||||
"reference": "3dd138e9e47de91cd2e056c5e6e1a0dd72547ee7",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=8.1",
|
|
||||||
"psr/log": "^2.0||^3.0",
|
|
||||||
"symfony/process": "^5.0||^6.0||^7.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"friendsofphp/php-cs-fixer": "^3.0",
|
|
||||||
"pedrotroller/php-cs-custom-fixer": "^2.19",
|
|
||||||
"phpstan/phpstan": "^1.0.0",
|
|
||||||
"phpstan/phpstan-phpunit": "^1.0.0",
|
|
||||||
"phpunit/phpunit": "^8.5"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Knp\\Snappy\\": "src/Knp/Snappy"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "KNP Labs Team",
|
|
||||||
"homepage": "http://knplabs.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "http://github.com/KnpLabs/snappy/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. Wrapper for wkhtmltopdf/wkhtmltoimage.",
|
|
||||||
"homepage": "http://github.com/KnpLabs/snappy",
|
|
||||||
"keywords": [
|
|
||||||
"knp",
|
|
||||||
"knplabs",
|
|
||||||
"pdf",
|
|
||||||
"snapshot",
|
|
||||||
"thumbnail",
|
|
||||||
"wkhtmltopdf"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/KnpLabs/snappy/issues",
|
|
||||||
"source": "https://github.com/KnpLabs/snappy/tree/v1.5.1"
|
|
||||||
},
|
|
||||||
"time": "2025-01-06T16:53:26+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "laravel/framework",
|
"name": "laravel/framework",
|
||||||
"version": "v12.20.0",
|
"version": "v12.20.0",
|
||||||
|
|||||||
@ -16,7 +16,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'default' => env('DB_CONNECTION', 'pgsql'),
|
'default' => env('DB_CONNECTION', 'sqlite'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -152,28 +152,6 @@ return [
|
|||||||
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
||||||
],
|
],
|
||||||
|
|
||||||
'dbKaryawan' => [
|
|
||||||
'driver' => 'pgsql',
|
|
||||||
'url' => env('DB_URL'),
|
|
||||||
'host' => env('DB_HOST_KARYAWAN', '127.0.0.1'),
|
|
||||||
'port' => env('DB_PORT_KARYAWAN', '3306'),
|
|
||||||
'database' => env('DB_DATABASE_KARYAWAN', 'laravel'),
|
|
||||||
'username' => env('DB_USERNAME_KARYAWAN', 'root'),
|
|
||||||
'password' => env('DB_PASSWORD_KARYAWAN', ''),
|
|
||||||
'charset' => env('DB_CHARSET', 'utf8'),
|
|
||||||
'prefix' => '',
|
|
||||||
'prefix_indexes' => true,
|
|
||||||
'search_path' => 'public',
|
|
||||||
'sslmode' => 'prefer',
|
|
||||||
'prefix' => '',
|
|
||||||
'prefix_indexes' => true,
|
|
||||||
'search_path' => 'public',
|
|
||||||
'sslmode' => 'prefer',
|
|
||||||
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
|
||||||
],
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -47,10 +47,6 @@ return [
|
|||||||
'password' => env('MAIL_PASSWORD'),
|
'password' => env('MAIL_PASSWORD'),
|
||||||
'timeout' => null,
|
'timeout' => null,
|
||||||
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
|
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
|
||||||
'timeout' => null,
|
|
||||||
'auth_mode' => null,
|
|
||||||
'verify_peer'=> false,
|
|
||||||
'auto_tls' => false
|
|
||||||
],
|
],
|
||||||
|
|
||||||
'ses' => [
|
'ses' => [
|
||||||
|
|||||||
@ -1,52 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Snappy PDF / Image Configuration
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This option contains settings for PDF generation.
|
|
||||||
|
|
|
||||||
| Enabled:
|
|
||||||
|
|
|
||||||
| Whether to load PDF / Image generation.
|
|
||||||
|
|
|
||||||
| Binary:
|
|
||||||
|
|
|
||||||
| The file path of the wkhtmltopdf / wkhtmltoimage executable.
|
|
||||||
|
|
|
||||||
| Timeout:
|
|
||||||
|
|
|
||||||
| The amount of time to wait (in seconds) before PDF / Image generation is stopped.
|
|
||||||
| Setting this to false disables the timeout (unlimited processing time).
|
|
||||||
|
|
|
||||||
| Options:
|
|
||||||
|
|
|
||||||
| The wkhtmltopdf command options. These are passed directly to wkhtmltopdf.
|
|
||||||
| See https://wkhtmltopdf.org/usage/wkhtmltopdf.txt for all options.
|
|
||||||
|
|
|
||||||
| Env:
|
|
||||||
|
|
|
||||||
| The environment variables to set while running the wkhtmltopdf process.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'pdf' => [
|
|
||||||
'enabled' => true,
|
|
||||||
'binary' => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'),
|
|
||||||
'timeout' => false,
|
|
||||||
'options' => [],
|
|
||||||
'env' => [],
|
|
||||||
],
|
|
||||||
|
|
||||||
'image' => [
|
|
||||||
'enabled' => true,
|
|
||||||
'binary' => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'),
|
|
||||||
'timeout' => false,
|
|
||||||
'options' => [],
|
|
||||||
'env' => [],
|
|
||||||
],
|
|
||||||
|
|
||||||
];
|
|
||||||
92
env_prod
@ -1,92 +0,0 @@
|
|||||||
APP_NAME=Laravel
|
|
||||||
APP_ENV=production
|
|
||||||
APP_KEY=base64:R54Pgs6qwWsP6eKZGCcHNd7rrsSSU0DsWSbFHwaT4Bc=
|
|
||||||
APP_DEBUG=true
|
|
||||||
APP_URL=http://127.0.0.1:8000/
|
|
||||||
APP_TIMEZONE=Asia/Jakarta
|
|
||||||
APP_LOCALE=en
|
|
||||||
APP_FALLBACK_LOCALE=en
|
|
||||||
APP_FAKER_LOCALE=en_US
|
|
||||||
|
|
||||||
APP_MAINTENANCE_DRIVER=file
|
|
||||||
# APP_MAINTENANCE_STORE=database
|
|
||||||
|
|
||||||
PHP_CLI_SERVER_WORKERS=4
|
|
||||||
|
|
||||||
BCRYPT_ROUNDS=12
|
|
||||||
|
|
||||||
LOG_CHANNEL=stack
|
|
||||||
LOG_STACK=single
|
|
||||||
LOG_DEPRECATIONS_CHANNEL=null
|
|
||||||
LOG_LEVEL=debug
|
|
||||||
|
|
||||||
DB_CONNECTION_ORDER_GIZI= pgsql
|
|
||||||
DB_HOST_ORDER_GIZI = 172.16.88.22
|
|
||||||
DB_PORT_ORDER_GIZI = 5432
|
|
||||||
DB_DATABASE_ORDER_GIZI = lms_mutu
|
|
||||||
DB_USERNAME_ORDER_GIZI = simrs
|
|
||||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
|
||||||
|
|
||||||
DB_CONNECTION_AUTH_KARYAWAN = pgsql
|
|
||||||
DB_HOST_KARYAWAN = psql1.rsabhk.lan
|
|
||||||
DB_PORT_KARYAWAN = 5432
|
|
||||||
DB_DATABASE_KARYAWAN = rsab_hk_production
|
|
||||||
DB_USERNAME_KARYAWAN = postgres
|
|
||||||
DB_PASSWORD_KARYAWAN = postgres
|
|
||||||
|
|
||||||
DB_CONNECTION_AUTH_DEV = pgsql
|
|
||||||
DB_HOST_AUTH_DEV = 172.16.88.22
|
|
||||||
DB_PORT_AUTH_DEV = 5432
|
|
||||||
DB_DATABASE_AUTH_DEV = login_auth
|
|
||||||
DB_USERNAME_AUTH_DEV = simrs
|
|
||||||
DB_PASSWORD_AUTH_DEV = @S1mrs.3205@
|
|
||||||
|
|
||||||
|
|
||||||
SESSION_DRIVER=file
|
|
||||||
SESSION_LIFETIME=120
|
|
||||||
SESSION_ENCRYPT=false
|
|
||||||
SESSION_PATH=/
|
|
||||||
SESSION_DOMAIN=null
|
|
||||||
|
|
||||||
BROADCAST_CONNECTION=log
|
|
||||||
FILESYSTEM_DISK=local
|
|
||||||
QUEUE_CONNECTION=database
|
|
||||||
|
|
||||||
CACHE_STORE=database
|
|
||||||
CACHE_DRIVER=file
|
|
||||||
|
|
||||||
# CACHE_PREFIX=
|
|
||||||
|
|
||||||
MEMCACHED_HOST=127.0.0.1
|
|
||||||
|
|
||||||
REDIS_CLIENT=phpredis
|
|
||||||
REDIS_HOST=127.0.0.1
|
|
||||||
REDIS_PASSWORD=null
|
|
||||||
REDIS_PORT=6379
|
|
||||||
|
|
||||||
# MAIL_MAILER=smtp
|
|
||||||
# MAIL_SCHEME=null
|
|
||||||
# MAIL_HOST=smtp.gmail.com
|
|
||||||
# MAIL_PORT=587
|
|
||||||
# MAIL_USERNAME=joko12prasetio@gmail.com
|
|
||||||
# MAIL_PASSWORD="rcss kqic csqb ohok"
|
|
||||||
# MAIL_ENCRYPTION=tls
|
|
||||||
# MAIL_FROM_ADDRESS="joko12prasetio@gmail.com"
|
|
||||||
# MAIL_FROM_NAME="RSAB HK Catering Order Gizi"
|
|
||||||
|
|
||||||
MAIL_MAILER=smtp
|
|
||||||
MAIL_HOST=mail.rsabhk.co.id
|
|
||||||
MAIL_PORT=25
|
|
||||||
MAIL_USERNAME=catering.gizi@rsabhk.co.id
|
|
||||||
MAIL_PASSWORD=Sparman87**
|
|
||||||
MAIL_ENCRYPTION=ssl
|
|
||||||
MAIL_FROM_ADDRESS="catering.gizi@rsabhk.co.id"
|
|
||||||
MAIL_FROM_NAME="RSAB HK Catering Order Gizi"
|
|
||||||
|
|
||||||
AWS_ACCESS_KEY_ID=
|
|
||||||
AWS_SECRET_ACCESS_KEY=
|
|
||||||
AWS_DEFAULT_REGION=us-east-1
|
|
||||||
AWS_BUCKET=
|
|
||||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
|
||||||
|
|
||||||
VITE_APP_NAME="${APP_NAME}"
|
|
||||||
@ -305,7 +305,7 @@ h6 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.header .logo img {
|
.header .logo img {
|
||||||
max-height: 60px;
|
max-height: 36px;
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,10 +347,6 @@ h6 {
|
|||||||
.header .navmenu {
|
.header .navmenu {
|
||||||
order: 3;
|
order: 3;
|
||||||
}
|
}
|
||||||
.header .logo img {
|
|
||||||
max-height: 35px;
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrolled .header {
|
.scrolled .header {
|
||||||
@ -1901,14 +1897,14 @@ section,
|
|||||||
|
|
||||||
/* TOMBOL */
|
/* TOMBOL */
|
||||||
.btn {
|
.btn {
|
||||||
font-size: .7rem !important;
|
font-size: .60rem !important; /* ≈ 10 px */
|
||||||
padding: .5rem .25rem !important;
|
padding: .31rem .41rem !important;
|
||||||
border-radius: .5rem;
|
border-radius: .25rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.d-flex.justify-content-between small { font-size: .65rem; }
|
|
||||||
.d-flex.justify-content-between strong { font-size: .65rem; }
|
|
||||||
|
|
||||||
|
.d-flex.justify-content-between small { font-size: .65rem; }
|
||||||
|
.d-flex.justify-content-between strong { font-size: .65rem; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1930,37 +1926,3 @@ section,
|
|||||||
transform: translateX(-50%) translateY(-2px);
|
transform: translateX(-50%) translateY(-2px);
|
||||||
transition: transform .25s;
|
transition: transform .25s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-loading {
|
|
||||||
pointer-events: none;
|
|
||||||
opacity: 0.8;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-loading::after {
|
|
||||||
content: "";
|
|
||||||
border: 2px solid white;
|
|
||||||
border-top: 2px solid transparent;
|
|
||||||
border-radius: 50%;
|
|
||||||
width: 14px;
|
|
||||||
height: 14px;
|
|
||||||
animation: spin 0.6s linear infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Khusus HP (max 576px) */
|
|
||||||
@media (max-width: 576px) {
|
|
||||||
.btn-loading::after {
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
border-width: 1.5px;
|
|
||||||
}
|
|
||||||
.btn-loading {
|
|
||||||
padding: 4px 8px; /* tombol lebih kecil di HP */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spin {
|
|
||||||
to { transform: rotate(360deg); }
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,6 +1,3 @@
|
|||||||
function checkOrderHref(){
|
function checkOrderHref(){
|
||||||
window.location.href = '/check-order'
|
window.location.href = '/check-order'
|
||||||
}
|
}
|
||||||
function mcu(){
|
|
||||||
window.location.href = '/order-mcu'
|
|
||||||
}
|
|
||||||
|
|||||||
@ -130,11 +130,3 @@
|
|||||||
.tagify__dropdown {
|
.tagify__dropdown {
|
||||||
z-index: 99999 !important;
|
z-index: 99999 !important;
|
||||||
}
|
}
|
||||||
.row-disabled {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Kunci interaksi di semua kolom kecuali Action */
|
|
||||||
.row-disabled td:not(:first-child) {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 258 KiB |
|
Before Width: | Height: | Size: 430 KiB |
|
Before Width: | Height: | Size: 419 KiB |
|
Before Width: | Height: | Size: 421 KiB |
|
Before Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 576 KiB |
|
Before Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 466 KiB |
|
Before Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 758 B After Width: | Height: | Size: 758 B |
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 141 KiB |
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
async function submitOrderToServer(){
|
async function submitOrderToServer(){
|
||||||
const totalHarga = hitungTotalHarga();
|
const totalHarga = hitungTotalHarga();
|
||||||
|
|
||||||
if (sessionStorage.getItem('order_id')) {
|
if (sessionStorage.getItem('order_id')) {
|
||||||
currentStep = 2;
|
currentStep = 2;
|
||||||
showStep(currentStep);
|
showStep(currentStep);
|
||||||
return;
|
return;
|
||||||
@ -32,12 +33,7 @@ async function submitOrderToServer(){
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('message '+error);
|
console.error('message '+error);
|
||||||
Swal.fire({
|
alert('Terdapat kesalahan coba lagi nanti!')
|
||||||
title: 'Gagal!',
|
|
||||||
text: 'Terdapat kesalahan coba lagi nanti!',
|
|
||||||
icon: 'error',
|
|
||||||
confirmButtonText: 'Tutup!'
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,11 +65,6 @@ async function submitOrderToServer(){
|
|||||||
|
|
||||||
$("#checkoutFormFinal").on('submit', async function(e){
|
$("#checkoutFormFinal").on('submit', async function(e){
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
const buttonSubmit = $(this).find('button[type="submit"]')
|
|
||||||
if(buttonSubmit.prop('disabled')) return;
|
|
||||||
buttonSubmit.prop('disabled', true)
|
|
||||||
.html('<i class="fas fa-spinner fa-spin me-2"></i>Memproses...')
|
|
||||||
|
|
||||||
const cara_pembayaran = document.getElementById('cara_pembayaran').value;
|
const cara_pembayaran = document.getElementById('cara_pembayaran').value;
|
||||||
const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value;
|
const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value;
|
||||||
|
|
||||||
@ -83,7 +74,6 @@ async function submitOrderToServer(){
|
|||||||
text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.',
|
text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.',
|
||||||
icon: 'warning',
|
icon: 'warning',
|
||||||
})
|
})
|
||||||
buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,12 +81,6 @@ async function submitOrderToServer(){
|
|||||||
const form = this;
|
const form = this;
|
||||||
|
|
||||||
const formData = new FormData(form);
|
const formData = new FormData(form);
|
||||||
const clearSession = () => {
|
|
||||||
sessionStorage.removeItem('cart');
|
|
||||||
sessionStorage.removeItem('checkout_biodata');
|
|
||||||
sessionStorage.removeItem('order_id');
|
|
||||||
sessionStorage.removeItem('time_order');
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/finish-checkout', {
|
const response = await fetch('/finish-checkout', {
|
||||||
@ -108,41 +92,30 @@ async function submitOrderToServer(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
console.log(result);
|
||||||
|
|
||||||
if (result.status) {
|
if (result.status) {
|
||||||
// ✅ Hapus sessionStorage di client
|
// ✅ Hapus sessionStorage di client
|
||||||
clearSession()
|
sessionStorage.removeItem('cart');
|
||||||
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: '<span style="color: #00796b;">Pesanan Berhasil!</span>',
|
title: 'Pesanan Berhasil!',
|
||||||
|
text: 'Terima kasih, pesanan Anda sedang kami siapkan.',
|
||||||
icon: 'success',
|
icon: 'success',
|
||||||
iconColor: '#2e7d32', // Warna hijau Kemenkes
|
confirmButtonText: 'Berhasil!',
|
||||||
html: `
|
confirmButtonColor: '#28a745'
|
||||||
<p class="text-muted mb-4">Terima kasih, pesanan Anda sedang kami siapkan.</p>
|
}).then(() => {
|
||||||
<div class="p-3 border-0 rounded-4 shadow-sm mb-3" style="background-color: #f1f8f7;">
|
window.location.href = "/success-page"; // kehalaman success
|
||||||
<p class="small fw-bold mb-3 text-uppercase" style="color: #004d40; letter-spacing: 1px;">Bantu Kami Meningkatkan Layanan:</p>
|
});
|
||||||
|
|
||||||
<button type="button" onclick="location.href='/survey?no_order=${result.no_order}&type=pengguna_baru'"
|
|
||||||
class="btn w-100 mb-3 py-3 border-0 shadow-sm transition-hover"
|
|
||||||
style="background-color: #00a99d; color: white; border-radius: 12px;">
|
|
||||||
<div class="fw-bold px-2">Saya Pengguna Baru</div>
|
|
||||||
<div style="font-size: 0.75rem; opacity: 0.9;">Survei kemudahan aplikasi pemesanan</div>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" onclick="location.href='/survey?no_order=${result.no_order}&type=pelanggan_setia'"
|
|
||||||
class="btn w-100 py-3 border-0 shadow-sm transition-hover"
|
|
||||||
style="background-color: #005eb8; color: white; border-radius: 12px;">
|
|
||||||
<div class="fw-bold px-2">Saya Pelanggan Setia</div>
|
|
||||||
<div style="font-size: 0.75rem; opacity: 0.9;">Survei rasa, variasi, dan penampilan menu</div>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
`,
|
|
||||||
showConfirmButton: false,
|
|
||||||
showCancelButton: false,
|
|
||||||
allowOutsideClick: false,
|
|
||||||
allowEscapeKey: false
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
clearSession()
|
sessionStorage.removeItem('cart');
|
||||||
Swal.fire({
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
|
Swal.fire({
|
||||||
title: 'Gagal!',
|
title: 'Gagal!',
|
||||||
text: result.message,
|
text: result.message,
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
@ -152,14 +125,11 @@ async function submitOrderToServer(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
clearSession()
|
sessionStorage.removeItem('cart');
|
||||||
Swal.fire({
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
title: 'Gagal!',
|
sessionStorage.removeItem('order_id');
|
||||||
text: "Terjadi kesalahan saat mengirim data.",
|
sessionStorage.removeItem('time_order');
|
||||||
icon: 'error',
|
console.error(err);
|
||||||
confirmButtonText: 'Tutup!'
|
alert("Terjadi kesalahan saat mengirim data.");
|
||||||
})
|
|
||||||
}finally{
|
|
||||||
buttonSubmit.prop('disabled', false).html('Selesaikan Pesanan');
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,37 +1,20 @@
|
|||||||
$(document).ready(function () {
|
// $(document).ready(function () {
|
||||||
getReminderKonfirmasiPesanan();
|
// getReminderOrder();
|
||||||
getReminderVerifikasiMakanan()
|
// });
|
||||||
});
|
|
||||||
|
|
||||||
const getReminderKonfirmasiPesanan = () => {
|
// const getReminderOrder = () => {
|
||||||
$.ajax({
|
// $.ajax({
|
||||||
url: `/dashboard/count/konfirmasi-pesanan`,
|
// url: `/dashboard/count/pending`,
|
||||||
success: function (response) {
|
// success: function (response) {
|
||||||
|
|
||||||
const button = document.getElementById("konfirmasi_pesanan");
|
// const button = document.getElementById("konfirmasi_pesanan");
|
||||||
let count = response.count;
|
// let count = response.count;
|
||||||
|
|
||||||
button.classList.remove('d-none');
|
// button.classList.remove('d-none');
|
||||||
if(count === 0){
|
// if(count === 0){
|
||||||
button.classList.add('d-none');
|
// button.classList.add('d-none');
|
||||||
}
|
// }
|
||||||
button.innerText = count;
|
// button.innerText = count;
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
};
|
// };
|
||||||
|
|
||||||
const getReminderVerifikasiMakanan = () => {
|
|
||||||
$.ajax({
|
|
||||||
url: `/dashboard/count/verifikasi-pesanan`,
|
|
||||||
success: function (response) {
|
|
||||||
const button = document.getElementById("verifikasi_makanan");
|
|
||||||
let count = response.count;
|
|
||||||
|
|
||||||
button.classList.remove('d-none');
|
|
||||||
if(count === 0){
|
|
||||||
button.classList.add('d-none');
|
|
||||||
}
|
|
||||||
button.innerText = count;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
const datatableMasterJadwalKonsul = $("#datatableMasterJadwalKonsul")
|
|
||||||
|
|
||||||
const formAddJadwalKonsul = $("#formMasterJadwalKonsul")
|
|
||||||
const modalAddJadwalKonsul = document.getElementById("modalMasterJadwalKonsul")
|
|
||||||
|
|
||||||
const modalMasterJadwalKonsulEdit = document.getElementById('modalMasterJadwalKonsulEdit');
|
|
||||||
const formMasterJadwalKonsulEdit = document.getElementById('formMasterJadwalKonsulEdit');
|
|
||||||
|
|
||||||
@ -1,264 +0,0 @@
|
|||||||
// Fungsi inisialisasi Selectize dan Auto-expand
|
|
||||||
function initSelectize(formElement) {
|
|
||||||
const tanggalSelect = formElement.querySelector('.date-input');
|
|
||||||
|
|
||||||
|
|
||||||
if (tanggalSelect) {
|
|
||||||
$(tanggalSelect).selectize({
|
|
||||||
valueField: 'tanggal',
|
|
||||||
labelField: 'tgl',
|
|
||||||
create: true,
|
|
||||||
placeholder: "Masukkan Tanggal...",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
const firstForm = document.querySelector('.form-set');
|
|
||||||
initSelectize(firstForm);
|
|
||||||
});
|
|
||||||
// Fungsi untuk menambah form baru
|
|
||||||
let countForm = 1; // karena form pertama pakai index 0
|
|
||||||
function addFormJadwalKonsul() {
|
|
||||||
const container = document.getElementById('form-sets-container');
|
|
||||||
const original = container.querySelector('.form-set');
|
|
||||||
|
|
||||||
const html = original.outerHTML
|
|
||||||
.replace(/\[0\]/g, `[${countForm}]`);
|
|
||||||
|
|
||||||
const wrapper = document.createElement('div');
|
|
||||||
wrapper.innerHTML = html.trim();
|
|
||||||
const newForm = wrapper.firstChild;
|
|
||||||
|
|
||||||
// Hapus Selectize wrapper jika ada
|
|
||||||
newForm.querySelectorAll('select').forEach(select => {
|
|
||||||
const wrapper = select.nextElementSibling;
|
|
||||||
if (wrapper?.classList.contains('selectize-control')) wrapper.remove();
|
|
||||||
|
|
||||||
select.value = '';
|
|
||||||
if (select.multiple) {
|
|
||||||
// Untuk multiple select, pastikan semua opsi tidak terseleksi
|
|
||||||
Array.from(select.options).forEach(option => option.selected = false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
container.appendChild(newForm);
|
|
||||||
initSelectize(newForm);
|
|
||||||
countForm++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hapus form-set (kecuali jika hanya 1)
|
|
||||||
document.addEventListener('click', function (e) {
|
|
||||||
if (e.target.closest('.btn-remove-form')) {
|
|
||||||
const targetForm = e.target.closest('.form-set');
|
|
||||||
const total = document.querySelectorAll('.form-set').length;
|
|
||||||
if (total > 1) {
|
|
||||||
targetForm.remove();
|
|
||||||
} else {
|
|
||||||
alert('Minimal satu form harus ada.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
document.getElementById('formMasterJadwalKonsul').addEventListener('submit', function(e){
|
|
||||||
e.preventDefault();
|
|
||||||
const form = this;
|
|
||||||
const actionUrl = form.getAttribute('action');
|
|
||||||
const formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(actionUrl, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value,
|
|
||||||
},
|
|
||||||
body: formData
|
|
||||||
}).then(async (res) => {
|
|
||||||
const data = await res.json();
|
|
||||||
if (data.status) {
|
|
||||||
const handler = function () {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil',
|
|
||||||
text: data.message,
|
|
||||||
timer: 2000,
|
|
||||||
showConfirmButton: false,
|
|
||||||
backdrop: true,
|
|
||||||
});
|
|
||||||
datatableMasterJadwalKonsul.bootstrapTable('refresh');
|
|
||||||
modalAddJadwalKonsul.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
|
||||||
};
|
|
||||||
modalAddJadwalKonsul.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
|
||||||
bootstrap.Modal.getInstance(modalAddJadwalKonsul).hide(); // ✅ pakai instance
|
|
||||||
const allFormSets = document.querySelectorAll('.form-set');
|
|
||||||
|
|
||||||
for(let i = 1; i < allFormSets.length; i++){
|
|
||||||
allFormSets[i].remove();
|
|
||||||
}
|
|
||||||
document.querySelectorAll('.form-set').forEach((formSet, index) => {
|
|
||||||
formSet.querySelectorAll('input, textarea, select').forEach(el => {
|
|
||||||
// Reset Selectize jika ada
|
|
||||||
if (el.classList.contains('selectized')) {
|
|
||||||
const selectize = el.selectize;
|
|
||||||
if (selectize) {
|
|
||||||
selectize.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.');
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
console.error(err);
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'error',
|
|
||||||
title: 'Gagal',
|
|
||||||
text: err.message || 'Terjadi kesalahan pada server.',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
function deleteMasterJadwalKonsul(e){
|
|
||||||
let id = $(e).data('jadwal_konsul_id')
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah kamu yakin ingin menghapus data ini?",
|
|
||||||
text : $(e).data('nama_dokter'),
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
backdrop: true,
|
|
||||||
}).then((result) => {
|
|
||||||
if(result.isConfirmed){
|
|
||||||
fetch(`/dashboard/jadwal-konsul/${id}`, {
|
|
||||||
method:'DELETE',
|
|
||||||
headers: {
|
|
||||||
"X-CSRF-TOKEN": document.querySelector('input[name="_token"]').value,
|
|
||||||
"Content-Type": "application/json"
|
|
||||||
}
|
|
||||||
}).then((response) => {
|
|
||||||
if(!response.ok){
|
|
||||||
throw new Error("Network response was not ok");
|
|
||||||
}
|
|
||||||
return response.json();
|
|
||||||
})
|
|
||||||
.then((data) => {
|
|
||||||
if(data.status){
|
|
||||||
Swal.fire({
|
|
||||||
title: "Success",
|
|
||||||
text: "Data berhasil dihapus",
|
|
||||||
icon:"success",
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1000
|
|
||||||
}).then(() => {
|
|
||||||
datatableMasterJadwalKonsul.bootstrapTable("refresh")
|
|
||||||
})
|
|
||||||
}else{
|
|
||||||
Swal.fire({
|
|
||||||
title: "Error!",
|
|
||||||
text: data.message || "Failed to delete Item.",
|
|
||||||
icon: "error"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire({
|
|
||||||
title: "Error!",
|
|
||||||
text: "Something went wrong. Please try again later.",
|
|
||||||
icon: "error"
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
let tanggalSelectizeInstance = null;
|
|
||||||
|
|
||||||
function editMasterJadwalKonsul(e) {
|
|
||||||
const el = $(e);
|
|
||||||
const modal = new bootstrap.Modal(modalMasterJadwalKonsulEdit);
|
|
||||||
formMasterJadwalKonsulEdit.setAttribute('action', `/dashboard/jadwal-konsul/${el.data('jadwal_konsul_id')}`)
|
|
||||||
modal.show();
|
|
||||||
|
|
||||||
// Ambil data
|
|
||||||
let dataOld = {
|
|
||||||
jadwal_konsul_id: el.data('jadwal_konsul_id'),
|
|
||||||
nama_dokter: el.data('nama_dokter'),
|
|
||||||
tgl: JSON.parse(decodeURIComponent(el.data('tgl_available') || '[]')),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Set value ke input form
|
|
||||||
$("#nama_dokter_edit").val(dataOld.nama_dokter);
|
|
||||||
const tanggalField = document.getElementById('tanggal_edit');
|
|
||||||
|
|
||||||
if(tanggalSelectizeInstance){
|
|
||||||
tanggalSelectizeInstance.destroy();
|
|
||||||
tanggalSelectizeInstance = null
|
|
||||||
}
|
|
||||||
tanggalField.style.display = 'block';
|
|
||||||
tanggalSelectizeInstance =$('#tanggal_edit').selectize({
|
|
||||||
valueField: 'tanggal',
|
|
||||||
labelField: 'tgl',
|
|
||||||
create: true,
|
|
||||||
placeholder: 'Masukkan Tanggal...',
|
|
||||||
onInitialize: function () {
|
|
||||||
const s = this;
|
|
||||||
dataOld.tgl.forEach(item => {
|
|
||||||
const tglValue = item?.tgl_harian || item?.tanggal || item;
|
|
||||||
s.addOption({ tanggal: tglValue, tgl: tglValue });
|
|
||||||
s.addItem(tglValue);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})[0].selectize;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
document.getElementById('formMasterJadwalKonsulEdit').addEventListener('submit', function(e){
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
const form = this;
|
|
||||||
const actionUrl = form.getAttribute('action');
|
|
||||||
const formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(actionUrl, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value,
|
|
||||||
},
|
|
||||||
body: formData
|
|
||||||
}).then(async (res) => {
|
|
||||||
const data = await res.json();
|
|
||||||
|
|
||||||
if (data.status) {
|
|
||||||
form.reset();
|
|
||||||
const handler = function () {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil',
|
|
||||||
text: data.message,
|
|
||||||
timer: 2000,
|
|
||||||
showConfirmButton: false,
|
|
||||||
backdrop: true,
|
|
||||||
});
|
|
||||||
datatableMasterJadwalKonsul.bootstrapTable('refresh');
|
|
||||||
modalMasterJadwalKonsulEdit.removeEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
|
||||||
};
|
|
||||||
|
|
||||||
modalMasterJadwalKonsulEdit.addEventListener('hidden.bs.modal', handler); // ✅ pakai DOM
|
|
||||||
bootstrap.Modal.getInstance(modalMasterJadwalKonsulEdit).hide(); // ✅ pakai instance
|
|
||||||
} else {
|
|
||||||
throw new Error(data.message || 'Terjadi kesalahan saat mengubah status.');
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
console.error(err);
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'error',
|
|
||||||
title: 'Gagal',
|
|
||||||
text: err.message || 'Terjadi kesalahan pada server.',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
|
|
||||||
datatableMasterJadwalKonsul.bootstrapTable({
|
|
||||||
url: "/dashboard/datatable/jadwal-konsul",
|
|
||||||
showColumns: true,
|
|
||||||
showColumnsToggleAll: true,
|
|
||||||
showRefresh: true,
|
|
||||||
sortable: true,
|
|
||||||
search: true,
|
|
||||||
searchOnEnterKey: false,
|
|
||||||
searchHighlight: true,
|
|
||||||
pagination: true,
|
|
||||||
serverSide: true,
|
|
||||||
pageSize: 10,
|
|
||||||
pageList: [10, 20, 30, 40, 50, 100, 200],
|
|
||||||
cookie: true,
|
|
||||||
icons: {
|
|
||||||
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
|
||||||
columns: "fas fa-th-large"
|
|
||||||
},
|
|
||||||
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
title: "Action",
|
|
||||||
field: 'jadwal_konsul_id',
|
|
||||||
formatter: function(value, row) {
|
|
||||||
|
|
||||||
let buttons = ''
|
|
||||||
buttons += `
|
|
||||||
<button class="btn btn-sm btn-primary me-2" onclick="editMasterJadwalKonsul(this)" data-jadwal_konsul_id="${row.jadwal_konsul_id}"
|
|
||||||
data-nama_dokter="${row?.nama_dokter}"
|
|
||||||
data-tgl_available="${encodeURIComponent(JSON.stringify(row?.tgl_available || []))}"
|
|
||||||
>
|
|
||||||
<i class="fa-solid fa-pencil"></i>
|
|
||||||
</button>
|
|
||||||
`
|
|
||||||
|
|
||||||
buttons += `
|
|
||||||
<button class="btn btn-sm btn-danger me-2" onclick="deleteMasterJadwalKonsul(this)"
|
|
||||||
data-jadwal_konsul_id="${row?.jadwal_konsul_id}"
|
|
||||||
data-nama_dokter="${row?.nama_dokter}"
|
|
||||||
>
|
|
||||||
<i class="fa-solid fa-trash"></i>
|
|
||||||
</button>
|
|
||||||
`
|
|
||||||
return `
|
|
||||||
<div class="d-flex space-x">
|
|
||||||
${buttons}
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
},
|
|
||||||
width: 120
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title:"Dokter",
|
|
||||||
field:"nama_dokter",
|
|
||||||
width: 300
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title:"Tanggal Tersedia",
|
|
||||||
field:"jadwal_konsul_id",
|
|
||||||
formatter: function(value, row){
|
|
||||||
let tglAvlb = '';
|
|
||||||
tglAvlb = row?.tgl_available ? row?.tgl_available.map(item => item?.tgl_harian).join(', ') : '-';
|
|
||||||
return tglAvlb;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
|
||||||
});
|
|
||||||
@ -44,7 +44,7 @@
|
|||||||
width: 120
|
width: 120
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title:"Nilai Kalori (kal)",
|
title:"Nilai Kalori (Kkal)",
|
||||||
field:"nilai_kalori"
|
field:"nilai_kalori"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -8,7 +8,7 @@ function addForm(){
|
|||||||
<div class="col mt-2 d-flex align-items-start gap-2" id="col-${colCount}">
|
<div class="col mt-2 d-flex align-items-start gap-2" id="col-${colCount}">
|
||||||
<div class="form-floating flex-grow-1">
|
<div class="form-floating flex-grow-1">
|
||||||
<input type="text" class="form-control" name="data[${colCount}][nilai_kalori]" placeholder="exp : 1000" required>
|
<input type="text" class="form-control" name="data[${colCount}][nilai_kalori]" placeholder="exp : 1000" required>
|
||||||
<label>Nilai Kalori (kal)</label>
|
<label>Nilai Kalori (Kkal)</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="invalid-feedback"></div>
|
<div class="invalid-feedback"></div>
|
||||||
|
|
||||||
|
|||||||
@ -48,7 +48,7 @@
|
|||||||
field:"nama_karbohidrat"
|
field:"nama_karbohidrat"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title:"Nilai Kalori (kal)",
|
title:"Nilai Kalori (Kkal)",
|
||||||
field:"nilai_kalori"
|
field:"nilai_kalori"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -14,7 +14,7 @@ function addForm() {
|
|||||||
<div class="col-md-5">
|
<div class="col-md-5">
|
||||||
<div class="form-floating">
|
<div class="form-floating">
|
||||||
<input type="number" class="form-control" name="data[${colCount}][nilai_kalori]" placeholder="exp : 120">
|
<input type="number" class="form-control" name="data[${colCount}][nilai_kalori]" placeholder="exp : 120">
|
||||||
<label>Nilai Kalori (kal)</label>
|
<label>Nilai Kalori (Kkal)</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-1 mt-2 d-flex align-items-start">
|
<div class="col-md-1 mt-2 d-flex align-items-start">
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
const datatable =$("#datatableLaporanPesanan")
|
|
||||||
const infoPesanan = document.getElementById('infoPesanan')
|
|
||||||
const exportLp = document.getElementById('exportLp')
|
|
||||||
const exportPendapatan = document.getElementById('exportPendapatan')
|
|
||||||