done order customer

This commit is contained in:
JokoPrasetio 2025-07-23 15:32:00 +07:00
parent 28639db59a
commit 51f0334568
33 changed files with 715 additions and 84 deletions

View File

@ -3,8 +3,34 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
//
public function index(){
$data = [
'title' => 'Login Admin | Order Gizi'
];
return view('auth.index', $data);
}
public function authanticate(){
$credentials = request()->validate([
'username' => 'required',
'password' => 'required'
]);
if(Auth::attempt($credentials)){
request()->session()->regenerate();
return redirect()->intended('/dashboard');
}
return back()->with(['alertError' => 'Terdapat kesalahan disini!']);
}
public function logout()
{
Auth::logout();
request()->session()->invalidate();
request()->session()->regenerateToken();
return redirect('/login');
}
}

View File

@ -185,16 +185,16 @@ class CustomerController extends Controller
$today = now()->toDateString();
$jumlahHariIni = Order::whereDate('entry_at', $today)->count();
$urutan = $jumlahHariIni + 1;
$noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT);
$noOrder = 'TX/CT/GIZI/' . now()->year .'/'. now()->month .'/' . now()->day .'/' . str_pad($urutan, 4, '0', STR_PAD_LEFT);
$payloadOrder = [
'no_order' => $noOrder,
'jenis_customer' => $jenisCustomer,
'nama_pemesan' => $biodataResult['nama_pemesan'],
'jenis_kelamin' => $biodataResult['jenis_kelamin'],
'tanggal_lahir' => $biodataResult['tanggal_lahir'],
// 'tanggal_lahir' => $biodataResult['tanggal_lahir'],
'no_wa' => $biodataResult['no_whatsapp'],
'tinggi_badan' => $biodataResult['tinggi_badan'],
'berat_badan' => $biodataResult['berat_badan'],
// 'tinggi_badan' => $biodataResult['tinggi_badan'],
// 'berat_badan' => $biodataResult['berat_badan'],
'nama_pasien' => $biodataResult['nama_pasien'],
'ruang_perawatan' => $biodataResult['ruang_perawatan'],
'no_kamar_perawatan' => $biodataResult['no_kamar'],
@ -209,19 +209,19 @@ class CustomerController extends Controller
$payloadOrderDetail = [
'order_id' => $order->order_id,
'harga_satuan' => $jenisCustomer === "Karyawan RSAB Harapan Kita" ? $cart['harga_karyawan'] : $cart['harga_kp'],
'status_order' => "Pending"
];
foreach ($cart['pesanan'] as $value) {
$payloadOrderDetail['jumlah'] = $value['jumlah'];
$payloadOrderDetail['tgl_antar'] = $value['tgl'];
$payloadOrderDetail['type'] = $value['kategoriPemesanan'];
if($cart['jenis_menu'] === "paket"){
$payloadOrderDetail['master_paket_menu_id'] = $cart['id_menu'];
}else{
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
}
OrderDetail::create($payloadOrderDetail);
}
if($cart['jenis_menu'] === "paket"){
$payloadOrderDetail['master_paket_menu_id'] = $cart['id_menu'];
}else{
$payloadOrderDetail['master_menu_id'] = $cart['id_menu'];
}
OrderDetail::create($payloadOrderDetail);
}
//code...
DB::commit();
@ -283,4 +283,80 @@ class CustomerController extends Controller
];
return view('guest.success_page', $payload);
}
public function checkOrder(){
$payload = [
'title' => 'Check Order'
];
return view('guest.check_order.index', $payload);
}
public function searchOrder(){
$noOrder = request('no_order');
$order = DB::connection('dbOrderGizi')
->table('public.order as o')
->leftJoin('public.order_detail as od', 'od.order_id', '=', 'o.order_id')
->leftJoin('public.master_menu as mm', 'mm.master_menu_id', '=', 'od.master_menu_id')
->leftJoin('public.master_paket_menu as mpm', 'mpm.master_paket_menu_id', '=', 'od.master_paket_menu_id')
->where('o.no_order', 'ILIKE', '%' . $noOrder . '%')
->select(
'o.*',
'od.order_detail_id',
'od.jumlah',
'od.tgl_antar',
'od.harga_satuan',
DB::raw("COALESCE(mm.nama_menu, mpm.nama_paket) as nama_item"),
DB::raw("COALESCE(mm.foto, mpm.foto) as foto"),
)
->get();
if ($order->isEmpty()) {
return response()->json([
'status' => false,
'message' => 'Pesanan tidak ditemukan'
], 404);
}
$data = $order->first();
$result = [
'order_id' => $data->order_id,
'nama_pemesan' => $data->nama_pemesan,
'jenis_kelamin' => $data->jenis_kelamin,
'tgl_pesanan' => $data->entry_at,
'tgl_pembayaran' => $data->tgl_pembayaran,
'bukti_bayar' => $data->bukti_pembayaran,
'cara_pembayaran' => $data->cara_pembayaran,
'status_order' => $data->status_order,
'total_harga' => $data->total_harga,
'no_order' => $data->no_order,
'jenis_customer' => $data->jenis_customer,
'no_wa' => $data->no_wa,
// pasien
'nama_pasien' => $data->nama_pasien,
'kelas_perawatan' => $data->kelas_perawatan,
'no_kamar_perawatan' => $data->no_kamar_perawatan,
'ruang_perawatan' => $data->ruang_perawatan,
// karyawan
'no_ekstensien' => $data->no_ekstensien,
'bagian_instalasi' => $data->bagian_instalasi,
'items' => $order->map(function ($item) {
return [
'order_detail_id' => $item->order_detail_id,
'nama_item' => $item->nama_item,
'tgl_antar' => $item->tgl_antar,
'foto' => $item->foto,
'jumlah' => $item->jumlah,
'harga_satuan' => $item->harga_satuan,
// tambahkan field tambahan jika diperlukan
];
})->values(),
];
return response()->json([
'status' => true,
'data' => $result,
], 200);
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function index(){
$data = [
'title' => 'Dashboard'
];
return view('dashboard.index', $data);
}
}

