progress list pekerjaan
This commit is contained in:
parent
57bf235cca
commit
a2889db109
@ -252,10 +252,12 @@ class CustomerController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//code...
|
//code...
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'data' => $order,
|
'data' => $order,
|
||||||
|
'entry_at' => Carbon::now(),
|
||||||
'message' => 'Data berhasil disimpan'
|
'message' => 'Data berhasil disimpan'
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
@ -270,16 +272,29 @@ class CustomerController extends Controller
|
|||||||
public function finishCheckout(){
|
public function finishCheckout(){
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$noOrder = request('no_order_result');
|
$noOrder = request('no_order_result');
|
||||||
$evidence = request()->file('bukti_pembayaran');
|
$evidence = request()->file('bukti_pembayaran');
|
||||||
|
|
||||||
$caraPembayaran = request('cara_pembayaran');
|
$caraPembayaran = request('cara_pembayaran');
|
||||||
$order = Order::where('no_order', $noOrder)->first();
|
$order = Order::where('no_order', $noOrder)->first();
|
||||||
// Simpan file ke storage
|
// Simpan file ke storage
|
||||||
|
if (!$order) {
|
||||||
|
return response()->json(['status' => false, 'message' => 'Nomor order tidak ditemukan'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$entryAt = Carbon::parse($order->entry_at)->copy()->addMinutes(10);
|
||||||
|
if(Carbon::now()->gt($entryAt)){
|
||||||
|
return response()->json(['status' => false, 'message' => 'Waktu pembayaran sudah habis, lakukan pemesanan ulang'],403);
|
||||||
|
}
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'tgl_pembayaran' => Carbon::now()
|
'tgl_pembayaran' => Carbon::now()
|
||||||
];
|
];
|
||||||
if($caraPembayaran === "transfer"){
|
if($caraPembayaran === "transfer"){
|
||||||
|
if (!$evidence) {
|
||||||
|
return response()->json(['status' => false, 'message' => 'Bukti pembayaran wajib diunggah'], 422);
|
||||||
|
}
|
||||||
$path = $evidence->store('bukti_pembayaran', 'public');
|
$path = $evidence->store('bukti_pembayaran', 'public');
|
||||||
$payload['bukti_pembayaran'] = $path;
|
$payload['bukti_pembayaran'] = $path;
|
||||||
$payload['cara_pembayaran'] = 'Transfer';
|
$payload['cara_pembayaran'] = 'Transfer';
|
||||||
@ -300,6 +315,7 @@ class CustomerController extends Controller
|
|||||||
], 200);
|
], 200);
|
||||||
return back()->with('success', 'Bukti pembayaran berhasil diunggah.');
|
return back()->with('success', 'Bukti pembayaran berhasil diunggah.');
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
|
dd($th);
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
return response([
|
return response([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
@ -15,6 +16,84 @@ class DashboardController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function dataDashboard(){
|
public function dataDashboard(){
|
||||||
$data = DB::connection('dbOrderGizi')->table('public.order');
|
$startDate = request()->filled('start_date')
|
||||||
|
? Carbon::parse(request('start_date'))->startOfDay()
|
||||||
|
: Carbon::now()->startOfDay();
|
||||||
|
|
||||||
|
$endDate = request()->filled('end_date')
|
||||||
|
? Carbon::parse(request('end_date'))->endOfDay()
|
||||||
|
: Carbon::now()->endOfDay();
|
||||||
|
$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)
|
||||||
|
->whereBetween('o.entry_at', [$startDate, $endDate])
|
||||||
|
->select(
|
||||||
|
'o.order_id',
|
||||||
|
'o.entry_at',
|
||||||
|
'o.no_order',
|
||||||
|
'o.nama_pemesan',
|
||||||
|
'o.jenis_customer',
|
||||||
|
'o.total_harga',
|
||||||
|
'o.status_order',
|
||||||
|
'o.cara_pembayaran',
|
||||||
|
'o.bukti_pembayaran',
|
||||||
|
'o.note_dibatalkan',
|
||||||
|
'od.status_order as detail_status_order')
|
||||||
|
->get()->groupBy('order_id');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$grouped = $data->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,
|
||||||
|
'progress' => $progress,
|
||||||
|
'total_detail' => $totalDetail,
|
||||||
|
'selesai_detail' => $selesaiDetail,
|
||||||
|
'note_dibatalkan' => $first->note_dibatalkan,
|
||||||
|
];
|
||||||
|
})->values();
|
||||||
|
$totalPemasukan = $grouped->sum('total_harga');
|
||||||
|
$pesananPending = $grouped->whereNotIn('status_order', ['Lunas', 'Dibatalkan'])->count();
|
||||||
|
$pesananLunas = $grouped->where('status_order', 'Lunas')->count();
|
||||||
|
$pesananBatal = $grouped->where('status_order', 'Dibatalkan')->count();
|
||||||
|
$totalPesanan = $grouped->count();
|
||||||
|
|
||||||
|
$pesananSelesai = DB::connection('dbOrderGizi')->table('public.order as o')
|
||||||
|
->where('o.statusenabled', true)
|
||||||
|
->whereBetween('o.entry_at', [$startDate, $endDate])
|
||||||
|
->whereNotExists(function($query){
|
||||||
|
$query->select(DB::raw(1))
|
||||||
|
->from('public.order_detail as od')
|
||||||
|
->whereColumn('od.order_id', 'o.order_id')
|
||||||
|
->where('od.status_order', '!=', 'Selesai');
|
||||||
|
})->count();
|
||||||
|
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'message' => 'Berhasil mendapatkan data',
|
||||||
|
'data' => [
|
||||||
|
'totalPesanan' => $totalPesanan,
|
||||||
|
'totalPemasukan' => $totalPemasukan,
|
||||||
|
'pesananPending' => $pesananPending,
|
||||||
|
'pesananBatal' => $pesananBatal,
|
||||||
|
'pesananLunas' => $pesananLunas,
|
||||||
|
'pesananSelesai' => $pesananSelesai,
|
||||||
|
],
|
||||||
|
'rows' => $grouped->values(),
|
||||||
|
'total' => $grouped->count(),
|
||||||
|
],200);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,13 +32,13 @@ class PesananController extends Controller
|
|||||||
'o.no_order',
|
'o.no_order',
|
||||||
'o.nama_pemesan',
|
'o.nama_pemesan',
|
||||||
'o.jenis_customer',
|
'o.jenis_customer',
|
||||||
'o.total_harga',
|
'o.cara_pembayaran',
|
||||||
'o.status_order',
|
'o.status_order',
|
||||||
|
'o.total_harga',
|
||||||
'o.bukti_pembayaran',
|
'o.bukti_pembayaran',
|
||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
'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){
|
||||||
$first = $items->first();
|
$first = $items->first();
|
||||||
$totalDetail = $items->count();
|
$totalDetail = $items->count();
|
||||||
@ -52,6 +52,7 @@ class PesananController extends Controller
|
|||||||
'jenis_customer' => $first->jenis_customer,
|
'jenis_customer' => $first->jenis_customer,
|
||||||
'total_harga' => $first->total_harga,
|
'total_harga' => $first->total_harga,
|
||||||
'status_order' => $first->status_order,
|
'status_order' => $first->status_order,
|
||||||
|
'cara_pembayaran' => $first->cara_pembayaran,
|
||||||
'bukti_pembayaran' => $first->bukti_pembayaran,
|
'bukti_pembayaran' => $first->bukti_pembayaran,
|
||||||
'progress' => $progress,
|
'progress' => $progress,
|
||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
@ -163,6 +164,7 @@ class PesananController extends Controller
|
|||||||
'o.nama_pemesan',
|
'o.nama_pemesan',
|
||||||
'o.jenis_customer',
|
'o.jenis_customer',
|
||||||
'o.total_harga',
|
'o.total_harga',
|
||||||
|
'o.cara_pembayaran',
|
||||||
'o.status_order',
|
'o.status_order',
|
||||||
'o.bukti_pembayaran',
|
'o.bukti_pembayaran',
|
||||||
'o.note_dibatalkan',
|
'o.note_dibatalkan',
|
||||||
@ -183,6 +185,7 @@ class PesananController extends Controller
|
|||||||
'total_harga' => $first->total_harga,
|
'total_harga' => $first->total_harga,
|
||||||
'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,
|
||||||
'progress' => $progress,
|
'progress' => $progress,
|
||||||
'total_detail' => $totalDetail,
|
'total_detail' => $totalDetail,
|
||||||
'selesai_detail' => $selesaiDetail,
|
'selesai_detail' => $selesaiDetail,
|
||||||
@ -200,6 +203,21 @@ class PesananController extends Controller
|
|||||||
'total' => $grouped->count()
|
'total' => $grouped->count()
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function pekerjaan(){
|
||||||
|
$data = [
|
||||||
|
'title' => 'List Pekerjaan Order Gizi'
|
||||||
|
];
|
||||||
|
return view('dashboard.pesanan.pekerjaan.index', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPekerjaan(){
|
||||||
|
$data = OrderDetail::get();
|
||||||
|
return response()->json([
|
||||||
|
'rows' => $data->values(),
|
||||||
|
'total' => $data->count()
|
||||||
|
]);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Show the form for creating a new resource.
|
* Show the form for creating a new resource.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -39,7 +39,8 @@ class Order extends Model
|
|||||||
];
|
];
|
||||||
|
|
||||||
protected $cast = [
|
protected $cast = [
|
||||||
'tgl_pembayaran' => 'datetime'
|
'tgl_pembayaran' => 'datetime',
|
||||||
|
'entry_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function orderDetail(){
|
public function orderDetail(){
|
||||||
|
|||||||
@ -65,7 +65,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'timezone' => 'UTC',
|
'timezone' => 'Asia/Jakarta',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|||||||
@ -22,7 +22,9 @@ async function submitOrderToServer(){
|
|||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
if (response.ok && result.status) {
|
if (response.ok && result.status) {
|
||||||
// Hapus sessionStorage
|
// Hapus sessionStorage
|
||||||
|
|
||||||
sessionStorage.setItem('order_id', result.data.no_order);
|
sessionStorage.setItem('order_id', result.data.no_order);
|
||||||
|
sessionStorage.setItem('time_order', result.entry_at);
|
||||||
currentStep = 2;
|
currentStep = 2;
|
||||||
showStep(currentStep)
|
showStep(currentStep)
|
||||||
document.getElementById('no_order_display').textContent = result.data.no_order
|
document.getElementById('no_order_display').textContent = result.data.no_order
|
||||||
@ -63,7 +65,19 @@ async function submitOrderToServer(){
|
|||||||
|
|
||||||
$("#checkoutFormFinal").on('submit', async function(e){
|
$("#checkoutFormFinal").on('submit', async function(e){
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
const cara_pembayaran = document.getElementById('cara_pembayaran').value;
|
||||||
|
const bukti_pembayaran = document.querySelector('input[name="bukti_pembayaran"]').value;
|
||||||
|
|
||||||
|
if(cara_pembayaran === 'transfer' && !bukti_pembayaran){
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Bukti pembayaran kosong!',
|
||||||
|
text: 'Silahkan upload bukti pembayaran jika metode yang dipakai transfer.',
|
||||||
|
icon: 'warning',
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// }
|
||||||
const form = this;
|
const form = this;
|
||||||
|
|
||||||
const formData = new FormData(form);
|
const formData = new FormData(form);
|
||||||
@ -78,12 +92,14 @@ 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
|
||||||
sessionStorage.removeItem('cart');
|
sessionStorage.removeItem('cart');
|
||||||
sessionStorage.removeItem('checkout_biodata');
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
sessionStorage.removeItem('order_id');
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Pesanan Berhasil!',
|
title: 'Pesanan Berhasil!',
|
||||||
@ -92,12 +108,27 @@ async function submitOrderToServer(){
|
|||||||
confirmButtonText: 'Berhasil!',
|
confirmButtonText: 'Berhasil!',
|
||||||
confirmButtonColor: '#28a745'
|
confirmButtonColor: '#28a745'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
window.location.href = "/success-page"; // kehalaman success
|
window.location.href = "/success-page"; // kehalaman success
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
alert(result.message || "Terjadi kesalahan.");
|
sessionStorage.removeItem('cart');
|
||||||
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Gagal!',
|
||||||
|
text: result.message,
|
||||||
|
icon: 'error',
|
||||||
|
confirmButtonText: 'Tutup!'
|
||||||
|
}).then(() => {
|
||||||
|
window.location.href = "/";
|
||||||
|
});;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
sessionStorage.removeItem('cart');
|
||||||
|
sessionStorage.removeItem('checkout_biodata');
|
||||||
|
sessionStorage.removeItem('order_id');
|
||||||
|
sessionStorage.removeItem('time_order');
|
||||||
console.error(err);
|
console.error(err);
|
||||||
alert("Terjadi kesalahan saat mengirim data.");
|
alert("Terjadi kesalahan saat mengirim data.");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
// =======================
|
// =======================
|
||||||
let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}');
|
let checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '{}');
|
||||||
let order_id = sessionStorage.getItem('order_id') || '[]';
|
let order_id = sessionStorage.getItem('order_id') || '[]';
|
||||||
|
|
||||||
// =======================
|
// =======================
|
||||||
// EVENT ON LOAD
|
// EVENT ON LOAD
|
||||||
// =======================
|
// =======================
|
||||||
@ -11,7 +10,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
$("#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;
|
||||||
|
let orderDate=''
|
||||||
|
let deadline=''
|
||||||
|
let time_order=''
|
||||||
// Setup button step
|
// Setup button step
|
||||||
document.querySelectorAll('.next-step').forEach(btn => {
|
document.querySelectorAll('.next-step').forEach(btn => {
|
||||||
btn.addEventListener('click', async () => {
|
btn.addEventListener('click', async () => {
|
||||||
@ -52,7 +53,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}
|
}
|
||||||
if (!sessionStorage.getItem('order_id')) {
|
if (!sessionStorage.getItem('order_id')) {
|
||||||
await submitOrderToServer(); // async function simpan ke server
|
await submitOrderToServer(); // async function simpan ke server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time_order = sessionStorage.getItem('time_order')
|
||||||
|
orderDate = new Date(time_order);
|
||||||
|
deadline = new Date(orderDate.getTime() + 10 * 60 * 1000)
|
||||||
|
updateCountdown()
|
||||||
currentStep++;
|
currentStep++;
|
||||||
showStep(currentStep)
|
showStep(currentStep)
|
||||||
}else if(currentStep === 2){
|
}else if(currentStep === 2){
|
||||||
@ -82,6 +89,33 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
toggleCustomerFields()
|
toggleCustomerFields()
|
||||||
document.getElementById('no_order_display').textContent = order_id
|
document.getElementById('no_order_display').textContent = order_id
|
||||||
|
|
||||||
|
const countDownPayment = document.getElementById('countdownPayment')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function updateCountdown(){
|
||||||
|
const now = new Date();
|
||||||
|
orderDate = new Date(time_order);
|
||||||
|
deadline = new Date(orderDate.getTime() + 10 * 60 * 1000)
|
||||||
|
const distance = deadline - now
|
||||||
|
|
||||||
|
if(distance <= 0){
|
||||||
|
countDownPayment.textContent = "Waktu Habis Lakukan Pemesanan Ulang";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))
|
||||||
|
const seconds = Math.floor((distance % (1000 * 60)) / 1000)
|
||||||
|
|
||||||
|
countDownPayment.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
|
||||||
|
}
|
||||||
|
|
||||||
|
updateCountdown();
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
updateCountdown()
|
||||||
|
if(new Date() >= deadline) clearInterval(interval)
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
});
|
});
|
||||||
// =======================
|
// =======================
|
||||||
// FUNGSI STEP
|
// FUNGSI STEP
|
||||||
@ -302,6 +336,9 @@ function renderCartSummary() {
|
|||||||
<i class="fa fa-utensils me-1"></i>
|
<i class="fa fa-utensils me-1"></i>
|
||||||
Menu: <strong>${item.apakah_someday ? 'Someday' : 'Menu Normal'}</strong>
|
Menu: <strong>${item.apakah_someday ? 'Someday' : 'Menu Normal'}</strong>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="mb-2 small text-muted">
|
||||||
|
<strong>Silakan isi tanggal pemesanan dan pilih karbohidrat yang diinginkan</strong>
|
||||||
|
</div>
|
||||||
${pesananHTML}
|
${pesananHTML}
|
||||||
<div class="mt-3 d-flex justify-content-between align-items-center">
|
<div class="mt-3 d-flex justify-content-between align-items-center">
|
||||||
<button type="button" class="btn btn-sm btn-outline-success"
|
<button type="button" class="btn btn-sm btn-outline-success"
|
||||||
@ -434,6 +471,7 @@ function validateStepOne() {
|
|||||||
const jenisKelamin = document.querySelector('input[name="jenis_kelamin"]:checked');
|
const jenisKelamin = document.querySelector('input[name="jenis_kelamin"]:checked');
|
||||||
const namaPemesan = document.getElementById('nama_pemesan').value.trim();
|
const namaPemesan = document.getElementById('nama_pemesan').value.trim();
|
||||||
const noWA = document.getElementById('no_whatsapp').value.trim();
|
const noWA = document.getElementById('no_whatsapp').value.trim();
|
||||||
|
const email = document.getElementById('email').value.trim();
|
||||||
|
|
||||||
if (!jenisCustomer) {
|
if (!jenisCustomer) {
|
||||||
alert('Silakan pilih jenis customer.');
|
alert('Silakan pilih jenis customer.');
|
||||||
@ -454,6 +492,10 @@ function validateStepOne() {
|
|||||||
alert('Silakan isi nomor WhatsApp.');
|
alert('Silakan isi nomor WhatsApp.');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!email) {
|
||||||
|
alert('Silakan isi email terlebih dahulu.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Validasi tambahan sesuai jenis customer
|
// Validasi tambahan sesuai jenis customer
|
||||||
const selected = jenisCustomer.value;
|
const selected = jenisCustomer.value;
|
||||||
@ -619,6 +661,7 @@ function toggleBuktiPembayaran() {
|
|||||||
const buktiSection = document.getElementById("bukti_section");
|
const buktiSection = document.getElementById("bukti_section");
|
||||||
const buktiInput = document.getElementById("bukti_pembayaran");
|
const buktiInput = document.getElementById("bukti_pembayaran");
|
||||||
|
|
||||||
|
buktiInput.required = true;
|
||||||
if (metode === "billing") {
|
if (metode === "billing") {
|
||||||
buktiSection.style.display = "none";
|
buktiSection.style.display = "none";
|
||||||
buktiInput.required = false;
|
buktiInput.required = false;
|
||||||
|
|||||||
@ -1,7 +1,16 @@
|
|||||||
const datatable = $("#datatableRekapDashboard")
|
const datatable = $("#datatableRekapDashboard")
|
||||||
|
|
||||||
|
|
||||||
|
$("#filterDashboard").on('click', function(){
|
||||||
|
let startDate= $("#start_date").val();
|
||||||
|
let endDate= $("#end_date").val();
|
||||||
|
fetchData(startDate, endDate)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
fetchData()
|
||||||
datatable.bootstrapTable({
|
datatable.bootstrapTable({
|
||||||
url: "/dashboard/datatable/selesai",
|
data: [],
|
||||||
showColumns: true,
|
showColumns: true,
|
||||||
showColumnsToggleAll: true,
|
showColumnsToggleAll: true,
|
||||||
showRefresh: true,
|
showRefresh: true,
|
||||||
@ -19,7 +28,6 @@ const datatable = $("#datatableRekapDashboard")
|
|||||||
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: "Action",
|
title: "Action",
|
||||||
@ -47,7 +55,12 @@ const datatable = $("#datatableRekapDashboard")
|
|||||||
field: 'no_order',
|
field: 'no_order',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
title: "Cara Pembayaran",
|
||||||
|
field: 'cara_pembayaran',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
title: "Status Pembayaran",
|
title: "Status Pembayaran",
|
||||||
field: 'status_order',
|
field: 'status_order',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
@ -133,3 +146,56 @@ const datatable = $("#datatableRekapDashboard")
|
|||||||
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function fetchData(startDate = null, endDate = null){
|
||||||
|
const params =new URLSearchParams()
|
||||||
|
if (startDate) params.append('start_date', startDate);
|
||||||
|
if (endDate) params.append('end_date', endDate);
|
||||||
|
fetch(`/dashboard/data${params.toString() ? '?' + params.toString() : ''}`)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(res=> {
|
||||||
|
$("#confirm_filter_time").text(formatTanggalRange(startDate, endDate))
|
||||||
|
if(startDate && endDate){
|
||||||
|
$("#confirm_filter_name").text('Pesanan')
|
||||||
|
}
|
||||||
|
$("#pesanan_data").text(res?.data?.totalPesanan)
|
||||||
|
$("#pesanan_lunas").text(res?.data?.pesananLunas)
|
||||||
|
$("#pesanan_waiting").text(res?.data?.pesananPending)
|
||||||
|
$("#pesanan_belum_diambil").text(res?.data?.pesananLunas - res?.data?.pesananSelesai)
|
||||||
|
$("#pesanan_diambil").text(res?.data?.pesananSelesai)
|
||||||
|
$("#nilai_transaksi_total").text(parseInt(res?.data?.totalPemasukan).toLocaleString('id-ID'))
|
||||||
|
datatable.bootstrapTable('load', res.rows)
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function formatTanggalRange(start, end) {
|
||||||
|
const options = { day: '2-digit', month: 'short', year: 'numeric' };
|
||||||
|
|
||||||
|
if (!start && !end) {
|
||||||
|
return `Data tanggal ${new Date().toLocaleDateString('id-ID', options)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start && end && start === end) {
|
||||||
|
return `Data tanggal ${new Date(start).toLocaleDateString('id-ID', options)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start && end) {
|
||||||
|
return `Data dari ${new Date(start).toLocaleDateString('id-ID', options)}
|
||||||
|
sampai ${new Date(end).toLocaleDateString('id-ID', options)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start && !end) {
|
||||||
|
return `Data sejak ${new Date(start).toLocaleDateString('id-ID', options)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!start && end) {
|
||||||
|
return `Data hingga ${new Date(end).toLocaleDateString('id-ID', options)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
function fetchMenu(filter = {}) {
|
function fetchMenu(filter = {}) {
|
||||||
|
|
||||||
const containerGuest = $("#order_guest_id");
|
const containerGuest = $("#order_guest_id");
|
||||||
if(filter.jenis_menu === "konsultasi"){
|
if(filter.jenis_menu === "konsultasi"){
|
||||||
const jadwalList = [
|
const jadwalList = [
|
||||||
@ -173,7 +174,7 @@
|
|||||||
<i class="fa-solid fa-circle-info"></i> Detail
|
<i class="fa-solid fa-circle-info"></i> Detail
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-success w-50"
|
<button class="btn btn-success w-50"
|
||||||
onclick="saveItem(this)"
|
onclick="handleClick(this)"
|
||||||
data-id="${menu.master_menu_id ?? menu.master_paket_menu_id}"
|
data-id="${menu.master_menu_id ?? menu.master_paket_menu_id}"
|
||||||
data-nama_menu="${menu.nama}"
|
data-nama_menu="${menu.nama}"
|
||||||
data-harga_karyawan="${menu.harga_karyawan}"
|
data-harga_karyawan="${menu.harga_karyawan}"
|
||||||
@ -230,25 +231,57 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const modalCheckout = $("#checkoutModal")
|
const modalCheckout = $("#checkoutModal")
|
||||||
function orderMenu(e){
|
function orderMenu(e) {
|
||||||
const klasifikasiStr = $(e).data('klasifikasi_menu') || '';
|
const el = $(e);
|
||||||
const tags = klasifikasiStr.split(',').map(tag => tag.trim()).filter(tag => tag !== '')
|
const tags = (el.data('klasifikasi_menu') || '').split(',').filter(Boolean).map(tag => tag.trim());
|
||||||
|
const someday = el.data('apakah_someday');
|
||||||
|
const siang = el.data('apakah_menu_siang');
|
||||||
|
const sore = el.data('apakah_menu_sore');
|
||||||
|
|
||||||
const klasifikasiMenu =tags.map(tag => `
|
const klasifikasiMenu = tags.map(tag => `
|
||||||
<span class="badge bg-secondary me-1 mb-1">${tag}</span>
|
<span class="badge bg-secondary me-1 mb-1">${tag}</span>
|
||||||
`).join('');
|
`).join('');
|
||||||
|
|
||||||
modalCheckout.modal("show")
|
const tglMenuTersedia = `
|
||||||
$('#cathering_order_photo').attr('src', `/gambar/${$(e).data('foto')}`)
|
<div class="mb-1 small text-muted">
|
||||||
$('#cathering_order_name').text($(e).data('nama_menu'))
|
<i class="fa fa-calendar-check me-1"></i>
|
||||||
$('#cathering_order_menu_id').text($(e).data('id'))
|
${someday ? 'Tersedia setiap hari (Senin - Minggu)' :
|
||||||
$('#cathering_order_jenis_menu').text($(e).data('jenis_menu'))
|
el.data('tgl_tersedia') ? `Tersedia pada tanggal: ${el.data('tgl_tersedia')}` :
|
||||||
$('#cathering_order_deskripsi').text($(e).data('deskripsi'))
|
'Tidak ada info tanggal tersedia'}
|
||||||
$('#cathering_order_price_keluarga_pasien').text("Rp " + parseInt($(e).data('harga_keluarga_pasien')).toLocaleString('id-ID'))
|
</div>
|
||||||
$('#cathering_order_price_karyawan').text("Rp " + parseInt($(e).data('harga_karyawan')).toLocaleString('id-ID'))
|
<div class="mb-1 small text-muted">
|
||||||
$("#tag_klasifikasi_menu").html(klasifikasiMenu)
|
<i class="fa fa-utensils me-1"></i> Menu: <strong>${someday ? 'Someday' : 'Menu Normal'}</strong>
|
||||||
|
</div>
|
||||||
|
<div class="mb-1 small text-muted">
|
||||||
|
${
|
||||||
|
siang && sore
|
||||||
|
? '<i class="fa fa-clock me-1 text-success"></i> Tersedia untuk makan siang dan sore'
|
||||||
|
: siang
|
||||||
|
? '<i class="fa fa-sun me-1 text-warning"></i> Tersedia untuk makan siang'
|
||||||
|
: sore
|
||||||
|
? '<i class="fa fa-moon me-1 text-info"></i> Tersedia untuk makan sore'
|
||||||
|
: '<i class="fa fa-ban me-1 text-danger"></i> Tidak tersedia untuk waktu makan apapun'
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#checkoutModal').modal('show');
|
||||||
|
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
||||||
|
$('#cathering_order_name').text(el.data('nama_menu') || '-');
|
||||||
|
$('#cathering_order_menu_id').val(el.data('id'));
|
||||||
|
$('#cathering_order_jenis_menu').val(el.data('jenis_menu'));
|
||||||
|
$('#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_keluarga_pasien').text("Rp " + parseInt(el.data('harga_keluarga_pasien') || 0).toLocaleString('id-ID'));
|
||||||
|
$('#tag_klasifikasi_menu').html(klasifikasiMenu);
|
||||||
|
$('#tgl_menu_tersedia').html(tglMenuTersedia);
|
||||||
|
$('#apakah_someday').val(someday ? 1 : 0);
|
||||||
|
$('#apakah_menu_siang').val(siang ? 1 : 0);
|
||||||
|
$('#apakah_menu_sore').val(sore ? 1 : 0);
|
||||||
|
$('#tgl_tersedia').val(el.data('tgl_tersedia'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function updateCartCount(count) {
|
function updateCartCount(count) {
|
||||||
const $cartCount = $('#cartCount');
|
const $cartCount = $('#cartCount');
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
@ -279,6 +312,12 @@
|
|||||||
$("#checkoutForm").on('submit', function(e){
|
$("#checkoutForm").on('submit', function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
|
|
||||||
|
let order_id = sessionStorage.getItem('order_id') || null;
|
||||||
|
if(order_id){
|
||||||
|
window.location.href = '/checkout'
|
||||||
|
}
|
||||||
|
|
||||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const todayFormatted = now.getFullYear() + '-' + (now.getMonth() + 1).toString().padStart(2, '0') + '-' + now.getDate().toString().padStart(2, '0')
|
const todayFormatted = now.getFullYear() + '-' + (now.getMonth() + 1).toString().padStart(2, '0') + '-' + now.getDate().toString().padStart(2, '0')
|
||||||
@ -286,10 +325,11 @@
|
|||||||
const orders = [{
|
const orders = [{
|
||||||
tgl: todayFormatted,
|
tgl: todayFormatted,
|
||||||
jumlah: 1,
|
jumlah: 1,
|
||||||
kategoriPemesanan: ''
|
kategoriPemesanan: $('#apakah_menu_sore').val() === "1" ? 'Makan Sore' : 'Makan Siang'
|
||||||
}];
|
}];
|
||||||
let idText = $("#cathering_order_menu_id").text().trim();
|
let idText = $("#cathering_order_menu_id").val();
|
||||||
let idMenu = parseInt(idText.replace(/[^\d]/g, ''), 10);
|
let idMenu = parseInt(idText.replace(/[^\d]/g, ''), 10);
|
||||||
|
|
||||||
let foto = $('#cathering_order_photo').attr('src')
|
let foto = $('#cathering_order_photo').attr('src')
|
||||||
let resultFoto = foto.replace('/gambar', '');
|
let resultFoto = foto.replace('/gambar', '');
|
||||||
|
|
||||||
@ -297,25 +337,20 @@
|
|||||||
|
|
||||||
let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu);
|
let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu);
|
||||||
|
|
||||||
if(existingItem){
|
if(!existingItem){
|
||||||
orders.forEach(newOrder => {
|
|
||||||
const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl)
|
|
||||||
if(existingOrder){
|
|
||||||
existingOrder.jumlah += newOrder.jumlah;
|
|
||||||
}else{
|
|
||||||
existingItem.pesanan.push(newOrder)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}else{
|
|
||||||
const orderItem ={
|
const orderItem ={
|
||||||
id:Date.now(),
|
id:Date.now(),
|
||||||
id_menu : $("#cathering_order_menu_id").text(),
|
id_menu :idMenu,
|
||||||
nama_menu : $("#cathering_order_name").text(),
|
nama_menu : $("#cathering_order_name").text(),
|
||||||
harga_karyawan : parseRupiahToNumber($("#cathering_order_price_karyawan").text()),
|
harga_karyawan : parseRupiahToNumber($("#cathering_order_price_karyawan").text()),
|
||||||
harga_kp : parseRupiahToNumber($("#cathering_order_price_keluarga_pasien").text()),
|
harga_kp : parseRupiahToNumber($("#cathering_order_price_keluarga_pasien").text()),
|
||||||
foto: resultFoto,
|
foto: resultFoto,
|
||||||
jenis_menu: $('#cathering_order_jenis_menu').text(),
|
jenis_menu: $('#cathering_order_jenis_menu').text(),
|
||||||
deskripsi:$("#cathering_order_deskripsi").text(),
|
deskripsi:$("#cathering_order_deskripsi").text(),
|
||||||
|
apakah_menu_siang: $('#apakah_menu_siang').val() === "1" ? true: false,
|
||||||
|
apakah_menu_sore: $('#apakah_menu_sore').val() === "1" ? true: false,
|
||||||
|
apakah_someday: $('#apakah_someday').val() === "1" ? true: false,
|
||||||
|
tgl_tersedia: $('#tgl_tersedia').val(),
|
||||||
pesanan : orders
|
pesanan : orders
|
||||||
}
|
}
|
||||||
cart.push(orderItem)
|
cart.push(orderItem)
|
||||||
@ -328,9 +363,6 @@
|
|||||||
|
|
||||||
function saveItem(e){
|
function saveItem(e){
|
||||||
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const orders = [{
|
const orders = [{
|
||||||
tgl: '',
|
tgl: '',
|
||||||
jumlah: 1,
|
jumlah: 1,
|
||||||
@ -381,6 +413,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleClick(e){
|
||||||
|
const order_id = sessionStorage.getItem('order_id') || null;
|
||||||
|
if(order_id){
|
||||||
|
window.location.href = '/checkout'
|
||||||
|
}else{
|
||||||
|
saveItem(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
1
public/js/pekerjaan/_init.js
Normal file
1
public/js/pekerjaan/_init.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
const datatablePekerjaan = $("#datatablePekerjaan")
|
||||||
139
public/js/pekerjaan/dt.js
Normal file
139
public/js/pekerjaan/dt.js
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
|
||||||
|
datatablePekerjaan.bootstrapTable({
|
||||||
|
url: "/dashboard/datatable/selesai",
|
||||||
|
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"
|
||||||
|
},
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: "Action",
|
||||||
|
field:'order_id',
|
||||||
|
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>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
return `
|
||||||
|
<div class="d-flex space-x">
|
||||||
|
${buttons}
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
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 `
|
||||||
|
<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')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
});
|
||||||
@ -70,6 +70,11 @@
|
|||||||
title: "No.Order",
|
title: "No.Order",
|
||||||
field: 'no_order',
|
field: 'no_order',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Cara Pembayaran",
|
||||||
|
field: 'cara_pembayaran',
|
||||||
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Status Pembayaran",
|
title: "Status Pembayaran",
|
||||||
|
|||||||
@ -45,6 +45,11 @@
|
|||||||
title: "No.Order",
|
title: "No.Order",
|
||||||
field: 'no_order',
|
field: 'no_order',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Cara Pembayaran",
|
||||||
|
field: 'cara_pembayaran',
|
||||||
|
sortable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Status Pembayaran",
|
title: "Status Pembayaran",
|
||||||
|
|||||||
@ -12,14 +12,14 @@
|
|||||||
<form method="GET" action="" class="d-flex flex-wrap justify-content-end align-items-end">
|
<form method="GET" action="" class="d-flex flex-wrap justify-content-end align-items-end">
|
||||||
<div class="me-2">
|
<div class="me-2">
|
||||||
<label class="form-label mb-1">Dari Tanggal</label>
|
<label class="form-label mb-1">Dari Tanggal</label>
|
||||||
<input type="date" name="start_date" class="form-control" value="">
|
<input type="date" name="start_date" id="start_date" class="form-control" value="">
|
||||||
</div>
|
</div>
|
||||||
<div class="me-2">
|
<div class="me-2">
|
||||||
<label class="form-label mb-1">Sampai Tanggal</label>
|
<label class="form-label mb-1">Sampai Tanggal</label>
|
||||||
<input type="date" name="end_date" class="form-control" value="">
|
<input type="date" name="end_date" id="end_date" class="form-control" value="">
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 mt-md-0">
|
<div class="mt-3 mt-md-0">
|
||||||
<button type="submit" class="btn btn-primary">Tampilkan</button>
|
<button type="button" class="btn btn-primary" id="filterDashboard">Tampilkan</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -30,9 +30,9 @@
|
|||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="card border-0 shadow-sm bg-light-primary text-primary">
|
<div class="card border-0 shadow-sm bg-light-primary text-primary">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title mb-1"><i class="bx bx-calendar me-1"></i> Pesanan Hari Ini</h5>
|
<h5 class="card-title mb-1" id="confirm_filter_name"><i class="bx bx-calendar me-1"></i> Pesanan Hari Ini</h5>
|
||||||
<h2 class="fw-bold mb-1">23</h2>
|
<h2 class="fw-bold mb-1" id="pesanan_data">23</h2>
|
||||||
<small>Data tanggal {{ \Carbon\Carbon::now()->format('d M Y') }}</small>
|
<small id="confirm_filter_time">Data tanggal {{ \Carbon\Carbon::now()->format('d M Y') }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
<div class="card border-0 shadow-sm bg-light-success text-success">
|
<div class="card border-0 shadow-sm bg-light-success text-success">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title mb-1"><i class="bx bx-check-circle me-1"></i> Pesanan Lunas</h5>
|
<h5 class="card-title mb-1"><i class="bx bx-check-circle me-1"></i> Pesanan Lunas</h5>
|
||||||
<h2 class="fw-bold mb-1">15</h2>
|
<h2 class="fw-bold mb-1" id="pesanan_lunas">15</h2>
|
||||||
<small>Status: Lunas</small>
|
<small>Status: Lunas</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -51,7 +51,7 @@
|
|||||||
<div class="card border-0 shadow-sm bg-light-warning text-warning">
|
<div class="card border-0 shadow-sm bg-light-warning text-warning">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title mb-1"><i class="bx bx-time-five me-1"></i> Belum Selesai</h5>
|
<h5 class="card-title mb-1"><i class="bx bx-time-five me-1"></i> Belum Selesai</h5>
|
||||||
<h2 class="fw-bold mb-1">8</h2>
|
<h2 class="fw-bold mb-1" id="pesanan_waiting">8</h2>
|
||||||
<small>Menunggu Konfirmasi / Pembayaran</small>
|
<small>Menunggu Konfirmasi / Pembayaran</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -64,8 +64,8 @@
|
|||||||
<div class="card border-0 shadow-sm bg-light-info text-info">
|
<div class="card border-0 shadow-sm bg-light-info text-info">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title mb-1"><i class="bx bx-money me-1"></i> Total Nilai Transaksi</h5>
|
<h5 class="card-title mb-1"><i class="bx bx-money me-1"></i> Total Nilai Transaksi</h5>
|
||||||
<h2 class="fw-bold mb-1">Rp 1.240.000</h2>
|
<h2 class="fw-bold mb-1" id="nilai_transaksi_total">Rp 1.240.000</h2>
|
||||||
<small>Akumulasi dari pesanan Lunas</small>
|
<small>Akumulasi dari pesanan</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -74,7 +74,7 @@
|
|||||||
<div class="card border-0 shadow-sm bg-light-secondary text-secondary">
|
<div class="card border-0 shadow-sm bg-light-secondary text-secondary">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title mb-1"><i class="bx bx-box me-1"></i> Pesanan Pending</h5>
|
<h5 class="card-title mb-1"><i class="bx bx-box me-1"></i> Pesanan Pending</h5>
|
||||||
<h2 class="fw-bold mb-1">5</h2>
|
<h2 class="fw-bold mb-1" id="pesanan_belum_diambil">5</h2>
|
||||||
<small>Lunas tapi belum diambil</small>
|
<small>Lunas tapi belum diambil</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -84,7 +84,7 @@
|
|||||||
<div class="card border-0 shadow-sm bg-light-success text-success">
|
<div class="card border-0 shadow-sm bg-light-success text-success">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title mb-1"><i class="bx bx-check-square me-1"></i> Pesanan Diambil</h5>
|
<h5 class="card-title mb-1"><i class="bx bx-check-square me-1"></i> Pesanan Diambil</h5>
|
||||||
<h2 class="fw-bold mb-1">10</h2>
|
<h2 class="fw-bold mb-1" id="pesanan_diambil">10</h2>
|
||||||
<small>Pemesan sudah ambil makanannya</small>
|
<small>Pemesan sudah ambil makanannya</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -55,6 +55,12 @@
|
|||||||
<!-- 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 -->
|
||||||
|
<li class="menu-item {{ Request::is('dashboard/pekerjaan') ? 'active' : '' }}">
|
||||||
|
<a href="/dashboard/pekerjaan" class="menu-link">
|
||||||
|
<i class="menu-icon tf-icons bx bx-collection"></i>
|
||||||
|
<div data-i18n="Basic">Pekerjaan</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li class="menu-item {{ Request::is('dashboard/pending') ? 'active' : '' }}">
|
<li class="menu-item {{ Request::is('dashboard/pending') ? 'active' : '' }}">
|
||||||
<a href="/dashboard/pending" class="menu-link">
|
<a href="/dashboard/pending" class="menu-link">
|
||||||
<i class="menu-icon tf-icons bx bx-collection"></i>
|
<i class="menu-icon tf-icons bx bx-collection"></i>
|
||||||
|
|||||||
24
resources/views/dashboard/pesanan/pekerjaan/index.blade.php
Normal file
24
resources/views/dashboard/pesanan/pekerjaan/index.blade.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
@extends('dashboard.layouts.main')
|
||||||
|
|
||||||
|
@section('body_main')
|
||||||
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
|
<!-- Breadcrumb -->
|
||||||
|
<h4 class="fw-bold py-3 mb-4">
|
||||||
|
<span class="text-muted fw-light">Dashboard /</span> Pekerjaan
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<!-- Card Master Menu -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header d-flex justify-content-between align-items-center">
|
||||||
|
<h5 class="mb-0">Pekerjaan</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<table class="table" id="datatablePekerjaan"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script src="{{ ver('/js/pekerjaan/_init.js') }}"></script>
|
||||||
|
<script src="{{ ver('/js/pekerjaan/dt.js') }}"></script>
|
||||||
|
@endsection
|
||||||
@ -10,26 +10,29 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row justify-content-center px-2">
|
||||||
<div class="row justify-content-center">
|
|
||||||
<div class="col-12 col-md-8">
|
<div class="col-12 col-md-8">
|
||||||
<div class="text-center mb-3">
|
<div class="text-center mb-3">
|
||||||
<h6 class="fw-bold">Detail Pembayaran</h6>
|
<h6 class="fw-bold">Detail Pembayaran</h6>
|
||||||
</div>
|
</div>
|
||||||
<ul class="list-group list-group-flush mb-3 shadow-sm rounded overflow-hidden">
|
<ul class="list-group list-group-flush mb-3 shadow-sm rounded overflow-hidden">
|
||||||
<!-- No Order -->
|
<!-- No Order -->
|
||||||
<li class="list-group-item">
|
|
||||||
|
<li class="list-group-item">
|
||||||
<div class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center gap-2">
|
<div class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center gap-2">
|
||||||
<span>No Order</span>
|
<span>No Order</span>
|
||||||
<div class="d-flex flex-column flex-sm-row align-items-start align-items-sm-center gap-2 text-end">
|
<div class="d-flex flex-column align-items-sm-end w-80">
|
||||||
|
<div class="d-flex justify-content-sm-end mb-1">
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="copyNoOrder()">
|
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="copyNoOrder()">
|
||||||
<i class="fa fa-copy me-1"></i> Salin
|
<i class="fa fa-copy me-1"></i> Salin
|
||||||
</button>
|
</button>
|
||||||
<strong id="no_order_display" class="text-break"></strong>
|
</div>
|
||||||
|
<strong id="no_order_display" class="d-block text-break text-wrap text-start text-sm-end small"></strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
|
||||||
<!-- Bank -->
|
<!-- Bank -->
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
<li class="list-group-item d-flex justify-content-between">
|
||||||
<span>Bank</span>
|
<span>Bank</span>
|
||||||
@ -38,33 +41,35 @@
|
|||||||
|
|
||||||
<!-- Nama Rekening -->
|
<!-- Nama Rekening -->
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
<li class="list-group-item d-flex justify-content-between">
|
||||||
<span>Nama Rekening</span>
|
<span>Nama Rek.</span>
|
||||||
<strong>RSAB Harapan Kita</strong>
|
<strong>RSAB Harapan Kita</strong>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- No Rek -->
|
<!-- No Rek -->
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<div class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center gap-2">
|
<div class="d-flex flex-column flex-sm-row justify-content-between align-items-start align-items-sm-center gap-2">
|
||||||
<span>No Rekening:</span>
|
<span>No.Rek</span>
|
||||||
<div class="d-flex flex-column flex-sm-row align-items-start align-items-sm-center gap-2 text-end">
|
<div class="d-flex flex-column align-items-sm-end w-80">
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="copyNoRek()">
|
<div class="d-flex justify-content-sm-end mb-1">
|
||||||
<i class="fa fa-copy me-1"></i> Salin
|
<button type="button" class="btn btn-sm btn-outline-secondary" onclick="copyNoOrder()">
|
||||||
|
<i class="fa fa-copy me-1"></i> Salin
|
||||||
</button>
|
</button>
|
||||||
<strong id="noRekText">1234-5678-9101</strong>
|
</div>
|
||||||
|
<strong id="noRekText">1234-5678-9101</strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Nominal -->
|
<!-- Nominal -->
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
<li class="list-group-item d-flex justify-content-between">
|
||||||
<span>Nominal yang harus dibayar</span>
|
<span>Nominal</span>
|
||||||
<strong id="no_order_price"></strong>
|
<strong id="no_order_price" class=""></strong>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Batas Waktu -->
|
<!-- Batas Waktu -->
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
<li class="list-group-item d-flex justify-content-between">
|
||||||
<span>Batas Waktu Pembayaran</span>
|
<span>Waktu Pembayaran</span>
|
||||||
<strong>12/07/2025 15:30</strong>
|
<strong id="countdownPayment"></strong>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="text-muted small text-center px-2">
|
<p class="text-muted small text-center px-2">
|
||||||
|
|||||||
@ -1,42 +1,46 @@
|
|||||||
<div class="modal fade"
|
<div class="modal fade" id="checkoutModal" tabindex="-1" aria-labelledby="checkoutModalLabel" aria-hidden="true">
|
||||||
id="checkoutModal"
|
|
||||||
tabindex="-1"
|
|
||||||
aria-labelledby="exampleModalLabel"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<div class="modal-dialog modal-lg modal-dialog-centered">
|
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h1 class="modal-title fs-5" id="exampleModalLabel">Website Cathering RSAB Harapan Kita</h1>
|
<h5 class="modal-title fw-bold" id="checkoutModalLabel">Pesanan Catering RSAB Harapan Kita</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form id="checkoutForm">
|
<form id="checkoutForm">
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="container">
|
<div class="row g-3">
|
||||||
<div class="row mt-3">
|
<div class="col-md-4 text-center">
|
||||||
<div class="col-md-4 text-center mb-3 mb-md-0">
|
<input type="hidden" id="apakah_someday">
|
||||||
<img alt="Foto Menu" id="cathering_order_photo" lass="img-fluid rounded shadow" style="max-height: 170px; width: auto;">
|
<input type="hidden" id="apakah_menu_siang">
|
||||||
</div>
|
<input type="hidden" id="apakah_menu_sore">
|
||||||
<div class="col-md-8">
|
<input type="hidden" id="tgl_tersedia">
|
||||||
<h5 id="cathering_order_name" class="mb-2"></h5>
|
<img id="cathering_order_photo" class="img-fluid rounded shadow" style="max-height: 170px;" alt="Foto Menu">
|
||||||
<div class="row text-muted small mb-2">
|
|
||||||
<div class="col-6 fw-semibold">Harga Karyawan:</div>
|
|
||||||
<div class="col-6 text-end fw-semibold"><span id="cathering_order_price_karyawan"></span> </div>
|
|
||||||
<div class="col-6 fw-semibold">Harga Keluarga Pasien:</div>
|
|
||||||
<div class="col-6 text-end fw-semibold"><span id="cathering_order_price_keluarga_pasien"></span> </div>
|
|
||||||
</div>
|
|
||||||
<span id="cathering_order_deskripsi" class="text-muted mb-2"></span>
|
|
||||||
|
|
||||||
<h5 class="d-none" id="cathering_order_menu_id"></h5>
|
|
||||||
<h5 class="d-none" id="cathering_order_jenis_menu"></h5>
|
|
||||||
<div id="tag_klasifikasi_menu" class="mt-2"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h5 id="cathering_order_name" class="mb-2 fw-bold"></h5>
|
||||||
|
<div id="tgl_menu_tersedia" class="mb-2"></div>
|
||||||
|
|
||||||
|
<div class="row text-muted small mb-2">
|
||||||
|
<div class="col-6">Harga Karyawan:</div>
|
||||||
|
<div class="col-6 text-end"><span class="fw-semibold" id="cathering_order_price_karyawan"></span></div>
|
||||||
|
<div class="col-6">Harga Keluarga Pasien:</div>
|
||||||
|
<div class="col-6 text-end"><span class="fw-semibold" id="cathering_order_price_keluarga_pasien"></span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p id="cathering_order_deskripsi" class="text-muted small mb-2"></p>
|
||||||
|
<div id="tag_klasifikasi_menu" class="mb-2"></div>
|
||||||
|
|
||||||
|
<input type="hidden" id="cathering_order_menu_id">
|
||||||
|
<input type="hidden" id="cathering_order_jenis_menu">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button>
|
||||||
<button type="submit" class="btn btn-success"><i class="fas fa-shopping-cart me-1"></i> Order</button>
|
<button type="submit" class="btn btn-success">
|
||||||
|
<i class="fas fa-shopping-cart me-1"></i> Pesan Sekarang
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -44,6 +44,9 @@ Route::group(['middleware' => ['auth']], function(){
|
|||||||
|
|
||||||
Route::get('/selesai', [PesananController::class, 'indexSelesai']);
|
Route::get('/selesai', [PesananController::class, 'indexSelesai']);
|
||||||
Route::get('datatable/selesai', [PesananController::class, 'getDataSelesai']);
|
Route::get('datatable/selesai', [PesananController::class, 'getDataSelesai']);
|
||||||
|
|
||||||
|
Route::get('/pekerjaan', [PesananController::class, 'pekerjaan']);
|
||||||
|
Route::get('datatable/pekerjaan', [PesananController::class, 'getPekerjaan']);
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::post('/logout', [AuthController::class, 'logout']);
|
Route::post('/logout', [AuthController::class, 'logout']);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user