development #7
@ -6,15 +6,18 @@ use App\Mail\NotifikasiCustomer;
|
||||
use App\Mail\NotifikasiPembayaran;
|
||||
use App\Models\JadwalKonsul;
|
||||
use App\Models\Karbohidrat;
|
||||
use App\Models\Karyawan;
|
||||
use App\Models\MasterMcu;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderDetail;
|
||||
use App\Models\UnitInstalasi;
|
||||
use Carbon\Carbon;
|
||||
use Carbon\CarbonPeriod;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class CustomerController extends Controller
|
||||
{
|
||||
@ -288,6 +291,10 @@ class CustomerController extends Controller
|
||||
'alamat' => $biodataResult['alamat'],
|
||||
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
||||
];
|
||||
if($jenisCustomer === "Karyawan RSAB Harapan Kita"){
|
||||
$nip_pns = Karyawan::where('namalengkap',$biodataResult['nama_pemesan'])->first()->nip_pns;
|
||||
$payloadOrder['nip'] = $nip_pns ?? null;
|
||||
}
|
||||
$order = Order::create($payloadOrder);
|
||||
foreach ($dataCart as $cart) {
|
||||
$payloadOrderDetail = [
|
||||
@ -555,4 +562,52 @@ class CustomerController extends Controller
|
||||
];
|
||||
return view('guest.success_page', $payload);
|
||||
}
|
||||
|
||||
public function karyawan(Request $request)
|
||||
{
|
||||
$search = trim($request->input('search'));
|
||||
|
||||
// 1. Validasi dulu
|
||||
$validator = Validator::make(
|
||||
['search' => $search],
|
||||
['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/']
|
||||
);
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['error' => 0, 'data' => []]);
|
||||
}
|
||||
|
||||
// 2. Baru query kalau ada keyword
|
||||
$data =Karyawan::where('statusenabled', true)
|
||||
->where('namalengkap', 'ILIKE', "%{$search}%")
|
||||
->limit(5)
|
||||
->pluck('namalengkap') // langsung ambil string
|
||||
->map(fn($nama) => ['label' => $nama]);
|
||||
|
||||
return response()->json(['error' => 0, 'data' => $data]);
|
||||
}
|
||||
|
||||
public function unitInstalasi(Request $request)
|
||||
{
|
||||
$search = trim($request->input('search'));
|
||||
|
||||
// 1. Validasi dulu
|
||||
$validator = Validator::make(
|
||||
['search' => $search],
|
||||
['search' => 'required|string|min:2|max:50|regex:/^[a-zA-Z.\s]+$/']
|
||||
);
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['error' => 0, 'data' => []]);
|
||||
}
|
||||
|
||||
// 2. Baru query kalau ada keyword
|
||||
$data = UnitInstalasi::where('statusenabled', true)
|
||||
->select('name')
|
||||
->where('name', 'ILIKE', "%{$search}%")
|
||||
->limit(5)
|
||||
->get()
|
||||
->map(fn($row) => ['label' => $row->name]);
|
||||
|
||||
return response()->json(['error' => 0, 'data' => $data]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
app/Models/Karyawan.php
Normal file
16
app/Models/Karyawan.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Karyawan extends Model
|
||||
{
|
||||
protected $connection = 'dbKaryawan';
|
||||
protected $table = 'public.pegawai_m';
|
||||
public $timestamps = false;
|
||||
protected $primaryKey = "id";
|
||||
protected $guarded =[
|
||||
'id'
|
||||
];
|
||||
}
|
||||
@ -39,7 +39,8 @@ class Order extends Model
|
||||
'alamat',
|
||||
'medical_record',
|
||||
'evidence_medical_record',
|
||||
'nama_institusi'
|
||||
'nama_institusi',
|
||||
'nip'
|
||||
];
|
||||
|
||||
protected $cast = [
|
||||
|
||||
16
app/Models/UnitInstalasi.php
Normal file
16
app/Models/UnitInstalasi.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class UnitInstalasi extends Model
|
||||
{
|
||||
protected $connection = 'dbKaryawan';
|
||||
protected $table = 'public.unitkerjapegawai_m';
|
||||
public $timestamps = false;
|
||||
protected $primaryKey = "id";
|
||||
protected $guarded =[
|
||||
'id'
|
||||
];
|
||||
}
|
||||
@ -152,6 +152,28 @@ return [
|
||||
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
||||
],
|
||||
|
||||
'dbKaryawan' => [
|
||||
'driver' => 'pgsql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST_KARYAWAN', '127.0.0.1'),
|
||||
'port' => env('DB_PORT_KARYAWAN', '3306'),
|
||||
'database' => env('DB_DATABASE_KARYAWAN', 'laravel'),
|
||||
'username' => env('DB_USERNAME_KARYAWAN', 'root'),
|
||||
'password' => env('DB_PASSWORD_KARYAWAN', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'search_path' => 'public',
|
||||
'sslmode' => 'prefer',
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'search_path' => 'public',
|
||||
'sslmode' => 'prefer',
|
||||
'timezone' => env('APP_TIMEZONE', 'utc' ),
|
||||
],
|
||||
|
||||
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|
||||
12
env_prod
12
env_prod
@ -27,12 +27,12 @@ DB_DATABASE_ORDER_GIZI = order_gizi
|
||||
DB_USERNAME_ORDER_GIZI = simrs
|
||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
||||
|
||||
DB_CONNECTION_ORDER_GIZI= pgsql
|
||||
DB_HOST_ORDER_GIZI = 172.16.88.22
|
||||
DB_PORT_ORDER_GIZI = 5432
|
||||
DB_DATABASE_ORDER_GIZI = order_gizi
|
||||
DB_USERNAME_ORDER_GIZI = simrs
|
||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
||||
DB_CONNECTION_AUTH_KARYAWAN = pgsql
|
||||
DB_HOST_KARYAWAN = psql1.rsabhk.lan
|
||||
DB_PORT_KARYAWAN = 5432
|
||||
DB_DATABASE_KARYAWAN = rsab_hk_production
|
||||
DB_USERNAME_KARYAWAN = postgres
|
||||
DB_PASSWORD_KARYAWAN = postgres
|
||||
|
||||
DB_CONNECTION_AUTH_DEV = pgsql
|
||||
DB_HOST_AUTH_DEV = 172.16.88.22
|
||||
|
||||
BIN
public/cara_pesan/order_karyawan.png
Normal file
BIN
public/cara_pesan/order_karyawan.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 430 KiB |
BIN
public/cara_pesan/order_keluarga_pasien.png
Normal file
BIN
public/cara_pesan/order_keluarga_pasien.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 419 KiB |
BIN
public/cara_pesan/order_masyarakat_umum.png
Normal file
BIN
public/cara_pesan/order_masyarakat_umum.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 421 KiB |
@ -224,18 +224,38 @@ function showStep(index) {
|
||||
// =======================
|
||||
function toggleCustomerFields() {
|
||||
const selected = $('input[name="jenis_customer"]:checked').val();
|
||||
if (selected === 'Karyawan RSAB Harapan Kita') {
|
||||
$('.karyawan').show();
|
||||
$('.pasien, .umum').hide();
|
||||
} else if (selected === 'Keluarga Pasien / Penunggu Pasien') {
|
||||
$('.pasien').show();
|
||||
$('.karyawan, .umum').hide();
|
||||
} else {
|
||||
$('.umum').show();
|
||||
$('.karyawan, .pasien').hide();
|
||||
const $nama = $('#nama_pemesan');
|
||||
|
||||
// Sembunyikan semua section
|
||||
$('.karyawan, .pasien, .umum').hide();
|
||||
|
||||
// Destroy jika sudah ada selectize
|
||||
if ($nama[0] && $nama[0].selectize) {
|
||||
$nama[0].selectize.destroy();
|
||||
}
|
||||
|
||||
|
||||
switch (selected) {
|
||||
case 'Karyawan RSAB Harapan Kita':
|
||||
$('.karyawan').show();
|
||||
$nama.val('')
|
||||
$nama.removeClass('form-control')
|
||||
$("#help_nama_pemesan").removeClass('d-none')
|
||||
selectKaryawan(); // inisialisasi ulang selectize
|
||||
break;
|
||||
case 'Keluarga Pasien / Penunggu Pasien':
|
||||
$('.pasien').show();
|
||||
$nama.addClass('form-control')
|
||||
$("#help_nama_pemesan").addClass('d-none')
|
||||
break;
|
||||
|
||||
default: // Masyarakat Umum
|
||||
$('.umum').show();
|
||||
$nama.addClass('form-control')
|
||||
$("#help_nama_pemesan").addClass('d-none')
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$('input[name="jenis_customer"]').on('change', toggleCustomerFields);
|
||||
toggleCustomerFields();
|
||||
|
||||
@ -246,7 +266,9 @@ if (typeof checkout_biodata === 'object') {
|
||||
if(checkout_biodata.jenis_kelamin){
|
||||
$(`input[name="jenis_kelamin"][value="${checkout_biodata.jenis_kelamin}"]`).prop('checked', true);
|
||||
}
|
||||
$('#nama_pemesan').val(checkout_biodata.nama_pemesan);
|
||||
if(checkout_biodata.jenis_customer !== 'Karyawan RSAB Harapan Kita'){
|
||||
$('#nama_pemesan').val(checkout_biodata.nama_pemesan);
|
||||
}
|
||||
// $('#tanggal_lahir').val(checkout_biodata.tanggal_lahir);
|
||||
$('#tinggi_badan').val(checkout_biodata.tinggi_badan);
|
||||
$('#berat_badan').val(checkout_biodata.berat_badan);
|
||||
@ -266,7 +288,7 @@ function isiKonfirmasi() {
|
||||
jenis_customer: $('input[name="jenis_customer"]:checked').val(),
|
||||
nama_pemesan: $('#nama_pemesan').val(),
|
||||
jenis_kelamin: $('input[name="jenis_kelamin"]:checked').val(),
|
||||
// tanggal_lahir: $('#tanggal_lahir').val(),
|
||||
id_karyawan: $('#id_karyawan').val(),
|
||||
tinggi_badan: $('#tinggi_badan').val(),
|
||||
berat_badan: $('#berat_badan').val(),
|
||||
no_whatsapp: $('#no_whatsapp').val(),
|
||||
@ -293,6 +315,7 @@ function renderCartSummary() {
|
||||
container.innerHTML = '';
|
||||
let totalKeseluruhan = 0;
|
||||
const carts = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||
const checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '[]');
|
||||
|
||||
carts.forEach((item) => {
|
||||
const pesananList = Array.isArray(item.pesanan) ? item.pesanan : [];
|
||||
@ -438,31 +461,58 @@ function renderCartSummary() {
|
||||
|
||||
<div class="flex-grow-1 position-relative">
|
||||
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${item.nama_menu}</h5>
|
||||
<div class="text-muted small mb-1">Rp ${parseInt(harga).toLocaleString('id-ID')}</div>
|
||||
${item?.kalori ? `<div class="text-muted small mb-1">Kalori : ${item?.kalori} kal</div>` : ''}
|
||||
<div class="card-body">
|
||||
<!-- Judul menu -->
|
||||
<h4 class="card-title mb-2 fw-bold text-primary">${item.nama_menu}</h4>
|
||||
|
||||
${item.deskripsi ? `<p class="card-text text-muted small mb-2">${item.deskripsi}</p>` : ''}
|
||||
<div class="mb-2 small text-muted"><i class="fa fa-calendar-check me-1"></i>
|
||||
${item.apakah_someday
|
||||
? 'Tersedia setiap hari (Senin - Minggu)'
|
||||
: (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia')}
|
||||
</div>
|
||||
<div class="mb-2 small text-muted"><i class="fa fa-utensils me-1"></i>
|
||||
Menu: <strong>${item.apakah_someday ? 'Sameday' : 'Menu Normal'}</strong>
|
||||
</div>
|
||||
<!-- Harga -->
|
||||
<div class="badge bg-success-subtle text-success fw-bold fs-6 mb-2">
|
||||
${checkout_biodata?.jenis_customer === "Karyawan RSAB Harapan Kita"
|
||||
? '<span class="me-1">Harga Karyawan</span>'
|
||||
: '<span class="me-1">Harga</span>'
|
||||
}
|
||||
Rp ${parseInt(harga).toLocaleString('id-ID')}
|
||||
</div>
|
||||
|
||||
<div class="mb-2 small text-muted"><strong>Silahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan</strong></div>
|
||||
${pesananHTML}
|
||||
<div class="mt-3 d-flex justify-content-between align-items-center flex-wrap gap-2">
|
||||
<button class="btn btn-sm btn-outline-success"
|
||||
onclick="addOrderDate(${item.id}, ${item.apakah_menu_sore})">
|
||||
+ Tambah Tanggal
|
||||
</button>
|
||||
<!-- Kalori -->
|
||||
${item?.kalori ? `<div class="text-muted small mb-1"><i class="fas fa-fire me-1"></i>Kalori: ${item.kalori} kal</div>` : ''}
|
||||
|
||||
<div><strong>Total:</strong> <span class="text-success">Rp ${itemTotal.toLocaleString('id-ID')}</span></div>
|
||||
</div>
|
||||
<!-- Deskripsi -->
|
||||
${item.deskripsi ? `<p class="card-text text-muted small mb-2">${item.deskripsi}</p>` : ''}
|
||||
|
||||
<!-- Info tanggal & jenis menu -->
|
||||
<div class="d-flex flex-column gap-1 mb-2">
|
||||
<div class="small text-muted">
|
||||
<i class="fas fa-calendar-check me-1"></i>
|
||||
${item.apakah_someday
|
||||
? 'Tersedia setiap hari (Senin – Minggu)'
|
||||
: (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia')
|
||||
}
|
||||
</div>
|
||||
<div class="small text-muted">
|
||||
<i class="fas fa-utensils me-1"></i>
|
||||
<strong>${item.apakah_someday ? 'Sameday' : 'Menu Normal'}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Petunjuk -->
|
||||
<div class="alert alert-info small p-2 mb-2">
|
||||
<strong>Petunjuk:</strong> Isi tanggal pemesanan, pilih karbohidrat, dan catatan tambahan (opsional).
|
||||
</div>
|
||||
|
||||
<!-- Form pesanan -->
|
||||
${pesananHTML}
|
||||
|
||||
<!-- Tombol & total -->
|
||||
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mt-3">
|
||||
<button class="btn btn-sm btn-success" onclick="addOrderDate(${item.id}, ${item.apakah_menu_sore})">
|
||||
<i class="fas fa-plus me-1"></i>Tambah Tanggal
|
||||
</button>
|
||||
|
||||
<div class="fw-bold">
|
||||
Total: <span class="text-success">Rp ${itemTotal.toLocaleString('id-ID')}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -922,3 +972,80 @@ document.getElementById('submitNote').addEventListener('click', function(e){
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function selectKaryawan(){
|
||||
const $el = $('#nama_pemesan');
|
||||
|
||||
// 1. destroy jika sudah ada
|
||||
if ($el[0] && $el[0].selectize) {
|
||||
$el[0].selectize.destroy();
|
||||
}
|
||||
$el.selectize({
|
||||
valueField: 'label', // sama dengan labelField
|
||||
labelField: 'label',
|
||||
searchField: ['label'],
|
||||
create: false,
|
||||
placeholder: "Cari nama karyawan...",
|
||||
maxItems: 1,
|
||||
load: function (query, callback) {
|
||||
$.ajax({
|
||||
url: '/karyawan',
|
||||
data: { search: query },
|
||||
success: res => callback(res.data || []),
|
||||
error: () => callback([])
|
||||
});
|
||||
},
|
||||
render: {
|
||||
option: (item, escape) =>
|
||||
`<div class="p-1"><div class="fw-semibold">${escape(item.label)}</div></div>`,
|
||||
item: (item, escape) => `<div>${escape(item.label)}</div>`
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
selectUnitInstalasi()
|
||||
function selectUnitInstalasi(){
|
||||
const bagian_instalasi = $('#bagian_instalasi');
|
||||
|
||||
// 1. destroy jika sudah ada
|
||||
if (bagian_instalasi[0] && bagian_instalasi[0].selectize) {
|
||||
bagian_instalasi[0].selectize.destroy();
|
||||
}
|
||||
bagian_instalasi.selectize({
|
||||
valueField: 'label',
|
||||
labelField: 'label',
|
||||
searchField: ['label'],
|
||||
create: false,
|
||||
sortField: [],
|
||||
placeholder: "Cari unit instalasi...",
|
||||
maxItems:1,
|
||||
load: function (query, callback) {
|
||||
$.ajax({
|
||||
url: '/unit-instalasi',
|
||||
data: { search: query },
|
||||
success: function (response) {
|
||||
if (response.error === 0 && Array.isArray(response.data)) {
|
||||
callback(response.data);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
},
|
||||
render: {
|
||||
option: function (item, escape) {
|
||||
|
||||
return `<div class="p-1">
|
||||
<div class="fw-semibold" style="font-size: 0.85rem;">${escape(item.label)}</div>
|
||||
</div>`;
|
||||
},
|
||||
item: function (item, escape) {
|
||||
return `<div>${escape(item?.label)}</div>`;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -51,6 +51,8 @@ $(document).ready(function(){
|
||||
fetchMenu(filterState)
|
||||
}, 300)
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
|
||||
function changePerPage(select) {
|
||||
|
||||
@ -3,14 +3,152 @@
|
||||
if (cart.length > 0) {
|
||||
$('#floatingCartButton').removeClass('d-none');
|
||||
$('#menuBtn').removeClass('d-none');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
function openImageModal(imageSrc, title) {
|
||||
document.getElementById('modalImage').src = imageSrc;
|
||||
document.getElementById('imageModalLabel').textContent = title;
|
||||
$('#imageModal').modal('show');
|
||||
}
|
||||
|
||||
function fetchMenu(filter = {}) {
|
||||
const containerGuest = $("#order_guest_id");
|
||||
$("#tanggal-filter").removeClass('d-none');
|
||||
if (filter.jenis_menu === "cara_pesan") {
|
||||
$("#tanggal-filter").addClass('d-none');
|
||||
const cara_pesan = [
|
||||
{
|
||||
type: "Karyawan RSAB Harapan Kita",
|
||||
gambar: "/cara_pesan/order_karyawan.png",
|
||||
color: "success"
|
||||
},
|
||||
{
|
||||
type: "Keluarga Pasien / Penunggu Pasien",
|
||||
gambar: "/cara_pesan/order_keluarga_pasien.png",
|
||||
color: "success"
|
||||
},
|
||||
{
|
||||
type: "Masyarakat Umum",
|
||||
gambar: "/cara_pesan/order_masyarakat_umum.png",
|
||||
color: "success"
|
||||
}
|
||||
];
|
||||
|
||||
let html = `
|
||||
<div class="container py-2">
|
||||
<div class="text-center mb-3">
|
||||
<h2 class="fw-bold text-gradient bg-gradient-primary">Cara Pemesanan</h2>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 justify-content-center">
|
||||
`;
|
||||
|
||||
cara_pesan.forEach((cara, index) => {
|
||||
html += `
|
||||
<div class="col-lg-4 col-md-6">
|
||||
<div class="card border-0 shadow-lg hover-lift transition-all-3">
|
||||
<div class="card-body text-center">
|
||||
<div class="mb-2">
|
||||
<div class="avatar avatar-xxl mx-auto">
|
||||
<a href="${cara.gambar}"
|
||||
class="glightbox"
|
||||
data-gallery="cara-pesan"
|
||||
data-title="${cara.type}"
|
||||
data-description="Panduan pemesanan ${cara.type}">
|
||||
<img src="${cara.gambar}"
|
||||
alt="${cara.type}"
|
||||
class="img-fluid border rounded-3 border-3 border-${cara.color} shadow-sm image-zoom"
|
||||
style="width: 120px; height: 120px; object-fit: cover; cursor: pointer;">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<h5 class="fw-bold text-${cara.color}">${cara.type}</h5>
|
||||
<small class="text-muted d-block">Panduan pemesanan</small>
|
||||
</div>
|
||||
<div class="card-footer bg-white border-0 text-center mb-1">
|
||||
<a href="${cara.gambar}"
|
||||
class="btn btn-${cara.color} btn-rounded fw-semibold glightbox"
|
||||
data-gallery="cara-pesan"
|
||||
data-title="${cara.type}"
|
||||
data-description="Panduan pemesanan ${cara.type}">
|
||||
<i class="fas fa-eye me-2"></i>Lihat Panduan
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
|
||||
html += `
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal Image Viewer -->
|
||||
|
||||
<style>
|
||||
.text-gradient {
|
||||
background: linear-gradient(45deg, #667eea 0%, #764ba2 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.hover-lift {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.hover-lift:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 1rem 3rem rgba(0,0,0,0.175) !important;
|
||||
}
|
||||
|
||||
.transition-all-3 {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.btn-rounded {
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
||||
/* Image hover effect */
|
||||
.image-zoom {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.image-zoom:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
/* Modal backdrop styling */
|
||||
.modal-backdrop {
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
.modal.fade .modal-dialog {
|
||||
transition: transform 0.3s ease-out;
|
||||
}
|
||||
|
||||
.modal.show .modal-dialog {
|
||||
transform: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
`;
|
||||
containerGuest.html(html);
|
||||
|
||||
GLightbox({
|
||||
selector: '.glightbox',
|
||||
touchNavigation: true,
|
||||
loop: true,
|
||||
zoomable: true,
|
||||
autoplayVideos: true
|
||||
});
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
let params = new URLSearchParams({
|
||||
page: filter.page || 1,
|
||||
@ -45,7 +183,7 @@
|
||||
$("#tanggal-filter").addClass('d-none');
|
||||
let html = `
|
||||
<div class="container">
|
||||
<h4 class="mb-4 fw-bold text-primary">
|
||||
<h4 class="mb-4 fw-bold text-gradient">
|
||||
<i class="fas fa-calendar-alt me-2"></i>
|
||||
Jadwal Konsultasi
|
||||
</h4>
|
||||
@ -147,6 +285,11 @@
|
||||
--soft-gray: #f8f9fa;
|
||||
--charcoal: #2d3436;
|
||||
}
|
||||
.text-gradient {
|
||||
background: linear-gradient(45deg, #667eea 0%, #764ba2 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
.bg-gradient-primary {
|
||||
background: linear-gradient(135deg, var(--mint-dark) 0%, var(--mint) 100%);
|
||||
}
|
||||
@ -258,7 +401,7 @@
|
||||
<!-- di dalam .position-relative (gambar) -->
|
||||
<!-- Nama + kalori di dalam gambar (bawah) -->
|
||||
<div class="position-absolute bottom-0 start-0 p-2 w-100">
|
||||
<h6 class="fw-bold text-white mb-0" style="font-size:.75rem; max-width: 85%;">${menu.nama.substring(0, 39) + '...' }</h6>
|
||||
<h6 class="fw-bold text-white mb-0" style="font-size:.75rem; max-width: 85%;">${menu.nama.length > 15 ? menu.nama.substring(0, 17) + '...' : menu.nama}</h6>
|
||||
${menu?.kalori.length > 0 ? `
|
||||
<small class="text-white badge bg-success">${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal</small>`: ''}
|
||||
${(menu.klasifikasiMenu || [])
|
||||
@ -290,26 +433,27 @@
|
||||
|
||||
|
||||
<!-- Harga 1 baris -->
|
||||
<div class="d-flex justify-content-between align-items-center text-muted small mt-1 px-1">
|
||||
<small>Karyawan</small>
|
||||
<strong class="text-success">Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}</strong>
|
||||
<!-- <div class="d-flex justify-content-between align-items-center text-muted small mt-1 px-1"> -->
|
||||
<!--<small>Karyawan</small> -->
|
||||
<!-- <strong class="text-success">Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}</strong> -->
|
||||
<!-- </div> -->
|
||||
<div class="d-flex justify-content-between align-items-center text-muted small mb-1">
|
||||
<strong>Harga</strong>
|
||||
<strong class="text-success">Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}</strong>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-center text-muted small px-1">
|
||||
<small>Public</small>
|
||||
<strong class="text-success">Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}</strong>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-1 mt-2 px-1">
|
||||
<small class="text-muted fw-semibold">Tersedia:</small>
|
||||
<div class="d-flex gap-1 overflow-auto" style="font-size:.65rem; scrollbar-width:none;">
|
||||
|
||||
<div class="d-flex align-items-center gap-1">
|
||||
<small class="text-muted">Tersedia:</small>
|
||||
|
||||
${menu.apakah_menu_siang && menu.apakah_menu_sore
|
||||
? '<div class="badge bg-success text-dark d-flex align-items-center px-1 text-white" style="font-size:.65rem;">Makan Siang<br/> & Sore</div>'
|
||||
? '<span class="badge bg-success text-white px-1" style="font-size:.6rem;">Siang & Sore</span>'
|
||||
: menu.apakah_menu_siang
|
||||
? '<div class="badge bg-warning text-dark d-flex align-items-center px-1" style="font-size:.65rem;">Makan Siang</div>'
|
||||
? '<span class="badge bg-warning text-dark px-1" style="font-size:.6rem;">Siang</span>'
|
||||
: menu.apakah_menu_sore
|
||||
? '<div class="badge text-white d-flex align-items-center px-1" style="font-size:.65rem; background-color:#3A86FF;" >Makan Sore</div>'
|
||||
: '<div class="badge bg-danger d-flex align-items-center px-1" style="font-size:.5rem;"><i class="fa fa-times-circle" style="font-size:.5rem"></i>Tutup</div>'}
|
||||
? '<span class="badge text-white px-1" style="font-size:.6rem; background:#3A86FF;">Sore</span>'
|
||||
: '<span class="badge bg-danger text-white px-1" style="font-size:.6rem;">Tutup</span>'
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Tombol -->
|
||||
@ -596,6 +740,7 @@
|
||||
}
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart))
|
||||
updateCartCount(cart.length)
|
||||
|
||||
}
|
||||
|
||||
function checkout(){
|
||||
|
||||
13
resources/views/guest/cara_bayar.blade.php
Normal file
13
resources/views/guest/cara_bayar.blade.php
Normal file
@ -0,0 +1,13 @@
|
||||
<div class="modal fade" id="imageModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-xl">
|
||||
<div class="modal-content border-0">
|
||||
<div class="modal-header border-0">
|
||||
<h5 class="modal-title" id="imageModalLabel"></h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body text-center p-2">
|
||||
<img src="" id="modalImage" class="img-fluid rounded" style="max-height: 80vh;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -40,6 +40,8 @@
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Nama Pemesan <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control" name="nama_pemesan" id="nama_pemesan" required>
|
||||
<input type="hidden" class="form-control" name="id_karyawan" id="id_karyawan">
|
||||
<div id="help_nama_pemesan" class="form-text d-none">Silakan cari dan pilih nama karyawan.</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">No. Whatsapp <span class="text-danger">*</span></label>
|
||||
@ -104,7 +106,7 @@
|
||||
{{-- Karyawan --}}
|
||||
<div class="col-md-6 karyawan">
|
||||
<label class="form-label">Bagian /Instalasi <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control karyawan-field" name="bagian_instalasi" id="bagian_instalasi">
|
||||
<input type="text" class="karyawan-field" name="bagian_instalasi" id="bagian_instalasi">
|
||||
</div>
|
||||
<div class="col-md-6 karyawan">
|
||||
<label class="form-label">Ekstensien yang bisa di Hubungi</label>
|
||||
|
||||
@ -1,84 +1,69 @@
|
||||
@extends('guest.layout.main')
|
||||
@section('body_main_guests')
|
||||
|
||||
<section class="section py-5 bg-light">
|
||||
<section class="section py-3 bg-light">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
||||
<ul class="nav nav-tabs mb-3" id="tabJenisMenu">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
|
||||
<ul class="nav nav-tabs" 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 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="paket">Paket</a></li>
|
||||
<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="cara_pesan">Cara Pesan</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
||||
<div class="mb-3">
|
||||
<input type="text" class="form-control" id="searchMenu" placeholder="Pencarian...">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row ms-1" id="tanggal-filter">
|
||||
<div class="col-12 mb-2">
|
||||
<h6 class="fw-bold text-muted mb-1">
|
||||
Pilih Tanggal Makanan
|
||||
<a tabindex="0" class="text-decoration-none" role="button" data-bs-toggle="popover" data-bs-trigger="focus"
|
||||
title="Panduan"
|
||||
data-bs-content="Pilih rentang tanggal untuk melihat daftar menu yang tersedia pada tanggal tersebut.">
|
||||
<i class="fa fa-info-circle text-secondary"></i>
|
||||
<!-- Filter Pencarian + Tanggal -->
|
||||
<div class="row gx-2 gy-1 mb-2" id="tanggal-filter">
|
||||
<!-- Kolom Cari -->
|
||||
<div class="col-6">
|
||||
<label class="fw-bold small text-muted mb-1">Cari Makanan</label>
|
||||
<input type="text" class="form-control form-control-sm"
|
||||
id="searchMenu" placeholder="Pencarian...">
|
||||
</div>
|
||||
|
||||
<!-- Kolom Tanggal -->
|
||||
<div class="col-6">
|
||||
<label class="fw-bold small text-muted mb-1">
|
||||
Tanggal
|
||||
<a tabindex="0" role="button" data-bs-toggle="popover"
|
||||
data-bs-trigger="focus" title="Panduan"
|
||||
data-bs-content="Pilih rentang tanggal untuk melihat menu tersedia.">
|
||||
<i class="fa fa-info-circle text-secondary ms-1"></i>
|
||||
</a>
|
||||
</h6>
|
||||
|
||||
<div class="input-group input-group-sm mb-2" style="max-width: 450px;">
|
||||
<span class="input-group-text bg-white px-1">
|
||||
<i class="fa fa-calendar-alt text-primary"></i>
|
||||
</label>
|
||||
<div class="input-group input-group-sm">
|
||||
<span class="input-group-text bg-white px-2">
|
||||
<i class="fa fa-calendar-alt text-primary"></i>
|
||||
</span>
|
||||
|
||||
<input type="text"
|
||||
id="tanggal"
|
||||
class="form-control form-control-sm tanggal-input"
|
||||
readonly
|
||||
placeholder="Contoh: 7 - 10 Agustus 2025"
|
||||
title="Klik untuk membuka kalender"
|
||||
style="font-size: 0.85rem; padding: 0.3rem 0.5rem;">
|
||||
|
||||
<!-- Tombol X di sebelah input -->
|
||||
<input type="text" id="tanggal" class="form-control form-control-sm tanggal-input"
|
||||
readonly placeholder="7-10 Agt 2025">
|
||||
<button type="button" id="resetTanggal"
|
||||
class="btn btn-sm btn-light border d-none"
|
||||
title="Reset Tanggal">
|
||||
<i class="fa fa-times text-muted"></i>
|
||||
class="btn btn-sm btn-light border d-none" title="Reset">
|
||||
<i class="fa fa-times text-muted"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="tanggalTerpilihLabel"
|
||||
class="bg-light border text-dark mt-1 d-none rounded px-2 py-1"
|
||||
style="font-size: 0.75rem; word-wrap: break-word; overflow-wrap: break-word;">
|
||||
class="bg-light border text-dark small mt-1 d-none rounded px-2 py-1">
|
||||
<i class="fa fa-calendar-check text-success me-1"></i>
|
||||
<span id="labelTanggalText">Menampilkan menu...</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert alert-info mb-3 shadow-sm rounded-3" role="alert">
|
||||
<div class="d-flex align-items-center overflow-hidden">
|
||||
<div class="flex-grow-1">
|
||||
<marquee
|
||||
behavior="scroll"
|
||||
direction="left"
|
||||
scrollamount="4"
|
||||
onmouseover="this.stop()"
|
||||
onmouseout="this.start()"
|
||||
>
|
||||
<i class="fa fa-user-md fa-lg me-2 text-primary flex-shrink-0"></i>
|
||||
<strong>Konsultasi Gizi!</strong>
|
||||
Butuh rekomendasi menu sesuai kondisi Anda?
|
||||
<a href="#" class="alert-link">Lihat jadwal konsultasi & daftar sekarang</a>.
|
||||
Butuh bantuan? Hubungi WhatsApp <strong>Instalasi Gizi</strong>
|
||||
<a href="https://wa.me/08815611382 " target="_blank">08815611382 </a>
|
||||
<small class="text-muted">Jam kerja: 08.00 – 15.00 WIB</small>
|
||||
</marquee>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Marquee Info -->
|
||||
<div class="alert alert-info mb-3 shadow-sm rounded-3 small p-2" role="alert">
|
||||
<marquee behavior="scroll" direction="left" scrollamount="3"
|
||||
onmouseover="this.stop()" onmouseout="this.start()">
|
||||
<i class="fa fa-user-md text-primary me-1"></i>
|
||||
<strong>Konsultasi Gizi!</strong>
|
||||
Butuh rekomendasi menu? <a href="#" class="alert-link">Daftar sekarang</a>.
|
||||
Hubungi <a href="https://wa.me/08815611382" target="_blank">08815611382</a>
|
||||
<span class="text-muted">(08:00-15:00 WIB)</span>
|
||||
</marquee>
|
||||
</div>
|
||||
|
||||
|
||||
@ -136,6 +121,7 @@
|
||||
</section>
|
||||
|
||||
@include('guest.checkout_order')
|
||||
@include('guest.cara_bayar')
|
||||
|
||||
<script src="{{ ver('/js/order_guest/register.js') }}"></script>
|
||||
<script src="{{ ver('/js/order_guest/functions.js') }}"></script>
|
||||
|
||||
@ -27,11 +27,27 @@
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
|
||||
|
||||
{{-- Selectize --}}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/css/selectize.default.min.css"
|
||||
integrity="sha512-pTaEn+6gF1IeWv3W1+7X7eM60TFu/agjgoHmYhAfLEU8Phuf6JKiiE8YmsNC0aCgQv4192s4Vai8YZ6VNM6vyQ=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"
|
||||
/>
|
||||
|
||||
{{-- 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>
|
||||
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>\
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.15.2/js/selectize.min.js"
|
||||
integrity="sha512-IOebNkvA/HZjMM7MxL0NYeLYEalloZ8ckak+NDtOViP7oiYzG5vn6WVXyrJDiJPhl4yRdmNAG49iuLmhkUdVsQ=="
|
||||
crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"
|
||||
></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/glightbox/dist/css/glightbox.min.css" />
|
||||
<script src="https://cdn.jsdelivr.net/gh/mcstudios/glightbox/dist/js/glightbox.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body class="index-page">
|
||||
|
||||
@ -98,6 +98,8 @@ Route::get('/check-order/search', [CustomerController::class, 'searchOrder']);
|
||||
Route::get('/order-mcu', [CustomerController::class, 'indexMcu']);
|
||||
Route::post('/order-mcu', [CustomerController::class, 'storeMcu']);
|
||||
Route::get('/success-mcu', [CustomerController::class, 'successMcu']);
|
||||
Route::get('/karyawan', [CustomerController::class, 'karyawan']);
|
||||
Route::get('/unit-instalasi', [CustomerController::class, 'unitInstalasi']);
|
||||
|
||||
// Route::get('/send-mail', function(){
|
||||
// Mail::to('skyjok14@gmail.com')->queue(new NotifikasiCustomer('Test'));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user