progress label
@ -28,9 +28,6 @@ class CustomerController extends Controller
|
|||||||
$search = request('search');
|
$search = request('search');
|
||||||
$jenis_menu = request('jenis_menu');
|
$jenis_menu = request('jenis_menu');
|
||||||
$perPage = request()->get('per_page', 12);
|
$perPage = request()->get('per_page', 12);
|
||||||
if($jenis_menu === "paket"){
|
|
||||||
return self::dataPaketMenuOrder($search, $perPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::menuOrder($search, $jenis_menu, $perPage);
|
return self::menuOrder($search, $jenis_menu, $perPage);
|
||||||
}
|
}
|
||||||
@ -42,7 +39,6 @@ class CustomerController extends Controller
|
|||||||
$menuQuery = DB::connection('dbOrderGizi')
|
$menuQuery = DB::connection('dbOrderGizi')
|
||||||
->table('public.master_menu as mn')
|
->table('public.master_menu as mn')
|
||||||
->where('mn.statusenabled', 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 . '%');
|
||||||
}
|
}
|
||||||
@ -140,71 +136,71 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// paket do komen dulu
|
||||||
|
// private static function dataPaketMenuOrder($search = null, $perPage){
|
||||||
|
// $query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn')
|
||||||
|
// ->where('mpn.statusenabled', true);
|
||||||
|
|
||||||
private static function dataPaketMenuOrder($search = null, $perPage){
|
// if(!empty($search)){
|
||||||
$query = DB::connection('dbOrderGizi')->table('public.master_paket_menu as mpn')
|
// $query->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%');
|
||||||
->where('mpn.statusenabled', true);
|
// }
|
||||||
|
|
||||||
if(!empty($search)){
|
// $paginated = $query->select(
|
||||||
$query->where('mpn.nama_paket', 'ILIKE', '%' . $search . '%');
|
// '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);
|
||||||
|
|
||||||
$paginated = $query->select(
|
// $paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray();
|
||||||
'mpn.master_paket_menu_id',
|
// dd($paketMenuIds);
|
||||||
'mpn.nama_paket',
|
// $klasifikasi = DB::connection('dbOrderGizi')
|
||||||
'mpn.foto',
|
// ->table('public.klasifikasi_menu_diet as kmd')
|
||||||
'mpn.harga_public',
|
// ->join('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id')
|
||||||
'mpn.harga_karyawan',
|
// ->whereIn('kmd.master_paket_menu_id', $paketMenuIds)
|
||||||
'mpn.harga_keluarga_pasien',
|
// ->select('kmd.master_paket_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet')
|
||||||
'mpn.deskripsi',
|
// ->get()
|
||||||
'mpn.status',
|
// ->groupBy('master_paket_menu_id');
|
||||||
'dmph.detail_menu_paket_harian_id',
|
|
||||||
'dmph.tgl_harian'
|
|
||||||
)->paginate($perPage);
|
|
||||||
|
|
||||||
$paketMenuIds = collect($paginated->items())->pluck('master_paket_menu_id')->toArray();
|
// $result = collect($paginated->items())->map(function ($paketMenu) use ($klasifikasi) {
|
||||||
dd($paketMenuIds);
|
// return [
|
||||||
$klasifikasi = DB::connection('dbOrderGizi')
|
// 'master_paket_menu_id' => $paketMenu->master_paket_menu_id,
|
||||||
->table('public.klasifikasi_menu_diet as kmd')
|
// 'nama' => $paketMenu->nama_paket,
|
||||||
->join('public.kategori_diet as kd', 'kd.kategori_diet_id', '=', 'kmd.kategori_diet_id')
|
// 'foto' => $paketMenu->foto,
|
||||||
->whereIn('kmd.master_paket_menu_id', $paketMenuIds)
|
// 'jenis_menu' => "paket",
|
||||||
->select('kmd.master_paket_menu_id', 'kd.kategori_diet_id', 'kd.nama_kategori_diet')
|
// 'harga_public' => $paketMenu->harga_public,
|
||||||
->get()
|
// 'harga_karyawan' => $paketMenu->harga_karyawan,
|
||||||
->groupBy('master_paket_menu_id');
|
// 'harga_keluarga_pasien' => $paketMenu->harga_keluarga_pasien,
|
||||||
|
// 'status' => $paketMenu->status,
|
||||||
$result = collect($paginated->items())->map(function ($paketMenu) use ($klasifikasi) {
|
// 'deskripsi' => $paketMenu->deskripsi,
|
||||||
return [
|
// 'klasifikasiMenu' => isset($klasifikasi[$paketMenu->master_paket_menu_id]) ? $klasifikasi[$paketMenu->master_paket_menu_id]->map(function ($item) {
|
||||||
'master_paket_menu_id' => $paketMenu->master_paket_menu_id,
|
// return [
|
||||||
'nama' => $paketMenu->nama_paket,
|
// 'kategori_diet_id' => $item->kategori_diet_id,
|
||||||
'foto' => $paketMenu->foto,
|
// 'nama_kategori_diet' => $item->nama_kategori_diet,
|
||||||
'jenis_menu' => "paket",
|
// ];
|
||||||
'harga_public' => $paketMenu->harga_public,
|
// })->values() : [],
|
||||||
'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([
|
// return response()->json([
|
||||||
'status' => true,
|
// 'status' => true,
|
||||||
'message' => 'Berhasil mendapatkan data',
|
// 'message' => 'Berhasil mendapatkan data',
|
||||||
'data' => [
|
// 'data' => [
|
||||||
'data' => $result,
|
// 'data' => $result,
|
||||||
'current_page' => $paginated->currentPage(),
|
// 'current_page' => $paginated->currentPage(),
|
||||||
'last_page' => $paginated->lastPage(),
|
// 'last_page' => $paginated->lastPage(),
|
||||||
'per_page' => $paginated->perPage(),
|
// 'per_page' => $paginated->perPage(),
|
||||||
'total' => $paginated->total(),
|
// '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();
|
||||||
|
|||||||
@ -43,7 +43,7 @@ class DashboardController extends Controller
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
$grouped = $data->map(function($items){
|
$grouped = $data->map(function($items){
|
||||||
$first = $items->first();
|
$first = $items->first();
|
||||||
$totalDetail = $items->count();
|
$totalDetail = $items->count();
|
||||||
$selesaiDetail = $items->where('detail_status_order', 'Selesai')->count();
|
$selesaiDetail = $items->where('detail_status_order', 'Selesai')->count();
|
||||||
@ -64,6 +64,10 @@ 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')->sum('total_harga');
|
||||||
|
$pemasukanMasyarakat = $grouped->where('jenis_customer', 'Masyarakat Umum')->sum('total_harga');
|
||||||
|
$pemasukanKeluargaPasien = $grouped->where('jenis_customer', 'Keluarga Pasien / Penunggu Pasien')->sum('total_harga');
|
||||||
|
|
||||||
$totalPemasukan = $grouped->sum('total_harga');
|
$totalPemasukan = $grouped->sum('total_harga');
|
||||||
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan'])->count();
|
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan'])->count();
|
||||||
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
||||||
@ -91,6 +95,9 @@ class DashboardController extends Controller
|
|||||||
'pesananBatal' => $pesananBatal,
|
'pesananBatal' => $pesananBatal,
|
||||||
'pesananLunas' => $pesananLunas,
|
'pesananLunas' => $pesananLunas,
|
||||||
'pesananSelesai' => $pesananSelesai,
|
'pesananSelesai' => $pesananSelesai,
|
||||||
|
'pemasukanKaryawan' => $pemasukanKaryawan,
|
||||||
|
'pemasukanMasyarakat' => $pemasukanMasyarakat,
|
||||||
|
'pemasukanKeluargaPasien' => $pemasukanKeluargaPasien,
|
||||||
],
|
],
|
||||||
'rows' => $grouped->values(),
|
'rows' => $grouped->values(),
|
||||||
'total' => $grouped->count(),
|
'total' => $grouped->count(),
|
||||||
|
|||||||
@ -103,7 +103,7 @@ class KaloriController extends Controller
|
|||||||
if(!empty($search)){
|
if(!empty($search)){
|
||||||
$query->where('nilai_kalori', 'ILIKE', '%' . $search . '%');
|
$query->where('nilai_kalori', 'ILIKE', '%' . $search . '%');
|
||||||
}else{
|
}else{
|
||||||
$query->take(30);
|
$query->limit(30);
|
||||||
}
|
}
|
||||||
$data = $query->select('kalori_id', 'nilai_kalori')->get();
|
$data = $query->select('kalori_id', 'nilai_kalori')->get();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
|
|||||||
@ -27,9 +27,21 @@ class PesananController extends Controller
|
|||||||
|
|
||||||
|
|
||||||
public function getDataPending(){
|
public function getDataPending(){
|
||||||
|
$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')
|
$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)
|
||||||
|
->whereRaw(
|
||||||
|
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
|
||||||
|
$tanggalFormatted
|
||||||
|
)
|
||||||
->select(
|
->select(
|
||||||
'o.order_id',
|
'o.order_id',
|
||||||
'o.entry_at',
|
'o.entry_at',
|
||||||
@ -167,9 +179,21 @@ class PesananController extends Controller
|
|||||||
|
|
||||||
|
|
||||||
public function getDataSelesai(){
|
public function getDataSelesai(){
|
||||||
|
$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')
|
$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])
|
||||||
|
->whereRaw(
|
||||||
|
"DATE(o.entry_at) IN (" . implode(',', array_fill(0, count($tanggalFormatted), '?')) . ")",
|
||||||
|
$tanggalFormatted
|
||||||
|
)
|
||||||
->select(
|
->select(
|
||||||
'o.order_id',
|
'o.order_id',
|
||||||
'o.entry_at',
|
'o.entry_at',
|
||||||
@ -325,6 +349,12 @@ class PesananController extends Controller
|
|||||||
|
|
||||||
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
|
return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function downloadLabel(Request $request){
|
||||||
|
$items = $request->input('items');
|
||||||
|
|
||||||
|
dd(json_encode($items));
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Show the form for creating a new resource.
|
* Show the form for creating a new resource.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1786,3 +1786,53 @@ section,
|
|||||||
.border-dashed:hover {
|
.border-dashed:hover {
|
||||||
border-color: #198754;
|
border-color: #198754;
|
||||||
}
|
}
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
.card h5 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card .badge {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card .btn {
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 6px 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-clean {
|
||||||
|
border-bottom: 2px solid #dee2e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-clean .nav-link {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #555;
|
||||||
|
padding: 0.6rem 1rem;
|
||||||
|
border: none;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-clean .nav-link:hover {
|
||||||
|
color: #198754;
|
||||||
|
border-bottom: 3px solid #d1e7dd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-clean .nav-link.active {
|
||||||
|
color: #198754;
|
||||||
|
border-bottom: 3px solid #198754;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
.nav-tabs-clean .nav-item {
|
||||||
|
flex: 1 0 50%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs-clean {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
BIN
public/assets/img/404.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/gambar/1PiDSRRaH56koiV.png
Normal file
|
After Width: | Height: | Size: 458 KiB |
BIN
public/gambar/2LLlfVZAwhyugfI.jpg
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
public/gambar/BaaeDhuwxvnZizJ.jpg
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
public/gambar/EKUC5BMuEwyu6fr.jpg
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
public/gambar/Kc8m48SGRwfqCKp.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
public/gambar/P9aGUsEmbhzi2lQ.png
Normal file
|
After Width: | Height: | Size: 458 KiB |
BIN
public/gambar/R4RwHfMdvPd9OQg.jpg
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
public/gambar/aGdDPjqGDQvBdu9.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/gambar/adjsGhdxjp9ed56.jpg
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
public/gambar/bWYX7qOQIEpRB23.jpg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
public/gambar/fOoiTswsOkCGb2x.jpg
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
public/gambar/k5P14WguOQVW4af.jpg
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
public/gambar/uhsxLiDIpIgtTw9.jpg
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
public/gambar/ypeScN7ShpO3wcd.jpg
Normal file
|
After Width: | Height: | Size: 163 KiB |
@ -8,6 +8,8 @@ let order_id = sessionStorage.getItem('order_id') || '[]';
|
|||||||
// =======================
|
// =======================
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
const checkCart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
const checkCart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||||
|
|
||||||
|
|
||||||
const validChart = checkCart.length > 0 && checkCart.every(item =>
|
const validChart = checkCart.length > 0 && checkCart.every(item =>
|
||||||
Array.isArray(item.pesanan) &&
|
Array.isArray(item.pesanan) &&
|
||||||
item.pesanan.length > 0
|
item.pesanan.length > 0
|
||||||
@ -17,6 +19,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$("#cartButton").addClass('d-none');
|
$("#cartButton").addClass('d-none');
|
||||||
$("#no_order_result").val(order_id)
|
$("#no_order_result").val(order_id)
|
||||||
let currentStep = 0;
|
let currentStep = 0;
|
||||||
@ -109,6 +114,45 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const countDownPayment = document.getElementById('countdownPayment')
|
const countDownPayment = document.getElementById('countdownPayment')
|
||||||
|
|
||||||
|
|
||||||
|
function orderTimeCheck(){
|
||||||
|
const checkTimeOrder = sessionStorage.getItem('time_order');
|
||||||
|
if (checkTimeOrder) {
|
||||||
|
const orderTime = new Date(checkTimeOrder);
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
// Jika time_order tidak valid (misalnya null, NaN, atau invalid date)
|
||||||
|
if (isNaN(orderTime.getTime())) {
|
||||||
|
console.warn('Waktu order tidak valid di session.');
|
||||||
|
sessionStorage.clear(); // bisa juga removeItem satu per satu
|
||||||
|
window.location.href = "/";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const selisihMs = now.getTime() - orderTime.getTime();
|
||||||
|
const selisihMenit = selisihMs / 1000 / 60;
|
||||||
|
|
||||||
|
if (selisihMenit > 10) {
|
||||||
|
// Bersihkan session
|
||||||
|
sessionStorage.removeItem('cart');
|
||||||
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Waktu pembayaran sudah lewat!',
|
||||||
|
text: 'Silakan lakukan pemesanan ulang.',
|
||||||
|
icon: 'warning',
|
||||||
|
confirmButtonText: 'Oke'
|
||||||
|
}).then(() => {
|
||||||
|
window.location.href = "/";
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function updateCountdown(){
|
function updateCountdown(){
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
@ -128,8 +172,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateCountdown();
|
updateCountdown();
|
||||||
|
orderTimeCheck();
|
||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
updateCountdown()
|
updateCountdown()
|
||||||
|
orderTimeCheck()
|
||||||
if(new Date() >= deadline) clearInterval(interval)
|
if(new Date() >= deadline) clearInterval(interval)
|
||||||
}, 1000)
|
}, 1000)
|
||||||
|
|
||||||
@ -572,7 +618,7 @@ function validateCartBeforeSubmit() {
|
|||||||
let errorMessage = "";
|
let errorMessage = "";
|
||||||
|
|
||||||
cart.forEach((item, index) => {
|
cart.forEach((item, index) => {
|
||||||
console.log(item.apakah_someday);
|
|
||||||
|
|
||||||
const pesananList = item.pesanan || [];
|
const pesananList = item.pesanan || [];
|
||||||
pesananList.forEach((pesanan, i) => {
|
pesananList.forEach((pesanan, i) => {
|
||||||
@ -603,7 +649,6 @@ function hitungTotalHarga(){
|
|||||||
|
|
||||||
cart.forEach(item => {
|
cart.forEach(item => {
|
||||||
const harga = biodata.jenis_customer === "Karyawan RSAB Harapan Kita" ? item.harga_karyawan : item.harga_public || 0
|
const harga = biodata.jenis_customer === "Karyawan RSAB Harapan Kita" ? item.harga_karyawan : item.harga_public || 0
|
||||||
console.log(harga);
|
|
||||||
|
|
||||||
const itemTotal = item.pesanan?.reduce((sum, p) => sum + (p.jumlah * harga), 0);
|
const itemTotal = item.pesanan?.reduce((sum, p) => sum + (p.jumlah * harga), 0);
|
||||||
total += itemTotal
|
total += itemTotal
|
||||||
@ -672,8 +717,6 @@ function initFlatpickrTersedia(item, i) {
|
|||||||
availableDates.push(fullDateStr);
|
availableDates.push(fullDateStr);
|
||||||
} else {
|
} else {
|
||||||
const selisihHari = Math.floor((fullDate - now) / (1000 * 60 * 60 * 24));
|
const selisihHari = Math.floor((fullDate - now) / (1000 * 60 * 60 * 24));
|
||||||
console.log(selisihHari);
|
|
||||||
|
|
||||||
if (selisihHari >= 1 || (selisihHari === 1 && !lewatBatasNormal)) {
|
if (selisihHari >= 1 || (selisihHari === 1 && !lewatBatasNormal)) {
|
||||||
availableDates.push(fullDateStr);
|
availableDates.push(fullDateStr);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -144,6 +144,9 @@ function fetchData(startDate = null, endDate = null){
|
|||||||
$("#pesanan_belum_diambil").text(res?.data?.pesananLunas - res?.data?.pesananSelesai)
|
$("#pesanan_belum_diambil").text(res?.data?.pesananLunas - res?.data?.pesananSelesai)
|
||||||
$("#pesanan_diambil").text(res?.data?.pesananSelesai)
|
$("#pesanan_diambil").text(res?.data?.pesananSelesai)
|
||||||
$("#nilai_transaksi_total").text(parseInt(res?.data?.totalPemasukan).toLocaleString('id-ID'))
|
$("#nilai_transaksi_total").text(parseInt(res?.data?.totalPemasukan).toLocaleString('id-ID'))
|
||||||
|
$("#nilai_transaksi_karyawan").text(parseInt(res?.data?.pemasukanKaryawan).toLocaleString('id-ID'))
|
||||||
|
$("#nilai_transaksi_masyarakat").text(parseInt(res?.data?.pemasukanMasyarakat).toLocaleString('id-ID'))
|
||||||
|
$("#nilai_transaksi_pasien").text(parseInt(res?.data?.pemasukanKeluargaPasien).toLocaleString('id-ID'))
|
||||||
datatable.bootstrapTable('load', res.rows)
|
datatable.bootstrapTable('load', res.rows)
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
|||||||
@ -12,9 +12,8 @@ function initSelectize(formElement) {
|
|||||||
create: false,
|
create: false,
|
||||||
placeholder: "Kualifikasi Menu...",
|
placeholder: "Kualifikasi Menu...",
|
||||||
maxItems: null,
|
maxItems: null,
|
||||||
preload: true,
|
preload: true,
|
||||||
load: function (query, callback) {
|
load: function (query, callback) {
|
||||||
if (!query.length) return callback();
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/dashboard/option/klasifikasi-menu',
|
url: '/dashboard/option/klasifikasi-menu',
|
||||||
data: { search: query },
|
data: { search: query },
|
||||||
@ -50,10 +49,9 @@ function initSelectize(formElement) {
|
|||||||
searchField: ['nilai_kalori', 'kalori_id'],
|
searchField: ['nilai_kalori', 'kalori_id'],
|
||||||
create: false,
|
create: false,
|
||||||
placeholder: "Kualifikasi kalori...",
|
placeholder: "Kualifikasi kalori...",
|
||||||
maxItems: null,
|
maxItems: 1,
|
||||||
preload: true,
|
preload: true,
|
||||||
load: function (query, callback) {
|
load: function (query, callback) {
|
||||||
if (!query.length) return callback();
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/dashboard/option/kalori',
|
url: '/dashboard/option/kalori',
|
||||||
data: { search: query },
|
data: { search: query },
|
||||||
@ -72,11 +70,11 @@ function initSelectize(formElement) {
|
|||||||
render: {
|
render: {
|
||||||
option: function (item, escape) {
|
option: function (item, escape) {
|
||||||
return `<div class="p-1">
|
return `<div class="p-1">
|
||||||
<div class="fw-semibold" style="font-size: 0.85rem;">${escape(item.nilai_kalori)}</div>
|
<div class="fw-semibold" style="font-size: 0.85rem;">${escape(item.nilai_kalori)} kkal</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
},
|
},
|
||||||
item: function (item, escape) {
|
item: function (item, escape) {
|
||||||
return `<div>${escape(item.nilai_kalori)}</div>`;
|
return `<div>${escape(item.nilai_kalori)} kkal</div>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -444,7 +442,6 @@ function editMasterMenu(e) {
|
|||||||
maxItems: null,
|
maxItems: null,
|
||||||
preload: true,
|
preload: true,
|
||||||
load: function (query, callback) {
|
load: function (query, callback) {
|
||||||
if (!query.length) return callback();
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/dashboard/option/klasifikasi-menu',
|
url: '/dashboard/option/klasifikasi-menu',
|
||||||
data: { search: query },
|
data: { search: query },
|
||||||
@ -492,10 +489,9 @@ function editMasterMenu(e) {
|
|||||||
searchField: ['nilai_kalori'],
|
searchField: ['nilai_kalori'],
|
||||||
create: false,
|
create: false,
|
||||||
placeholder: "Kalori...",
|
placeholder: "Kalori...",
|
||||||
maxItems: null,
|
maxItems: 1,
|
||||||
preload: true,
|
preload: true,
|
||||||
load: function (query, callback) {
|
load: function (query, callback) {
|
||||||
if (!query.length) return callback();
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/dashboard/option/kalori',
|
url: '/dashboard/option/kalori',
|
||||||
data: { search: query },
|
data: { search: query },
|
||||||
@ -623,7 +619,7 @@ function detailMasterMenu(e){
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
||||||
$('#cathering_order_name').text(el.data('nama') || '-');
|
$('#cathering_order_name').text(el.data('nama'));
|
||||||
$('#cathering_order_deskripsi').text(el.data('deskripsi') || '');
|
$('#cathering_order_deskripsi').text(el.data('deskripsi') || '');
|
||||||
$('#cathering_order_price_karyawan').text("Rp " + parseInt(el.data('harga_karyawan') || 0).toLocaleString('id-ID'));
|
$('#cathering_order_price_karyawan').text("Rp " + parseInt(el.data('harga_karyawan') || 0).toLocaleString('id-ID'));
|
||||||
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
||||||
|
|||||||
@ -78,22 +78,30 @@
|
|||||||
if(session.nama_customer){
|
if(session.nama_customer){
|
||||||
$("#welcomeMessage").html(`Selamat Datang, <strong>${session.nama_customer}</strong> !`)
|
$("#welcomeMessage").html(`Selamat Datang, <strong>${session.nama_customer}</strong> !`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const menus = res.data.data || [];
|
const menus = res.data.data || [];
|
||||||
|
|
||||||
if (menus.length === 0){
|
if (menus.length === 0){
|
||||||
return containerGuest.html('<p class="text-muted">.</p>');
|
return containerGuest.html(`
|
||||||
|
<div class="d-flex flex-column align-items-center justify-content-center text-center py-4">
|
||||||
|
<img src="/assets/img/404.png" alt="Tidak ada menu" style="max-width: 180px;" class="mb-3 mt-3">
|
||||||
|
<h6 class="text-muted mb-1">Belum ada menu yang tersedia untuk saat ini.</h6>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let html = '<div class="container"><div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-3">';
|
|
||||||
|
let html = '<div class="container"><div class="row row-cols-2 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-3">';
|
||||||
menus.forEach(menu => {
|
menus.forEach(menu => {
|
||||||
|
|
||||||
html += `
|
html += `
|
||||||
<div class="col-md-3 mb-4">
|
<div class="col-12 col-sm-6 col-md-4 col-lg-3 mb-2">
|
||||||
<div class="card h-100 shadow-sm p-2 rounded-4">
|
<div class="card h-100 shadow-sm p-2 rounded-4">
|
||||||
<!-- Gambar Makanan -->
|
<!-- Gambar Makanan -->
|
||||||
<img src="gambar/${menu.foto || '3.jpeg'}"
|
<img src="gambar/${menu.foto || '3.jpeg'}"
|
||||||
class="rounded shadow-sm object-fit-cover" height="150px"
|
class="rounded shadow-sm object-fit-cover w-100" height="150px"
|
||||||
alt="${menu.nama_menu}">
|
alt="${menu.nama_menu}">
|
||||||
<!-- Info Tersedia Tanggal -->
|
<!-- Info Tersedia Tanggal -->
|
||||||
<div class="text-muted small mt-2 px-1">
|
<div class="text-muted small mt-2 px-1">
|
||||||
@ -131,7 +139,16 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<!-- Nama & Harga -->
|
<!-- Nama & Harga -->
|
||||||
<h5 class="fw-bold mb-1 mt-2">${menu.nama}</h5>
|
<h5 class="fw-bold mb-1 mt-2">${menu.nama} <small class="fs-6">${(menu.kalori || [])
|
||||||
|
.slice(0, 2)
|
||||||
|
.map(kkal => {
|
||||||
|
const name = kkal.nilai_kalori || '';
|
||||||
|
const truncated = name.length > 12 ? name.substring(0, 12) + '...' : name;
|
||||||
|
return `<span class="badge bg-success me-1 mb-1" title="${name}">${truncated} kkal</span>`;
|
||||||
|
}).join('')}
|
||||||
|
${(menu.kalori || []).length > 2
|
||||||
|
? `<span class="badge bg-secondary">+${(menu.klasifikasiMenu.length - 2)} lainnya</span>`
|
||||||
|
: ''}</small> </h5>
|
||||||
<div class="row text-muted small">
|
<div class="row text-muted small">
|
||||||
<div class="col-12 fw-semibold">Harga</div>
|
<div class="col-12 fw-semibold">Harga</div>
|
||||||
<div class="col-6">Karyawan:</div>
|
<div class="col-6">Karyawan:</div>
|
||||||
@ -155,20 +172,6 @@
|
|||||||
: ''}
|
: ''}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Kalori (Badge) -->
|
|
||||||
<div class="mb-2">
|
|
||||||
${(menu.kalori || [])
|
|
||||||
.slice(0, 2)
|
|
||||||
.map(kkal => {
|
|
||||||
const name = kkal.nilai_kalori || '';
|
|
||||||
const truncated = name.length > 12 ? name.substring(0, 12) + '...' : name;
|
|
||||||
return `<span class="badge bg-success me-1 mb-1" title="${name}">${truncated} kkal</span>`;
|
|
||||||
}).join('')}
|
|
||||||
${(menu.kalori || []).length > 2
|
|
||||||
? `<span class="badge bg-secondary">+${(menu.klasifikasiMenu.length - 2)} lainnya</span>`
|
|
||||||
: ''}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Order -->
|
<!-- Tombol Order -->
|
||||||
<div class="d-flex p-2 mt-auto">
|
<div class="d-flex p-2 mt-auto">
|
||||||
<button class="btn btn-outline-success w-50 me-2"
|
<button class="btn btn-outline-success w-50 me-2"
|
||||||
@ -271,8 +274,8 @@
|
|||||||
`).join('');
|
`).join('');
|
||||||
|
|
||||||
const resultKkal = kalori.length > 0
|
const resultKkal = kalori.length > 0
|
||||||
? kalori.map(kkal => `<span class="badge bg-success me-1 mb-1">${kkal} Kkal</span>`).join('')
|
? kalori.map(kkal => `<small class="badge bg-success me-1 mb-1 fs-6">${kkal ? kkal + ' Kkal' : ''}</small>`).join('')
|
||||||
: '<small class="text-muted">Tidak ada data kalori</small>';
|
: '';
|
||||||
|
|
||||||
const tglMenuTersedia = `
|
const tglMenuTersedia = `
|
||||||
<div class="mb-1 small text-muted">
|
<div class="mb-1 small text-muted">
|
||||||
@ -299,7 +302,11 @@
|
|||||||
|
|
||||||
$('#checkoutModal').modal('show');
|
$('#checkoutModal').modal('show');
|
||||||
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
||||||
$('#cathering_order_name').text(el.data('nama_menu') || '-');
|
|
||||||
|
$('#cathering_order_name').html(`
|
||||||
|
<div>${el.data('nama_menu')}
|
||||||
|
${resultKkal}
|
||||||
|
</div>`);
|
||||||
$('#cathering_order_menu_id').val(el.data('id'));
|
$('#cathering_order_menu_id').val(el.data('id'));
|
||||||
$('#cathering_order_jenis_menu').val(el.data('jenis_menu'));
|
$('#cathering_order_jenis_menu').val(el.data('jenis_menu'));
|
||||||
$('#cathering_order_deskripsi').text(el.data('deskripsi') || '');
|
$('#cathering_order_deskripsi').text(el.data('deskripsi') || '');
|
||||||
@ -307,7 +314,6 @@
|
|||||||
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
||||||
$('#tag_klasifikasi_menu').html(klasifikasiMenu);
|
$('#tag_klasifikasi_menu').html(klasifikasiMenu);
|
||||||
$('#tgl_menu_tersedia').html(tglMenuTersedia);
|
$('#tgl_menu_tersedia').html(tglMenuTersedia);
|
||||||
$('#kalori_menu').html(resultKkal);
|
|
||||||
$('#apakah_someday').val(someday ? 1 : 0);
|
$('#apakah_someday').val(someday ? 1 : 0);
|
||||||
$('#apakah_menu_siang').val(siang ? 1 : 0);
|
$('#apakah_menu_siang').val(siang ? 1 : 0);
|
||||||
$('#apakah_menu_sore').val(sore ? 1 : 0);
|
$('#apakah_menu_sore').val(sore ? 1 : 0);
|
||||||
@ -348,7 +354,14 @@
|
|||||||
|
|
||||||
let order_id = sessionStorage.getItem('order_id') || null;
|
let order_id = sessionStorage.getItem('order_id') || null;
|
||||||
if(order_id){
|
if(order_id){
|
||||||
window.location.href = '/checkout'
|
Swal.fire({
|
||||||
|
icon: 'warning',
|
||||||
|
title: 'Pesanan Belum Selesai',
|
||||||
|
text: 'Silakan selesaikan pesanan Anda terlebih dahulu sebelum melanjutkan.',
|
||||||
|
timer: 2500,
|
||||||
|
}).then(() => {
|
||||||
|
window.location.href = '/checkout';
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||||
@ -368,7 +381,8 @@
|
|||||||
|
|
||||||
let namaMenu = $("#cathering_order_name").text();
|
let namaMenu = $("#cathering_order_name").text();
|
||||||
|
|
||||||
let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu);
|
console.log(cart);
|
||||||
|
let existingItem = cart.find(item => item.id_menu === idMenu);
|
||||||
|
|
||||||
if(!existingItem){
|
if(!existingItem){
|
||||||
const orderItem ={
|
const orderItem ={
|
||||||
@ -405,7 +419,7 @@
|
|||||||
|
|
||||||
let idMenu = $(e).data('id');
|
let idMenu = $(e).data('id');
|
||||||
let namaMenu = $(e).data('nama_menu');
|
let namaMenu = $(e).data('nama_menu');
|
||||||
let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu);
|
let existingItem = cart.find(item => item.id_menu === idMenu);
|
||||||
if(existingItem){
|
if(existingItem){
|
||||||
orders.forEach(newOrder => {
|
orders.forEach(newOrder => {
|
||||||
const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl)
|
const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl)
|
||||||
@ -451,7 +465,14 @@
|
|||||||
function handleClick(e){
|
function handleClick(e){
|
||||||
const order_id = sessionStorage.getItem('order_id') || null;
|
const order_id = sessionStorage.getItem('order_id') || null;
|
||||||
if(order_id){
|
if(order_id){
|
||||||
window.location.href = '/checkout'
|
Swal.fire({
|
||||||
|
icon: 'warning',
|
||||||
|
title: 'Pesanan Belum Selesai',
|
||||||
|
text: 'Silakan selesaikan pesanan Anda terlebih dahulu sebelum melanjutkan.',
|
||||||
|
timer: 2500,
|
||||||
|
}).then(() => {
|
||||||
|
window.location.href = '/checkout';
|
||||||
|
});
|
||||||
}else{
|
}else{
|
||||||
saveItem(e)
|
saveItem(e)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
function initDt(selectDate = []){
|
function initDt(selectDate = []){
|
||||||
|
let selectedRows = [];
|
||||||
datatablePekerjaan.bootstrapTable('destroy');
|
datatablePekerjaan.bootstrapTable('destroy');
|
||||||
datatablePekerjaan.bootstrapTable({
|
datatablePekerjaan.bootstrapTable({
|
||||||
url: "/dashboard/datatable/pekerjaan",
|
url: "/dashboard/datatable/pekerjaan",
|
||||||
@ -20,13 +21,22 @@
|
|||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
pageList: [10, 20, 30, 40, 50, 100, 200],
|
pageList: [10, 20, 30, 40, 50, 100, 200],
|
||||||
cookie: true,
|
cookie: true,
|
||||||
cookieIdTable: "table_rma_ssc_id",
|
cookieIdTable: "datatablePekerjaan",
|
||||||
icons: {
|
icons: {
|
||||||
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
||||||
columns: "fas fa-th-large"
|
columns: "fas fa-th-large"
|
||||||
},
|
},
|
||||||
|
|
||||||
columns: [
|
columns: [
|
||||||
|
{
|
||||||
|
title: '<input type="checkbox" id="selectAll" />',
|
||||||
|
field: 'order_id',
|
||||||
|
align: 'center',
|
||||||
|
valign: 'middle',
|
||||||
|
formatter: function (value, row, index) {
|
||||||
|
return `<input type="checkbox" class="rowCheckbox" data-order_id="${row.order_id}" />`
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "Action",
|
title: "Action",
|
||||||
field:'order_id',
|
field:'order_id',
|
||||||
@ -114,6 +124,66 @@
|
|||||||
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
$(document).on('click', '#selectAll', function () {
|
||||||
|
selectedRows = [];
|
||||||
|
const isChecked = this.checked;
|
||||||
|
$('.rowCheckbox').each(function () {
|
||||||
|
this.checked = isChecked;
|
||||||
|
let order_id = $(this).data('order_id');
|
||||||
|
if (isChecked) {
|
||||||
|
selectedRows.push({ order_id });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('#buttonLabel').prop("disabled", !isChecked);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('change', '.rowCheckbox', function () {
|
||||||
|
let order_id = $(this).data('order_id');
|
||||||
|
let isChecked = this.checked;
|
||||||
|
if (isChecked) {
|
||||||
|
if (!selectedRows.find(r => r.order_id === order_id)) {
|
||||||
|
selectedRows.push({ order_id });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
selectedRows = selectedRows.filter(r => r.order_id !== order_id);
|
||||||
|
}
|
||||||
|
$('#buttonLabel').prop("disabled", selectedRows.length === 0);
|
||||||
|
});
|
||||||
|
window.getSelectedRowsForLabel = () => selectedRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function labelDownload(){
|
||||||
|
const selected = (typeof getSelectedRowsForLabel === 'function') ? getSelectedRowsForLabel() : [];
|
||||||
|
|
||||||
|
if (selected.length === 0) {
|
||||||
|
alert("Silakan pilih setidaknya satu item terlebih dahulu.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch('/dashboard/pekerjaan/label', {
|
||||||
|
method:'POST',
|
||||||
|
headers:{
|
||||||
|
'Content-Type' : 'application/json',
|
||||||
|
'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ items : selected})
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) throw new Error('Gagal download label');
|
||||||
|
return response.blob();
|
||||||
|
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
console.log(res);
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
alert('gagal mengunduh');
|
||||||
|
console.error(error);
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -1,6 +1,13 @@
|
|||||||
|
|
||||||
datatablePending.bootstrapTable({
|
function initDt(selectDate = []){
|
||||||
|
datatablePending.bootstrapTable('destroy')
|
||||||
|
datatablePending.bootstrapTable({
|
||||||
url: "/dashboard/datatable/pending",
|
url: "/dashboard/datatable/pending",
|
||||||
|
method:'get',
|
||||||
|
queryParams:function(params){
|
||||||
|
params.tanggal = selectDate;
|
||||||
|
return params;
|
||||||
|
},
|
||||||
showColumns: true,
|
showColumns: true,
|
||||||
showColumnsToggleAll: true,
|
showColumnsToggleAll: true,
|
||||||
showRefresh: true,
|
showRefresh: true,
|
||||||
@ -158,3 +165,38 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
flatpickr('#tanggal', {
|
||||||
|
dateFormat: "Y-m-d",
|
||||||
|
mode: "multiple",
|
||||||
|
locale: "id", // opsional: agar hari/bulan dalam Bahasa Indonesia
|
||||||
|
onValueUpdate: function(selectedDates, dateStr, instance) {
|
||||||
|
const selectedFormattedDates = selectedDates.map(d => {
|
||||||
|
const year = d.getFullYear();
|
||||||
|
const month = String(d.getMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(d.getDate()).padStart(2, '0');
|
||||||
|
return `${year}-${month}-${day}`;
|
||||||
|
})
|
||||||
|
initDt(selectedFormattedDates)
|
||||||
|
if(selectedFormattedDates.length > 0){
|
||||||
|
const tanggalList = selectedFormattedDates;
|
||||||
|
|
||||||
|
let tanggalRapi = '';
|
||||||
|
if (tanggalList.length === 1) {
|
||||||
|
tanggalRapi = tanggalList[0];
|
||||||
|
} else if (tanggalList.length === 2) {
|
||||||
|
tanggalRapi = tanggalList.join(' dan ');
|
||||||
|
} else if (tanggalList.length > 2) {
|
||||||
|
tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1);
|
||||||
|
}
|
||||||
|
$("#confirm_date_pesanan_pending").text(': ' + tanggalRapi)
|
||||||
|
}else{
|
||||||
|
$("#confirm_date_pesanan_pending").text('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#confirm_date_pesanan_pending").text('Hari Ini');
|
||||||
|
initDt();
|
||||||
|
});
|
||||||
|
|||||||
@ -1,139 +1,147 @@
|
|||||||
|
function initDt(selectDate = []){
|
||||||
|
datatableSelesai.bootstrapTable('destroy')
|
||||||
|
datatableSelesai.bootstrapTable({
|
||||||
|
url: "/dashboard/datatable/selesai",
|
||||||
|
method:'get',
|
||||||
|
queryParams:function(params){
|
||||||
|
params.tanggal = selectDate;
|
||||||
|
return params;
|
||||||
|
},
|
||||||
|
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,
|
||||||
|
cookieIdTable: "table_rma_ssc_id",
|
||||||
|
icons: {
|
||||||
|
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
||||||
|
columns: "fas fa-th-large"
|
||||||
|
},
|
||||||
|
|
||||||
datatableSelesai.bootstrapTable({
|
columns: [
|
||||||
url: "/dashboard/datatable/selesai",
|
{
|
||||||
showColumns: true,
|
title: "Action",
|
||||||
showColumnsToggleAll: true,
|
field:'order_id',
|
||||||
showRefresh: true,
|
formatter: function(value, row) {
|
||||||
sortable: true,
|
let buttons = ''
|
||||||
search: true,
|
if(row?.status_order === "Lunas"){
|
||||||
searchOnEnterKey: false,
|
buttons += `
|
||||||
searchHighlight: true,
|
<button class="btn btn-sm btn-warning text-dark" onclick="orderSelesai('${row.order_id}')">
|
||||||
pagination: true,
|
<i class="fa fa-utensils me-1"></i>
|
||||||
serverSide:true,
|
</button>
|
||||||
pageSize: 10,
|
`
|
||||||
pageList: [10, 20, 30, 40, 50, 100, 200],
|
}
|
||||||
cookie: true,
|
|
||||||
cookieIdTable: "table_rma_ssc_id",
|
|
||||||
icons: {
|
|
||||||
refresh: "fas fa-sync-alt", // atau ganti ke icon lain
|
|
||||||
columns: "fas fa-th-large"
|
|
||||||
},
|
|
||||||
|
|
||||||
columns: [
|
return `
|
||||||
{
|
<div class="d-flex space-x">
|
||||||
title: "Action",
|
${buttons}
|
||||||
field:'order_id',
|
</div>
|
||||||
formatter: function(value, row) {
|
`;
|
||||||
let buttons = ''
|
|
||||||
if(row?.status_order === "Lunas"){
|
|
||||||
buttons += `
|
|
||||||
<button class="btn btn-sm btn-warning text-dark" onclick="orderSelesai('${row.order_id}')">
|
|
||||||
<i class="fa fa-utensils me-1"></i>
|
|
||||||
</button>
|
|
||||||
`
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: "No.Order",
|
||||||
|
field: 'no_order',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Cara Pembayaran",
|
||||||
|
field: 'cara_pembayaran',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Status Pembayaran",
|
||||||
|
field: 'status_order',
|
||||||
|
sortable: true,
|
||||||
|
formatter: function(value, row) {
|
||||||
|
const status = value;
|
||||||
|
let badgeClass = 'bg-secondary';
|
||||||
|
if (status === "Belum Bayar") {
|
||||||
|
badgeClass = 'bg-warning text-dark';
|
||||||
|
} else if (status === "Menunggu Konfirmasi Pembayaran") {
|
||||||
|
badgeClass = 'bg-primary';
|
||||||
|
} else if (status === "Lunas" || status === "Sudah Bayar") {
|
||||||
|
badgeClass = 'bg-success text-dark';
|
||||||
|
} else if(status === "Dibatalkan"){
|
||||||
|
badgeClass = 'bg-danger';
|
||||||
|
}
|
||||||
|
return `
|
||||||
|
<span class="badge ${badgeClass} px-3 py-1">${status}</span>
|
||||||
|
${status === 'Dibatalkan' && row.note_dibatalkan ? `
|
||||||
|
<div class="text-danger small mt-1">
|
||||||
|
<i class="fa fa-info-circle"></i> ${row.note_dibatalkan}
|
||||||
|
</div>
|
||||||
|
` : ''}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Status Pesanan",
|
||||||
|
formatter: function(value, row) {
|
||||||
|
const progress = parseInt(row.progress) || 0;
|
||||||
|
const total = row.total_detail || 0;
|
||||||
|
const selesai = row.selesai_detail || 0;
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="d-flex space-x">
|
<div class="text-center">
|
||||||
${buttons}
|
<div class="progress" style="height: 18px;">
|
||||||
|
<div class="progress-bar bg-success" role="progressbar"
|
||||||
|
style="width: ${progress}%;"
|
||||||
|
aria-valuenow="${progress}" aria-valuemin="0" aria-valuemax="100">
|
||||||
|
${progress}%
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<small class="text-muted">${selesai} / ${total} selesai</small>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
}
|
},
|
||||||
},
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Pemesan",
|
||||||
|
field:'nama_pemesan',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Tgl Pemesanan",
|
||||||
|
field: 'entry_at',
|
||||||
|
formatter: function(value, row) {
|
||||||
|
if (!row?.entry_at) return '-';
|
||||||
|
|
||||||
{
|
const date = new Date(row.entry_at);
|
||||||
title: "No.Order",
|
return date.toLocaleString('id-ID', {
|
||||||
field: 'no_order',
|
day: '2-digit',
|
||||||
sortable: true,
|
month: 'short', // Bisa diganti 'long' kalau mau 'Juli' bukan 'Jul'
|
||||||
},
|
year: 'numeric',
|
||||||
{
|
hour: '2-digit',
|
||||||
title: "Cara Pembayaran",
|
minute: '2-digit',
|
||||||
field: 'cara_pembayaran',
|
hour12: false // pakai format 24 jam
|
||||||
sortable: true,
|
});
|
||||||
},
|
},
|
||||||
{
|
sortable: true,
|
||||||
title: "Status Pembayaran",
|
},
|
||||||
field: 'status_order',
|
{
|
||||||
sortable: true,
|
title: "Kategori Customer",
|
||||||
formatter: function(value, row) {
|
field: 'jenis_customer',
|
||||||
const status = value;
|
sortable: true,
|
||||||
let badgeClass = 'bg-secondary';
|
},
|
||||||
if (status === "Belum Bayar") {
|
{
|
||||||
badgeClass = 'bg-warning text-dark';
|
title: "Total Harga Pesanan",
|
||||||
} else if (status === "Menunggu Konfirmasi Pembayaran") {
|
field:'total_harga',
|
||||||
badgeClass = 'bg-primary';
|
formatter: function(value, row){
|
||||||
} else if (status === "Lunas" || status === "Sudah Bayar") {
|
return 'Rp ' + parseInt(row.total_harga).toLocaleString('id-ID')
|
||||||
badgeClass = 'bg-success text-dark';
|
|
||||||
} else if(status === "Dibatalkan"){
|
|
||||||
badgeClass = 'bg-danger';
|
|
||||||
}
|
}
|
||||||
return `
|
|
||||||
<span class="badge ${badgeClass} px-3 py-1">${status}</span>
|
|
||||||
${status === 'Dibatalkan' && row.note_dibatalkan ? `
|
|
||||||
<div class="text-danger small mt-1">
|
|
||||||
<i class="fa fa-info-circle"></i> ${row.note_dibatalkan}
|
|
||||||
</div>
|
|
||||||
` : ''}
|
|
||||||
`;
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Status Pesanan",
|
|
||||||
formatter: function(value, row) {
|
|
||||||
const progress = parseInt(row.progress) || 0;
|
|
||||||
const total = row.total_detail || 0;
|
|
||||||
const selesai = row.selesai_detail || 0;
|
|
||||||
|
|
||||||
return `
|
],
|
||||||
<div class="text-center">
|
|
||||||
<div class="progress" style="height: 18px;">
|
|
||||||
<div class="progress-bar bg-success" role="progressbar"
|
|
||||||
style="width: ${progress}%;"
|
|
||||||
aria-valuenow="${progress}" aria-valuemin="0" aria-valuemax="100">
|
|
||||||
${progress}%
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<small class="text-muted">${selesai} / ${total} selesai</small>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
},
|
|
||||||
sortable: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Pemesan",
|
|
||||||
field:'nama_pemesan',
|
|
||||||
sortable: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Tgl Pemesanan",
|
|
||||||
field: 'entry_at',
|
|
||||||
formatter: function(value, row) {
|
|
||||||
if (!row?.entry_at) return '-';
|
|
||||||
|
|
||||||
const date = new Date(row.entry_at);
|
|
||||||
return date.toLocaleString('id-ID', {
|
|
||||||
day: '2-digit',
|
|
||||||
month: 'short', // Bisa diganti 'long' kalau mau 'Juli' bukan 'Jul'
|
|
||||||
year: 'numeric',
|
|
||||||
hour: '2-digit',
|
|
||||||
minute: '2-digit',
|
|
||||||
hour12: false // pakai format 24 jam
|
|
||||||
});
|
|
||||||
},
|
|
||||||
sortable: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Kategori Customer",
|
|
||||||
field: 'jenis_customer',
|
|
||||||
sortable: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Total Harga Pesanan",
|
|
||||||
field:'total_harga',
|
|
||||||
formatter: function(value, row){
|
|
||||||
return 'Rp ' + parseInt(row.total_harga).toLocaleString('id-ID')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
],
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -91,6 +91,38 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-4 mt-2">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="card border-0 shadow-sm bg-light-info text-secondary">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title mb-1"><i class="bx bx-money me-1"></i> Karyawan RSAB Harapan Kita</h5>
|
||||||
|
<h2 class="fw-bold mb-1" id="nilai_transaksi_karyawan">Rp 1.240.000</h2>
|
||||||
|
<small>Total Nilai Transaksi Karyawan RSAB Harapan Kita</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="card border-0 shadow-sm bg-light-secondary text-secondary">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title mb-1"><i class="bx bx-money me-1"></i> Keluarga Pasien / Penunggu Pasien</h5>
|
||||||
|
<h2 class="fw-bold mb-1" id="nilai_transaksi_pasien">Rp 1.240.000</h2>
|
||||||
|
<small>Total Nilai Transaksi Keluarga Pasien / Penunggu Pasien</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="card border-0 shadow-sm bg-light-success text-secondary">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title mb-1"><i class="bx bx-money me-1"></i> Masyarakat Umum</h5>
|
||||||
|
<h2 class="fw-bold mb-1" id="nilai_transaksi_masyarakat">Rp 1.240.000</h2>
|
||||||
|
<small>Total Nilai Transaksi Masyarakat Umum</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="card mt-4">
|
<div class="card mt-4">
|
||||||
<div class="card-header d-flex justify-content-between align-items-center">
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
<h5 class="mb-0">Data Pesanan </h5>
|
<h5 class="mb-0">Data Pesanan </h5>
|
||||||
|
|||||||
@ -58,6 +58,7 @@
|
|||||||
<option value="Snack">Snack</option>
|
<option value="Snack">Snack</option>
|
||||||
<option value="Makanan">Makanan</option>
|
<option value="Makanan">Makanan</option>
|
||||||
<option value="Minuman">Minuman</option>
|
<option value="Minuman">Minuman</option>
|
||||||
|
<option value="Paket">Paket</option>
|
||||||
</select>
|
</select>
|
||||||
<label>Kategori</label>
|
<label>Kategori</label>
|
||||||
</div>
|
</div>
|
||||||
@ -83,7 +84,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<label for="tags" class="form-label">Kalori</label>
|
<label for="tags" class="form-label">Kalori</label>
|
||||||
<select class="kalori-menu" multiple name="data[0][kalori_id][]"></select>
|
<select class="kalori-menu" name="data[0][kalori_id][]"></select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
|||||||
@ -51,6 +51,7 @@
|
|||||||
<option value="Snack">Snack</option>
|
<option value="Snack">Snack</option>
|
||||||
<option value="Makanan">Makanan</option>
|
<option value="Makanan">Makanan</option>
|
||||||
<option value="Minuman">Minuman</option>
|
<option value="Minuman">Minuman</option>
|
||||||
|
<option value="Paket">Paket</option>
|
||||||
</select>
|
</select>
|
||||||
<label>Kategori</label>
|
<label>Kategori</label>
|
||||||
</div>
|
</div>
|
||||||
@ -76,7 +77,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<label for="kalori_id_edit" class="form-label">Kalori</label>
|
<label for="kalori_id_edit" class="form-label">Kalori</label>
|
||||||
<select class="kalori-menu" multiple name="kalori_id[]" id="kalori_id_edit"></select>
|
<select class="kalori-menu" name="kalori_id[]" id="kalori_id_edit"></select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
|||||||
@ -52,12 +52,12 @@
|
|||||||
<div data-i18n="Account Settings">Master Menu</div>
|
<div data-i18n="Account Settings">Master Menu</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="menu-item {{ Request::is('dashboard/paket-menu') ? 'active' : '' }}">
|
{{-- <li class="menu-item {{ Request::is('dashboard/paket-menu') ? 'active' : '' }}">
|
||||||
<a href="/dashboard/paket-menu" class="menu-link">
|
<a href="/dashboard/paket-menu" class="menu-link">
|
||||||
<i class="menu-icon tf-icons bx bx-dock-top"></i>
|
<i class="menu-icon tf-icons bx bx-dock-top"></i>
|
||||||
<div data-i18n="Authentications">Master Paket Menu</div>
|
<div data-i18n="Authentications">Master Paket Menu</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li> --}}
|
||||||
<!-- Components -->
|
<!-- Components -->
|
||||||
<li class="menu-header small text-uppercase"><span class="menu-header-text">Order</span></li>
|
<li class="menu-header small text-uppercase"><span class="menu-header-text">Order</span></li>
|
||||||
<!-- Cards -->
|
<!-- Cards -->
|
||||||
|
|||||||
@ -18,6 +18,9 @@
|
|||||||
<!-- Kanan: Tombol Export + Input Tanggal -->
|
<!-- Kanan: Tombol Export + Input Tanggal -->
|
||||||
<div class="d-flex align-items-center gap-2">
|
<div class="d-flex align-items-center gap-2">
|
||||||
<!-- Tombol Export -->
|
<!-- Tombol Export -->
|
||||||
|
<button type="button" class="btn btn-sm btn-primary" id="buttonLabel" onclick="labelDownload()" disabled>
|
||||||
|
<i class="fa-solid fa-qrcode"></i> Download Label
|
||||||
|
</button>
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="exportPekerjaan()">
|
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="exportPekerjaan()">
|
||||||
<i class="fa fa-download me-1"></i> Export
|
<i class="fa fa-download me-1"></i> Export
|
||||||
</button>
|
</button>
|
||||||
@ -66,7 +69,17 @@
|
|||||||
})
|
})
|
||||||
initDt(selectedFormattedDates);
|
initDt(selectedFormattedDates);
|
||||||
if(selectedFormattedDates.length > 0){
|
if(selectedFormattedDates.length > 0){
|
||||||
$("#confirm_pekerjaan_time").text('Pada Tanggal : ' + selectedFormattedDates)
|
const tanggalList = selectedFormattedDates;
|
||||||
|
|
||||||
|
let tanggalRapi = '';
|
||||||
|
if (tanggalList.length === 1) {
|
||||||
|
tanggalRapi = tanggalList[0];
|
||||||
|
} else if (tanggalList.length === 2) {
|
||||||
|
tanggalRapi = tanggalList.join(' dan ');
|
||||||
|
} else if (tanggalList.length > 2) {
|
||||||
|
tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1);
|
||||||
|
}
|
||||||
|
$("#confirm_pekerjaan_time").text(': '+ tanggalRapi)
|
||||||
}else{
|
}else{
|
||||||
$("#confirm_pekerjaan_time").text('Hari Ini');
|
$("#confirm_pekerjaan_time").text('Hari Ini');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,7 +109,7 @@
|
|||||||
<th>Nama Pemesan</th>
|
<th>Nama Pemesan</th>
|
||||||
<th>Status Order</th>
|
<th>Status Order</th>
|
||||||
<th>Tanggal Antar</th>
|
<th>Tanggal Antar</th>
|
||||||
<th>Waktu Pemesanan</th>
|
<th>Waktu Makan</th>
|
||||||
<th>Menu</th>
|
<th>Menu</th>
|
||||||
<th>Keterangan</th>
|
<th>Keterangan</th>
|
||||||
<th>Jumlah</th>
|
<th>Jumlah</th>
|
||||||
|
|||||||
@ -44,26 +44,4 @@
|
|||||||
<script src="{{ ver('/js/pesanan_pending/dt.js') }}"></script>
|
<script src="{{ ver('/js/pesanan_pending/dt.js') }}"></script>
|
||||||
<script src="{{ ver('/js/pesanan_pending/action.js') }}"></script>
|
<script src="{{ ver('/js/pesanan_pending/action.js') }}"></script>
|
||||||
<script src="{{ ver('/js/pesanan_pending/action_progres_order.js') }}"></script>
|
<script src="{{ ver('/js/pesanan_pending/action_progres_order.js') }}"></script>
|
||||||
<script>
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
flatpickr('#tanggal', {
|
|
||||||
dateFormat: "Y-m-d",
|
|
||||||
mode: "multiple",
|
|
||||||
locale: "id", // opsional: agar hari/bulan dalam Bahasa Indonesia
|
|
||||||
onValueUpdate: function(selectedDates, dateStr, instance) {
|
|
||||||
const selectedFormattedDates = selectedDates.map(d => {
|
|
||||||
const year = d.getFullYear();
|
|
||||||
const month = String(d.getMonth() + 1).padStart(2, '0');
|
|
||||||
const day = String(d.getDate()).padStart(2, '0');
|
|
||||||
return `${year}-${month}-${day}`;
|
|
||||||
})
|
|
||||||
if(selectedFormattedDates.length > 0){
|
|
||||||
$("#confirm_date_pesanan_pending").text('Pada Tanggal : ' + selectedFormattedDates)
|
|
||||||
}else{
|
|
||||||
$("#confirm_date_pesanan_pending").text('');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@ -2,11 +2,11 @@
|
|||||||
<html lang="id">
|
<html lang="id">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Laporan Pesanan</title>
|
<title>Laporan Pesanan Pending</title>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
font-size: 11px;
|
font-size: 10px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin: 40px;
|
margin: 40px;
|
||||||
color: #333;
|
color: #333;
|
||||||
@ -56,11 +56,11 @@
|
|||||||
th {
|
th {
|
||||||
background-color: #f0f0f0;
|
background-color: #f0f0f0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 11px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
td {
|
td {
|
||||||
font-size: 11px;
|
font-size: 10px;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,14 +68,7 @@
|
|||||||
background-color: #f9f9f9;
|
background-color: #f9f9f9;
|
||||||
}
|
}
|
||||||
|
|
||||||
th:nth-child(1), td:nth-child(1) { width: 30px; text-align: center; }
|
|
||||||
th:nth-child(2), td:nth-child(2) { width: 90px; }
|
|
||||||
th:nth-child(3), td:nth-child(3) { width: 140px; }
|
|
||||||
th:nth-child(4), td:nth-child(4) { width: 150px; }
|
|
||||||
th:nth-child(5), td:nth-child(5) { width: 50px; text-align: center; }
|
|
||||||
th:nth-child(6), td:nth-child(6) { width: 80px; text-align: right; }
|
|
||||||
th:nth-child(7), td:nth-child(7) { width: 90px; text-align: center; }
|
|
||||||
th:nth-child(8), td:nth-child(8) { width: 60px; text-align: center; }
|
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -91,10 +84,10 @@
|
|||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<h2>Laporan Pesanan Pending</h2>
|
<h2>Laporan Pesanan Pending</h2>
|
||||||
@if($startDate === $endDate)
|
@if ($startDate === $endDate)
|
||||||
<div class="sub-title">Periode: {{ $startDate }} </div>
|
<div class="sub-title">Periode: {{ $startDate }}</div>
|
||||||
@else
|
@else
|
||||||
<div class="sub-title">Periode: {{ $startDate }} - {{ $endDate }}</div>
|
<div class="sub-title">Periode: {{ $startDate }} - {{ $endDate }}</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="sub-title">RSAB Harapan Kita</div>
|
<div class="sub-title">RSAB Harapan Kita</div>
|
||||||
</div>
|
</div>
|
||||||
@ -106,51 +99,51 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>No</th>
|
<th style="width:5%;">No</th>
|
||||||
<th>No Order</th>
|
<th>No Order</th>
|
||||||
|
<th>Status Bayar</th>
|
||||||
<th>Nama Pemesan</th>
|
<th>Nama Pemesan</th>
|
||||||
<th>Menu</th>
|
<th>Menu</th>
|
||||||
<th>Status Order</th>
|
<th>Status Order</th>
|
||||||
<th>Jumlah</th>
|
<th style="width:9%;">Jumlah</th>
|
||||||
<th>Harga Satuan (Rp)</th>
|
<th style="width:9%; text-align:center;">Harga Satuan (Rp)</th>
|
||||||
<th>Tanggal Antar</th>
|
<th>Tanggal Antar</th>
|
||||||
<th>Waktu</th>
|
<th>Waktu Makan</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@php $no = 1; @endphp
|
@php $no = 1; @endphp
|
||||||
@forelse ($orders as $order)
|
@forelse ($orders as $order)
|
||||||
@foreach ($order->orderDetail as $i => $detail)
|
@foreach ($order->orderDetail as $i => $detail)
|
||||||
<tr>
|
|
||||||
<td style="text-align: center;">{{ $i === 0 ? $no++ : '' }}</td>
|
|
||||||
<td>{{ $i === 0 ? $order->no_order : '' }}</td>
|
|
||||||
<td>
|
|
||||||
@if ($i === 0)
|
|
||||||
{{ $order->nama_pemesan }}
|
|
||||||
@if ($order->jenis_customer)
|
|
||||||
<br><small>({{ $order->jenis_customer }})</small>
|
|
||||||
@endif
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
|
|
||||||
<td>{{ $detail->status_order ?? '-' }}</td>
|
|
||||||
<td style="text-align: center;">{{ $detail->jumlah }}</td>
|
|
||||||
<td style="text-align: right;">{{ number_format($detail->harga_satuan, 0, ',', '.') }}</td>
|
|
||||||
<td style="text-align: center;">
|
|
||||||
{{ $detail->tgl_antar
|
|
||||||
? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y')
|
|
||||||
: '-' }}
|
|
||||||
</td>
|
|
||||||
<td style="text-align: center;">{{ $detail->type }}</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
@empty
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="9" style="text-align: center; color: #888;">Tidak ada data pesanan</td>
|
<td>{{ $i === 0 ? $no++ : '' }}</td>
|
||||||
|
<td>{{ $i === 0 ? $order->no_order : '' }}</td>
|
||||||
|
<td>{{ $i === 0 ? ($order->status_order === "Belum Bayar" ? $order->status_order : $order->status_order . ' ('. $order->cara_pembayaran .')' ) : '' }}</td>
|
||||||
|
<td>
|
||||||
|
@if ($i === 0)
|
||||||
|
{{ $order->nama_pemesan }}
|
||||||
|
@if ($order->jenis_customer)
|
||||||
|
<br><small>({{ $order->jenis_customer }})</small>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
|
||||||
|
<td>{{ $detail->status_order ?? '-' }}</td>
|
||||||
|
<td style="text-align: center;">{{ $detail->jumlah }}</td>
|
||||||
|
<td style="text-align: right;">{{ number_format($detail->harga_satuan, 0, ',', '.') }}</td>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
{{ $detail->tgl_antar
|
||||||
|
? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y')
|
||||||
|
: '-' }}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: center;">{{ $detail->type }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforelse
|
@endforeach
|
||||||
|
@empty
|
||||||
|
<tr>
|
||||||
|
<td colspan="9" style="text-align: center; color: #888;">Tidak ada data pesanan</td>
|
||||||
|
</tr>
|
||||||
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<!-- Card Master Menu -->
|
<!-- Card Master Menu -->
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header d-flex justify-content-between align-items-center">
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
<h5 class="mb-0">Pesanan Selesai</h5>
|
<h5 class="mb-0">Pesanan Selesai <strong id="confirm_selesai_time"></strong></h5>
|
||||||
<div class="d-flex align-items-center gap-2">
|
<div class="d-flex align-items-center gap-2">
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="exportSelesai()">
|
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="exportSelesai()">
|
||||||
<i class="fa fa-download me-1"></i> Export
|
<i class="fa fa-download me-1"></i> Export
|
||||||
@ -54,13 +54,27 @@
|
|||||||
const day = String(d.getDate()).padStart(2, '0');
|
const day = String(d.getDate()).padStart(2, '0');
|
||||||
return `${year}-${month}-${day}`;
|
return `${year}-${month}-${day}`;
|
||||||
})
|
})
|
||||||
|
initDt(selectedFormattedDates)
|
||||||
if(selectedFormattedDates.length > 0){
|
if(selectedFormattedDates.length > 0){
|
||||||
$("#confirm_date_pesanan_pending").text('Pada Tanggal : ' + selectedFormattedDates)
|
const tanggalList = selectedFormattedDates;
|
||||||
|
|
||||||
|
let tanggalRapi = '';
|
||||||
|
if (tanggalList.length === 1) {
|
||||||
|
tanggalRapi = tanggalList[0];
|
||||||
|
} else if (tanggalList.length === 2) {
|
||||||
|
tanggalRapi = tanggalList.join(' dan ');
|
||||||
|
} else if (tanggalList.length > 2) {
|
||||||
|
tanggalRapi = tanggalList.slice(0, -1).join(', ') + ', dan ' + tanggalList.slice(-1);
|
||||||
|
}
|
||||||
|
$("#confirm_selesai_time").text(': ' + tanggalRapi)
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
$("#confirm_date_pesanan_pending").text('');
|
$("#confirm_selesai_time").text('');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
$("#confirm_selesai_time").text('Hari ini');
|
||||||
|
initDt()
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@ -68,7 +68,6 @@
|
|||||||
background-color: #f9f9f9;
|
background-color: #f9f9f9;
|
||||||
}
|
}
|
||||||
|
|
||||||
th:nth-child(1), td:nth-child(1) { width: 30px; text-align: center; }
|
|
||||||
th:nth-child(2), td:nth-child(2) { width: 90px; }
|
th:nth-child(2), td:nth-child(2) { width: 90px; }
|
||||||
th:nth-child(3), td:nth-child(3) { width: 140px; }
|
th:nth-child(3), td:nth-child(3) { width: 140px; }
|
||||||
th:nth-child(4), td:nth-child(4) { width: 150px; }
|
th:nth-child(4), td:nth-child(4) { width: 150px; }
|
||||||
@ -114,7 +113,7 @@
|
|||||||
<th>Jumlah</th>
|
<th>Jumlah</th>
|
||||||
<th>Harga Satuan (Rp)</th>
|
<th>Harga Satuan (Rp)</th>
|
||||||
<th>Tanggal Antar</th>
|
<th>Tanggal Antar</th>
|
||||||
<th>Waktu</th>
|
<th>Waktu Makan</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@ -122,7 +121,7 @@
|
|||||||
@forelse ($orders as $order)
|
@forelse ($orders as $order)
|
||||||
@foreach ($order->orderDetail as $i => $detail)
|
@foreach ($order->orderDetail as $i => $detail)
|
||||||
<tr>
|
<tr>
|
||||||
<td style="text-align: center;">{{ $i === 0 ? $no++ : '' }}</td>
|
<td style="width: 6%;">{{ $i === 0 ? $no++ : '' }}</td>
|
||||||
<td>{{ $i === 0 ? $order->no_order : '' }}</td>
|
<td>{{ $i === 0 ? $order->no_order : '' }}</td>
|
||||||
<td>
|
<td>
|
||||||
@if ($i === 0)
|
@if ($i === 0)
|
||||||
@ -134,8 +133,8 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
|
<td>{{ $detail->menu->nama_menu ?? '-' }}</td>
|
||||||
<td>{{ $detail->status_order ?? '-' }}</td>
|
<td>{{ $detail->status_order ?? '-' }}</td>
|
||||||
<td style="text-align: center;">{{ $detail->jumlah }}</td>
|
<td style="width: 10%; text-align: center;">{{ $detail->jumlah }}</td>
|
||||||
<td style="text-align: right;">{{ number_format($detail->harga_satuan, 0, ',', '.') }}</td>
|
<td style="width: 10%; text-align: right;">{{ number_format($detail->harga_satuan, 0, ',', '.') }}</td>
|
||||||
<td style="text-align: center;">
|
<td style="text-align: center;">
|
||||||
{{ $detail->tgl_antar
|
{{ $detail->tgl_antar
|
||||||
? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y')
|
? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y')
|
||||||
|
|||||||
@ -4,11 +4,8 @@
|
|||||||
<section class="section py-5 bg-light">
|
<section class="section py-5 bg-light">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 mb-2">
|
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
||||||
<div id="welcomeMessage"></div>
|
<ul class="nav nav-tabs mb-3" id="tabJenisMenu">
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<ul class="nav nav-tabs mb-4 " id="tabJenisMenu">
|
|
||||||
<li class="nav-item"><a class="nav-link active text-success" href="#" data-filter="makanan">Makanan</a></li>
|
<li class="nav-item"><a class="nav-link active text-success" href="#" data-filter="makanan">Makanan</a></li>
|
||||||
<li class="nav-item "><a class="nav-link text-black" href="#" data-filter="minuman">Minuman</a></li>
|
<li class="nav-item "><a class="nav-link text-black" href="#" data-filter="minuman">Minuman</a></li>
|
||||||
<li class="nav-item"><a class="nav-link text-black" href="#" data-filter="snack">Snack</a></li>
|
<li class="nav-item"><a class="nav-link text-black" href="#" data-filter="snack">Snack</a></li>
|
||||||
@ -16,12 +13,36 @@
|
|||||||
<li class="nav-item"><a class="nav-link text-black" href="#" data-filter="konsultasi">Jadwal Konsultasi Gizi</a></li>
|
<li class="nav-item"><a class="nav-link text-black" href="#" data-filter="konsultasi">Jadwal Konsultasi Gizi</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
||||||
<div class="mb-4">
|
<div class="mb-3">
|
||||||
<input type="text" class="form-control" id="searchMenu" placeholder="Pencarian...">
|
<input type="text" class="form-control" id="searchMenu" placeholder="Pencarian...">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row g-2 m-2">
|
||||||
|
<!-- Filter Kategori Ketersediaan -->
|
||||||
|
<div class="col-12 mb-2">
|
||||||
|
<h6 class="fw-bold text-muted">Ketersediaan Menu</h6>
|
||||||
|
<div class="d-flex flex-wrap gap-2">
|
||||||
|
<button type="button" class="btn btn-outline-success btn-sm" data-filter="someday">Tersedia Setiap Hari</button>
|
||||||
|
<button type="button" class="btn btn-outline-primary btn-sm" data-filter="normal">Tersedia di Tanggal Tertentu</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Filter Kategori Menu -->
|
||||||
|
<div class="col-12 mt-3">
|
||||||
|
<h6 class="fw-bold text-muted">Kategori Menu</h6>
|
||||||
|
<div class="d-flex flex-wrap gap-2">
|
||||||
|
<button type="button" class="btn btn-outline-secondary btn-sm" data-filter="menu1">Menu 1</button>
|
||||||
|
<button type="button" class="btn btn-outline-secondary btn-sm" data-filter="menu2">Menu 2</button>
|
||||||
|
<button type="button" class="btn btn-outline-secondary btn-sm" data-filter="menu3">Menu 3</button>
|
||||||
|
<button type="button" class="btn btn-outline-secondary btn-sm" data-filter="menu4">Menu 4</button>
|
||||||
|
<button type="button" class="btn btn-outline-secondary btn-sm" data-filter="menu5">Menu 5</button>
|
||||||
|
<!-- dan seterusnya -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="order_guest_id"></div>
|
<div id="order_guest_id"></div>
|
||||||
<div id="floatingCartButton"
|
<div id="floatingCartButton"
|
||||||
class="cart-floating bg-success text-white rounded d-none shadow-lg"
|
class="cart-floating bg-success text-white rounded d-none shadow-lg"
|
||||||
|
|||||||
@ -59,6 +59,7 @@ Route::group(['middleware' => ['auth']], function(){
|
|||||||
Route::get('datatable/pekerjaan', [PesananController::class, 'getPekerjaan']);
|
Route::get('datatable/pekerjaan', [PesananController::class, 'getPekerjaan']);
|
||||||
Route::post('pekerjaan/export', [PesananController::class, 'exportPekerjaan']);
|
Route::post('pekerjaan/export', [PesananController::class, 'exportPekerjaan']);
|
||||||
Route::get('/pekerjaan/detail/{id}', [PesananController::class, 'getPekerjaanDetail']);
|
Route::get('/pekerjaan/detail/{id}', [PesananController::class, 'getPekerjaanDetail']);
|
||||||
|
Route::post('/pekerjaan/label', [PesananController::class, 'downloadLabel']);
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::post('/logout', [AuthController::class, 'logout']);
|
Route::post('/logout', [AuthController::class, 'logout']);
|
||||||
|
|||||||