View File

@ -15,7 +15,7 @@ class MenuController extends Controller
$payload = [
'title' => 'Master Menu || Order Gizi',
];
return view('master.menu.index', $payload);
return view('dashboard.master.menu.index', $payload);
}
/**

View File

@ -0,0 +1,67 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PesananController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$payload = [
'title' => 'Pesanan Pending'
];
return view('dashboard.pesanan.pending.index', $payload);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}

View File

@ -20,6 +20,7 @@ class OrderDetail extends Model
'jumlah',
'tgl_antar',
'type',
'order_id'
'order_id',
'status_order'
];
}

View File

@ -12,6 +12,11 @@ class User extends Authenticatable
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable;
protected $connection = 'dbAuth';
protected $table = 'public.users';
public $timestamps = false;
protected $primaryKey = "id";
/**
* The attributes that are mass assignable.
*
@ -19,6 +24,7 @@ class User extends Authenticatable
*/
protected $fillable = [
'name',
'username',
'email',
'password',
];

View File

@ -0,0 +1,3 @@
function checkOrderHref(){
window.location.href = '/check-order'
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@ -18,6 +18,8 @@ document.addEventListener('DOMContentLoaded', () => {
return;
}
// Setup button step
document.querySelectorAll('.next-step').forEach(btn => {
btn.addEventListener('click', async () => {
@ -58,7 +60,6 @@ document.addEventListener('DOMContentLoaded', () => {
document.getElementById('no_order_display').textContent = order_id
});
// =======================
// FUNGSI STEP
// =======================
@ -105,11 +106,13 @@ if (typeof checkout_biodata === 'object') {
if (checkout_biodata.jenis_customer) {
$(`input[name="jenis_customer"][value="${checkout_biodata.jenis_customer}"]`).prop('checked', true);
}
if(checkout_biodata.jenis_kelamin){
$(`input[name="jenis_kelamin"][value="${checkout_biodata.jenis_kelamin}"]`).prop('checked', true);
}
$('#nama_pemesan').val(checkout_biodata.nama_pemesan);
$('#jenis_kelamin').val(checkout_biodata.jenis_kelamin);
$('#tanggal_lahir').val(checkout_biodata.tanggal_lahir);
$('#tinggi_badan').val(checkout_biodata.tinggi_badan);
$('#berat_badan').val(checkout_biodata.berat_badan);
// $('#tanggal_lahir').val(checkout_biodata.tanggal_lahir);
// $('#tinggi_badan').val(checkout_biodata.tinggi_badan);
// $('#berat_badan').val(checkout_biodata.berat_badan);
$('#no_whatsapp').val(checkout_biodata.no_whatsapp);
$('#nama_pasien').val(checkout_biodata.nama_pasien);
$('#ruang_perawatan').val(checkout_biodata.ruang_perawatan);
@ -123,10 +126,10 @@ function isiKonfirmasi() {
const biodata = {
jenis_customer: $('input[name="jenis_customer"]:checked').val(),
nama_pemesan: $('#nama_pemesan').val(),
jenis_kelamin: $('#jenis_kelamin').val(),
tanggal_lahir: $('#tanggal_lahir').val(),
tinggi_badan: $('#tinggi_badan').val(),
berat_badan: $('#berat_badan').val(),
jenis_kelamin: $('input[name="jenis_kelamin"]:checked').val(),
// tanggal_lahir: $('#tanggal_lahir').val(),
// tinggi_badan: $('#tinggi_badan').val(),
// berat_badan: $('#berat_badan').val(),
no_whatsapp: $('#no_whatsapp').val(),
nama_pasien: $('#nama_pasien').val(),
ruang_perawatan: $('#ruang_perawatan').val(),
@ -194,13 +197,17 @@ function renderCartSummary() {
const itemTotal = pesananList.reduce((sum, p) => sum + (p.jumlah * harga), 0);
totalKeseluruhan += itemTotal
const itemHTML = `
<div class="card mb-3 shadow-sm">
<div class="card mb-3 shadow-sm position-relative">
<div class="row g-0">
<div class="col-md-4 d-flex align-items-center justify-content-center p-2">
<img src="gambar/${item.foto || 'default.jpg'}" alt="${item.nama_menu}" class="img-fluid rounded"
style="max-height: 180px; object-fit: cover;">
style="max-height: 180px; width:auto; object-fit: cover;">
</div>
<div class="col-md-8">
<button type="button" class="btn btn-sm btn-outline-danger position-absolute top-0 end-0 m-2"
onclick="removeCartItem(${item.id})">
Hapus
</button>
<div class="card-body">
<h5 class="card-title">${item.nama_menu}</h5>
<div class="text-muted small">Rp ${parseInt(harga).toLocaleString('id-ID')}</div>
@ -211,10 +218,7 @@ function renderCartSummary() {
onclick="addOrderDate(${item.id})">+ Tambah Tanggal</button>
<div><strong>Total:</strong> <span class="text-success">Rp
${itemTotal.toLocaleString('id-ID')}</span></div>
<button type="button" class="btn btn-sm btn-outline-danger"
onclick="removeCartItem(${item.id})">
<i class="fa-solid fa-trash"></i> Hapus
</button>
</div>
</div>
</div>
@ -298,8 +302,8 @@ function removeCartItem(itemId){
// validasi step one dan sebelum submit
function validateStepOne() {
const jenisCustomer = document.querySelector('input[name="jenis_customer"]:checked');
const jenisKelamin = document.querySelector('input[name="jenis_kelamin"]:checked');
const namaPemesan = document.getElementById('nama_pemesan').value.trim();
const jenisKelamin = document.getElementById('jenis_kelamin').value;
const noWA = document.getElementById('no_whatsapp').value.trim();
if (!jenisCustomer) {

View File

@ -163,7 +163,6 @@
if (count > 0) {
$cartCount.text(count).show();
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
console.log(cart);
let menuNames = cart.map(item => item.nama_menu).join(', ');
const maxLength = 50;
@ -181,6 +180,11 @@
}
}
function parseRupiahToNumber(rpText) {
return parseInt(rpText.replace(/[^\d]/g, ''), 10) || 0;
}
$("#checkoutForm").on('submit', function(e){
e.preventDefault();
@ -193,18 +197,13 @@
jumlah: 1,
kategoriPemesanan: ''
}];
// Dikomen dulu
// $("#order_input_wrapper .row").each(function(){
// const tgl = $(this).find('input[type="date"]').val();
// const jumlah = $(this).find('input[type="number"]').val();
// const kategoriPemesanan = $(this).find('select').val();
// if(tgl && kategoriPemesanan && jumlah > 0){
// orders.push({ tgl, kategoriPemesanan, jumlah})
// }
// })
let idMenu = $("#cathering_order_menu_id").text().trim();
let namaMenu = $("#cathering_order_name").text().trim();
let idText = $("#cathering_order_menu_id").text().trim();
let idMenu = parseInt(idText.replace(/[^\d]/g, ''), 10);
let namaMenu = $("#cathering_order_name").text();
let existingItem = cart.find(item => item.id_menu === idMenu && item.nama_menu === namaMenu);
if(existingItem){
orders.forEach(newOrder => {
const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl)
@ -219,8 +218,8 @@
id:Date.now(),
id_menu : $("#cathering_order_menu_id").text(),
nama_menu : $("#cathering_order_name").text(),
harga_karyawan : $("#cathering_order_price_karyawan").text(),
harga_kp : $("#cathering_order_price_keluarga_pasien").text(),
harga_karyawan : parseRupiahToNumber($("#cathering_order_price_karyawan").text()),
harga_kp : parseRupiahToNumber($("#cathering_order_price_keluarga_pasien").text()),
foto: $('#cathering_order_photo').attr('src'),
jenis_menu: $('#cathering_order_jenis_menu').text(),
deskripsi:$("#cathering_order_deskripsi").text(),

View File

@ -0,0 +1 @@
const datatablePending = $("#datatablePesananPending")

View File

@ -0,0 +1,40 @@
datatablePending.bootstrapTable({
url: "/",
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",
},
{
title: "Nama Menu",
},
{
title: "Jenis Menu",
},
{
title: "Harga",
},
{
title: "Deskripsi",
},
],
});

View File

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html
lang="en"
class="light-style customizer-hide"
dir="ltr"
data-theme="theme-default"
data-assets-path="../assets/"
data-template="vertical-menu-template-free"
>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
/>
<title>{{ $title }}</title>
<meta name="description" content="" />
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"
/>
<!-- Icons. Uncomment required icon fonts -->
<link rel="stylesheet" href="{{ ver('/assets/vendor/fonts/boxicons.css') }}" />
<!-- Core CSS -->
<link rel="stylesheet" href="{{ ver('/assets/vendor/css/core.css') }}" class="template-customizer-core-css" />
<link rel="stylesheet" href="{{ ver('/assets/vendor/css/theme-default.css') }}" class="template-customizer-theme-css" />
<link rel="stylesheet" href="{{ ver('/assets/css/demo.css') }}" />
<!-- Vendors CSS -->
<link rel="stylesheet" href="{{ ver('/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css') }}" />
<!-- Page CSS -->
<!-- Page -->
<link rel="stylesheet" href="{{ ver('/assets/vendor/css/pages/page-auth.css') }}" />
<!-- Helpers -->
<script src="{{ ver('/assets/vendor/js/helpers.js') }}"></script>
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
<script src="{{ ver('/assets/js/config.js') }}"></script>
</head>
<body>
<!-- Content -->
<div class="container-xxl">
<div class="authentication-wrapper authentication-basic container-p-y">
<div class="authentication-inner">
<!-- Register -->
<div class="card">
<div class="card-body">
<p class="mb-4">Please sign-in to your account</p>
@if (session()->has('alertError'))
<div class="alert alert-danger" role="alert">
Username atau password salah!
</div>
@endif
<form action="/login" class="mb-3" method="POST">
@csrf
<div class="mb-3">
<label for="email" class="form-label">Username</label>
<input
type="text"
class="form-control"
id="username"
name="username"
placeholder="Enter your username"
autofocus
/>
</div>
<div class="mb-3 form-password-toggle">
<div class="d-flex justify-content-between">
<label class="form-label" for="password">Password</label>
</div>
<div class="input-group input-group-merge">
<input
type="password"
id="password"
class="form-control"
name="password"
placeholder="&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;"
aria-describedby="password"
/>
<span class="input-group-text cursor-pointer"><i class="bx bx-hide"></i></span>
</div>
</div>
<div class="mb-3">
<button class="btn btn-primary d-grid w-100" type="submit">Login</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Core JS -->
<!-- build:js assets/vendor/js/core.js -->
<script src="{{ ver('/assets/vendor/libs/jquery/jquery.js') }}"></script>
<script src="{{ ver('/assets/vendor/libs/popper/popper.js') }}"></script>
<script src="{{ ver('/assets/vendor/js/bootstrap.js') }}"></script>
<script src="{{ ver('/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js') }}"></script>
<script src="{{ ver('/assets/vendor/js/menu.js') }}"></script>
<!-- endbuild -->
<!-- Vendors JS -->
<!-- Main JS -->
<script src="{{ ver('/assets/js/main.js') }}"></script>
<!-- Page JS -->
<!-- Place this tag in your head or just before your close body tag. -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
</body>
</html>

View File

@ -1,4 +1,4 @@
@extends('layouts.main')
@extends('dashboard.layouts.main')
@section('body_main')
<div class="container-xxl flex-grow-1 container-p-y">

View File

@ -67,13 +67,13 @@
<div class="layout-wrapper layout-content-navbar">
<div class="layout-container">
<!-- Menu -->
@include('partials.sidenav')
@include('dashboard.partials.sidenav')
<!-- / Menu -->
<!-- Layout container -->
<div class="layout-page">
<!-- Navbar -->
@include('partials.topnav')
@include('dashboard.partials.topnav')
<!-- / Navbar -->
<!-- Content wrapper -->
@ -82,7 +82,7 @@
@yield('body_main')
<!-- / Content -->
<!-- Footer -->
@include('partials.footer')
@include('dashboard.partials.footer')
<!-- / Footer -->
<div class="content-backdrop fade"></div>
</div>
@ -114,7 +114,7 @@
<!-- Page JS -->
<script src="{{ ver('/assets/js/dashboards-analytics.js') }}"></script>
<!-- Place this tag in your head or just before your close body tag. -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
</body>

View File

@ -1,4 +1,4 @@
@extends('layouts.main')
@extends('dashboard.layouts.main')
@section('body_main')
<div class="container-xxl flex-grow-1 container-p-y">
@ -21,7 +21,7 @@
</div>
</div>
</div>
@include('master.menu.modal.add')
@include('dashboard.master.menu.modal.add')
<!-- JS scripts -->
<script src="{{ ver('/js/menu/_init.js') }}"></script>
<script src="{{ ver('/js/menu/dt.js') }}"></script>

View File

@ -50,16 +50,16 @@
<li class="menu-header small text-uppercase"><span class="menu-header-text">Order</span></li>
<!-- Cards -->
<li class="menu-item">
<a href="/pending" class="menu-link">
<a href="/dashboard/pending" class="menu-link">
<i class="menu-icon tf-icons bx bx-collection"></i>
<div data-i18n="Basic">Pending Pesanan</div>
<div data-i18n="Basic">Pesanan Pending</div>
</a>
</li>
<!-- User interface -->
<li class="menu-item">
<a href="/selesai" class="menu-link">
<i class="menu-icon tf-icons bx bx-box"></i>
<div data-i18n="User interface">Pesanana Selesai</div>
<div data-i18n="User interface">Pesanan Selesai</div>
</a>
</li>
</ul>

View File

@ -53,10 +53,13 @@
<div class="dropdown-divider"></div>
</li>
<li>
<a class="dropdown-item" href="auth-login-basic.html">
<i class="bx bx-power-off me-2"></i>
<span class="align-middle">Log Out</span>
</a>
<form action="/logout" method="post">
<button type="submit" class="dropdown-item">
<i class="bx bx-power-off me-2"></i>
@csrf
<span class="align-middle">Log Out</span>
</button>
</form>
</li>
</ul>
</li>
@ -64,3 +67,4 @@
</ul>
</div>
</nav>

View File

@ -0,0 +1,23 @@
@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> Pesanan Pending
</h4>
<!-- Card Master Menu -->
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">Pesanan Pending</h5>
</div>
<div class="card-body">
<table class="table" id="datatablePesananPending"></table>
</div>
</div>
</div>
<script src="{{ ver('/js/pesanan_pending/_init.js') }}"></script>
<script src="{{ ver('/js/pesanan_pending/dt.js') }}"></script>
@endsection

View File

@ -0,0 +1,223 @@
@extends('guest.layout.main')
@section('body_main_guests')
<section class="section py-5 bg-light">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="card shadow-sm border-0">
<div class="d-flex justify-content-end align-items-center p-3">
<a href="/" class="btn btn-outline-success">
<i class="fa fa-arrow-left me-1"></i> Kembali ke Menu
</a>
</div>
<div class="card-body text-center py-5">
<h3 class="mb-4 fw-bold text-success">Cek Status Pesanan Anda</h3>
<p class="text-muted mb-4">Masukkan <strong>No Order</strong> yang Anda terima setelah pemesanan untuk melihat status.</p>
<form action="" class="d-flex justify-content-center" id="form_search_order">
<div class="input-group w-100 w-md-75">
<input type="text" name="no_order" class="form-control form-control-lg shadow-sm" placeholder="Contoh: TX/CT/GIZI/2025/07/1/0001" required>
<button class="btn btn-success btn-lg" type="submit">
<i class="fa fa-search me-1"></i>
</button>
</div>
</form>
<div id="result_check_order">
{{-- Isi javascript --}}
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<script>
$(document).ready(function() {
$("#cartButton").addClass('d-none')
const container = $("#result_check_order")
const formSearch = $("#form_search_order")
formSearch.on("submit", function(e) {
e.preventDefault()
const formData = new FormData(this);
const noOrder = formData.get("no_order");
if (!noOrder) {
alert("No Order tidak boleh kosong.");
return;
}
container.html(`<div class="text-center py-3"><div class="spinner-border text-success" role="status"></div><p class="mt-2">Sedang memuat...</p></div>`);
fetch(`/check-order/search?no_order=${encodeURIComponent(noOrder)}`)
.then(res => {
if (!res.ok) throw new Error("Gagal mengambil data.");
return res.json();
})
.then(order => {
let html = '';
let itemHTML ='';
if(!order.status){
return container.html(`<h4 class="fw-bold text-black">Pesanan Tidal Ditemukan</h4>`);
}
const data = order.data;
(data.items || []).forEach(item => {
const harga = parseInt(item.harga_satuan);
const jumlah = parseInt(item.jumlah);
const total = harga * jumlah;
itemHTML += `
<div class="card mb-2 shadow-sm">
<div class="row g-0">
<div class="col-md-4 p-2">
<img src="/gambar/${item.foto || 'default.jpg'}" class="img-fluid rounded-start" alt="${item.nama_item}" style="max-height: 150px; width:100%; object-fit: cover;">
</div>
<div class="col-md-8">
<div class="card-body py-2 px-3 mt-2">
<h6 class="card-title mb-1">${item.nama_item}</h6>
<p class="mb-1 small text-muted">Tgl Antar: <strong>${item.tgl_antar}</strong></p>
<p class="mb-1 small">Harga: <strong>${harga.toLocaleString('id-ID')}</strong></p>
<p class="mb-1 small">Jumlah: <strong>${jumlah}</strong></p>
<p class="mb-0 small">Total: <strong class="text-success">Rp ${total.toLocaleString('id-ID')}</strong></p>
</div>
</div>
</div>
</div>`;
});
html += `
<div class="card mt-5 shadow-sm border-0 rounded-4">
<div class="card-body p-2">
<div class="text-center mb-4">
<h4 class="fw-bold text-success">Pesanan Anda Ditemukan</h4>
<p class="text-muted small">Berikut adalah detail pesanan dengan No Order: <strong>${data?.no_order}</p>
</div>
<div class="row g-3 mb-3">
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Nama Pemesan</div>
<div class="text-dark">${data.nama_pemesan}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Tanggal Pesan</div>
<div class="text-dark">${new Date(data.tgl_pesanan).toLocaleDateString('id-ID')}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Jenis Customer</div>
<div class="text-dark">${data?.jenis_customer}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Status</div>
<span class="badge
${!data?.bukti_bayar
? 'bg-warning text-dark'
: data?.status_order !== 'Selesai'
? 'bg-primary'
: 'bg-success'}">
${!data?.bukti_bayar
? 'Belum Bayar'
: data?.status_order || '-'}
</span>
</div>
</div>
${data?.jenis_customer === "Karyawan RSAB Harapan Kita" ?
` <div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Bagian /Instalasi</div>
<div class="text-dark">${data?.bagian_instalasi || '-'}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Ekstensien yang bisa di Hubungi</div>
<div class="text-dark">${data?.no_ekstensien || '-'}</div>
</div>
</div>
` : data?.jenis_customer === "Keluarga Pasien / Penunggu Pasien" ?
`
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Nama Pasien</div>
<div class="text-dark">${data?.nama_pasien || '-'}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Ruang Perawatan</div>
<div class="text-dark">${data?.ruang_perawatan || '-'}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Nomor Kamar Perawatan</div>
<div class="text-dark">${data?.no_kamar_perawatan || '-'}</div>
</div>
</div>
<div class="col-md-6">
<div class="bg-light p-3 rounded shadow-sm small">
<div class="fw-semibold text-secondary mb-1">Kelas Perawatan</div>
<div class="text-dark">${data?.kelas_perawatan || '-'}</div>
</div>
</div>
` : ``
}
</div>
<div class="bg-white rounded-4 border p-3 shadow-sm mb-4">
<h6 class="fw-semibold mb-3">Item Pesanan</h6>
${itemHTML}
<div class="text-end mt-3">
<h6>Total Seluruh Pesanan: <strong class="text-success">Rp ${parseInt(data?.total_harga).toLocaleString('id-ID')}</strong></h6>
</div>
</div>
${data?.bukti_bayar ? `
<div class="text-center mb-4">
<h6 class="fw-semibold mb-2">Bukti Pembayaran</h6>
<img src="/storage/${data?.bukti_bayar}" alt="Bukti Pembayaran" class="img-fluid rounded shadow-sm" style="max-width: 300px;">
</div>
` :
`<div class="text-center mb-4">
<button class="btn btn-warning fw-bold text-dark">Belum Melakukan Pembayaran</button>
</div>`}
<div class="text-center">
<a href="/" class="btn btn-outline-success btn-sm px-4 rounded-pill">
<i class="fa fa-arrow-left me-1"></i> Kembali ke Beranda
</a>
</div>
</div>
</div>
`
container.html(html);
})
.catch(err => {
console.error(err);
container.html(`<h4 class="fw-bold text-black mt-3">Pesanan Tidal Ditemukan</h4>`);
});
})
})
</script>
@endsection

View File

@ -1,7 +1,7 @@
<div class="form-step active">
<div class="row g-3 mb-4">
<input type="hidden" name="cart_data" id="cart_data">
<div class="col-md-12">
<div class="col-md-6">
<label for="exampleInputEmail1" class="form-label">Apakah Anda Seorang ?</label>
<div class="form-check">
<input class="form-check-input" type="radio" name="jenis_customer" id="radio_karyawan" value="Karyawan RSAB Harapan Kita" required>
@ -22,30 +22,37 @@
</label>
</div>
</div>
<div class="col-md-6">
<label for="exampleInputEmail1" class="form-label">Jenis Kelamin</label>
<div class="form-check">
<input class="form-check-input" type="radio" name="jenis_kelamin" value="Laki-laki" required>
<label class="form-check-label">
Laki-laki
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="jenis_kelamin" id="radio_kp" value="Perempuan" required>
<label class="form-check-label">
Perempuan
</label>
</div>
</div>
<div class="col-md-6">
<label class="form-label">Nama Pemesan</label>
<input type="text" class="form-control" name="nama_pemesan" id="nama_pemesan" required>
</div>
<div class="col-md-6">
<label class="form-label">Jenis Kelamin</label>
<select class="form-select" name="jenis_kelamin" id="jenis_kelamin" required>
<option value="">Pilih...</option>
<option value="Laki-laki">Laki-laki</option>
<option value="Perempuan">Perempuan</option>
</select>
</div>
<div class="col-md-6">
{{-- <div class="col-md-6">
<label class="form-label">Tanggal Lahir</label>
<input type="date" class="form-control" name="tanggal_lahir" id="tanggal_lahir">
</div>
<div class="col-md-6">
</div> --}}
{{-- <div class="col-md-6">
<label class="form-label">Tinggi Badan</label>
<input type="number" class="form-control" name="tinggi_badan" id="tinggi_badan">
</div>
<div class="col-md-6">
<label class="form-label">Berat Badan</label>
<input type="number" class="form-control" name="berat_badan" id="berat_badan">
</div>
</div> --}}
<div class="col-md-6">
<label class="form-label">No. Whatsapp</label>
<input type="number" class="form-control" name="no_whatsapp" id="no_whatsapp" required>

View File

@ -42,9 +42,7 @@
</div>
</section>
@include('guest.register')
@include('guest.checkout_order')
@include('guest.keranjang')
<script src="{{ ver('/js/order_guest/register.js') }}"></script>
<script src="{{ ver('/js/order_guest/functions.js') }}"></script>

View File

@ -9,10 +9,6 @@
<meta name="description" content="">
<meta name="keywords" content="">
<!-- Favicons -->
<link href="{{ ver('/asset_guests/img/favicon.png') }}" rel="icon">
<link href="{{ ver('/asset_guests/img/apple-touch-icon.png') }}" rel="apple-touch-icon">
<!-- Fonts -->
<link href="https://fonts.googleapis.com" rel="preconnect">
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
@ -29,9 +25,13 @@
<!-- Main CSS File -->
<link href="{{ ver('/asset_guests/css/main.css') }}" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
{{-- Jquery --}}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
</head>
<body class="index-page">
@ -48,6 +48,7 @@
<div id="preloader"></div>
<!-- Vendor JS Files -->
<script src="{{ ver('/asset_guests/vendor/js/checkOrderHref.js') }}"></script>
<script src="{{ ver('/asset_guests/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ ver('/asset_guests/vendor/php-email-form/validate.js') }}"></script>
<script src="{{ ver('/asset_guests/vendor/aos/aos.js') }}"></script>

View File

@ -14,7 +14,7 @@
{{-- <i class="mobile-nav-toggle d-xl-none bi bi-list"></i> --}}
<div class="d-flex align-items-center gap-2">
<!-- Tombol No Order -->
<button href="/check-order" class="btn btn-outline-success position-relative me-2">
<button type="button" class="btn btn-outline-success position-relative me-2" onclick="checkOrderHref()">
Check Order
</button>

View File

@ -1,22 +1,31 @@
<?php
use App\Http\Controllers\AuthController;
use App\Http\Controllers\CustomerController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\KlasifikasiMenuController;
use App\Http\Controllers\MenuController;
use App\Http\Controllers\PesananController;
use Illuminate\Support\Facades\Route;
Route::get('/dashboard', function () {
return view('index');
});
// Route::get('/blank', function () {
// return view('layouts.blank');
// });
Route::get('/login', [AuthController::class, 'index'])->name('login');
Route::post('/login', [AuthController::class, 'authanticate']);
Route::resource('/dashboard/menu', MenuController::class);
Route::get('datatable/menu', [MenuController::class, 'datatable']);
Route::resource('/dashboard/klasifikasi-menu', KlasifikasiMenuController::class);
Route::group(['middleware' => ['auth']], function(){
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::group(['prefix' => 'dashboard'], function(){
Route::get('/', [DashboardController::class, 'index']);
Route::resource('/klasifikasi-menu', KlasifikasiMenuController::class);
Route::get('/pending', [PesananController::class, 'index']);
});
Route::post('/logout', [AuthController::class, 'logout']);
});
Route::get('/', [CustomerController::class, 'index']);
Route::get('/checkout', [CustomerController::class, 'checkout']);
@ -24,3 +33,6 @@ Route::get('/datamenu', [CustomerController::class, 'dataOrder']);
Route::post('/submit-checkout', [CustomerController::class, 'submitCheckout']);
Route::post('/finish-checkout', [CustomerController::class, 'finishCheckout']);
Route::get('/success-page', [CustomerController::class, 'success']);
Route::get('/check-order', [CustomerController::class, 'checkOrder']);
Route::get('/check-order/search', [CustomerController::class, 'searchOrder']);