done -> integrasi user dan unit simrs + cara pembayaran
This commit is contained in:
parent
b2e4899f87
commit
f15f9dee45
@ -6,15 +6,18 @@ use App\Mail\NotifikasiCustomer;
|
|||||||
use App\Mail\NotifikasiPembayaran;
|
use App\Mail\NotifikasiPembayaran;
|
||||||
use App\Models\JadwalKonsul;
|
use App\Models\JadwalKonsul;
|
||||||
use App\Models\Karbohidrat;
|
use App\Models\Karbohidrat;
|
||||||
|
use App\Models\Karyawan;
|
||||||
use App\Models\MasterMcu;
|
use App\Models\MasterMcu;
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
use App\Models\OrderDetail;
|
use App\Models\OrderDetail;
|
||||||
|
use App\Models\UnitInstalasi;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonPeriod;
|
use Carbon\CarbonPeriod;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
class CustomerController extends Controller
|
class CustomerController extends Controller
|
||||||
{
|
{
|
||||||
@ -288,6 +291,10 @@ class CustomerController extends Controller
|
|||||||
'alamat' => $biodataResult['alamat'],
|
'alamat' => $biodataResult['alamat'],
|
||||||
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
'entry_at' => Carbon::now()->format('Y-m-d H:i:s.u'),
|
||||||
];
|
];
|
||||||
|
if($jenisCustomer === "Karyawan RSAB Harapan Kita"){
|
||||||
|
$nip_pns = Karyawan::where('namalengkap',$biodataResult['nama_pemesan'])->first()->nip_pns;
|
||||||
|
$payloadOrder['nip'] = $nip_pns ?? null;
|
||||||
|
}
|
||||||
$order = Order::create($payloadOrder);
|
$order = Order::create($payloadOrder);
|
||||||
foreach ($dataCart as $cart) {
|
foreach ($dataCart as $cart) {
|
||||||
$payloadOrderDetail = [
|
$payloadOrderDetail = [
|
||||||
@ -555,4 +562,52 @@ class CustomerController extends Controller
|
|||||||
];
|
];
|
||||||
return view('guest.success_page', $payload);
|
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',
|
'alamat',
|
||||||
'medical_record',
|
'medical_record',
|
||||||
'evidence_medical_record',
|
'evidence_medical_record',
|
||||||
'nama_institusi'
|
'nama_institusi',
|
||||||
|
'nip'
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $cast = [
|
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' ),
|
'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_USERNAME_ORDER_GIZI = simrs
|
||||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
||||||
|
|
||||||
DB_CONNECTION_ORDER_GIZI= pgsql
|
DB_CONNECTION_AUTH_KARYAWAN = pgsql
|
||||||
DB_HOST_ORDER_GIZI = 172.16.88.22
|
DB_HOST_KARYAWAN = psql1.rsabhk.lan
|
||||||
DB_PORT_ORDER_GIZI = 5432
|
DB_PORT_KARYAWAN = 5432
|
||||||
DB_DATABASE_ORDER_GIZI = order_gizi
|
DB_DATABASE_KARYAWAN = rsab_hk_production
|
||||||
DB_USERNAME_ORDER_GIZI = simrs
|
DB_USERNAME_KARYAWAN = postgres
|
||||||
DB_PASSWORD_ORDER_GIZI = @S1mrs.3205@
|
DB_PASSWORD_KARYAWAN = postgres
|
||||||
|
|
||||||
DB_CONNECTION_AUTH_DEV = pgsql
|
DB_CONNECTION_AUTH_DEV = pgsql
|
||||||
DB_HOST_AUTH_DEV = 172.16.88.22
|
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() {
|
function toggleCustomerFields() {
|
||||||
const selected = $('input[name="jenis_customer"]:checked').val();
|
const selected = $('input[name="jenis_customer"]:checked').val();
|
||||||
if (selected === 'Karyawan RSAB Harapan Kita') {
|
const $nama = $('#nama_pemesan');
|
||||||
$('.karyawan').show();
|
|
||||||
$('.pasien, .umum').hide();
|
// Sembunyikan semua section
|
||||||
} else if (selected === 'Keluarga Pasien / Penunggu Pasien') {
|
$('.karyawan, .pasien, .umum').hide();
|
||||||
$('.pasien').show();
|
|
||||||
$('.karyawan, .umum').hide();
|
// Destroy jika sudah ada selectize
|
||||||
} else {
|
if ($nama[0] && $nama[0].selectize) {
|
||||||
$('.umum').show();
|
$nama[0].selectize.destroy();
|
||||||
$('.karyawan, .pasien').hide();
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
$('input[name="jenis_customer"]').on('change', toggleCustomerFields);
|
||||||
toggleCustomerFields();
|
toggleCustomerFields();
|
||||||
|
|
||||||
@ -246,7 +266,9 @@ if (typeof checkout_biodata === 'object') {
|
|||||||
if(checkout_biodata.jenis_kelamin){
|
if(checkout_biodata.jenis_kelamin){
|
||||||
$(`input[name="jenis_kelamin"][value="${checkout_biodata.jenis_kelamin}"]`).prop('checked', true);
|
$(`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);
|
// $('#tanggal_lahir').val(checkout_biodata.tanggal_lahir);
|
||||||
$('#tinggi_badan').val(checkout_biodata.tinggi_badan);
|
$('#tinggi_badan').val(checkout_biodata.tinggi_badan);
|
||||||
$('#berat_badan').val(checkout_biodata.berat_badan);
|
$('#berat_badan').val(checkout_biodata.berat_badan);
|
||||||
@ -266,7 +288,7 @@ function isiKonfirmasi() {
|
|||||||
jenis_customer: $('input[name="jenis_customer"]:checked').val(),
|
jenis_customer: $('input[name="jenis_customer"]:checked').val(),
|
||||||
nama_pemesan: $('#nama_pemesan').val(),
|
nama_pemesan: $('#nama_pemesan').val(),
|
||||||
jenis_kelamin: $('input[name="jenis_kelamin"]:checked').val(),
|
jenis_kelamin: $('input[name="jenis_kelamin"]:checked').val(),
|
||||||
// tanggal_lahir: $('#tanggal_lahir').val(),
|
id_karyawan: $('#id_karyawan').val(),
|
||||||
tinggi_badan: $('#tinggi_badan').val(),
|
tinggi_badan: $('#tinggi_badan').val(),
|
||||||
berat_badan: $('#berat_badan').val(),
|
berat_badan: $('#berat_badan').val(),
|
||||||
no_whatsapp: $('#no_whatsapp').val(),
|
no_whatsapp: $('#no_whatsapp').val(),
|
||||||
@ -293,6 +315,7 @@ function renderCartSummary() {
|
|||||||
container.innerHTML = '';
|
container.innerHTML = '';
|
||||||
let totalKeseluruhan = 0;
|
let totalKeseluruhan = 0;
|
||||||
const carts = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
const carts = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
||||||
|
const checkout_biodata = JSON.parse(sessionStorage.getItem('checkout_biodata') || '[]');
|
||||||
|
|
||||||
carts.forEach((item) => {
|
carts.forEach((item) => {
|
||||||
const pesananList = Array.isArray(item.pesanan) ? item.pesanan : [];
|
const pesananList = Array.isArray(item.pesanan) ? item.pesanan : [];
|
||||||
@ -438,31 +461,58 @@ function renderCartSummary() {
|
|||||||
|
|
||||||
<div class="flex-grow-1 position-relative">
|
<div class="flex-grow-1 position-relative">
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">${item.nama_menu}</h5>
|
<!-- Judul menu -->
|
||||||
<div class="text-muted small mb-1">Rp ${parseInt(harga).toLocaleString('id-ID')}</div>
|
<h4 class="card-title mb-2 fw-bold text-primary">${item.nama_menu}</h4>
|
||||||
${item?.kalori ? `<div class="text-muted small mb-1">Kalori : ${item?.kalori} kal</div>` : ''}
|
|
||||||
|
|
||||||
${item.deskripsi ? `<p class="card-text text-muted small mb-2">${item.deskripsi}</p>` : ''}
|
<!-- Harga -->
|
||||||
<div class="mb-2 small text-muted"><i class="fa fa-calendar-check me-1"></i>
|
<div class="badge bg-success-subtle text-success fw-bold fs-6 mb-2">
|
||||||
${item.apakah_someday
|
${checkout_biodata?.jenis_customer === "Karyawan RSAB Harapan Kita"
|
||||||
? 'Tersedia setiap hari (Senin - Minggu)'
|
? '<span class="me-1">Harga Karyawan</span>'
|
||||||
: (item.tgl_tersedia ? `Tersedia pada tanggal: ${item.tgl_tersedia}` : 'Tidak ada info tanggal tersedia')}
|
: '<span class="me-1">Harga</span>'
|
||||||
</div>
|
}
|
||||||
<div class="mb-2 small text-muted"><i class="fa fa-utensils me-1"></i>
|
Rp ${parseInt(harga).toLocaleString('id-ID')}
|
||||||
Menu: <strong>${item.apakah_someday ? 'Sameday' : 'Menu Normal'}</strong>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-2 small text-muted"><strong>Silahkan isi tanggal pemesanan, pilih karbohidrat dan catatan pemesanan (opsional) yang diinginkan</strong></div>
|
<!-- Kalori -->
|
||||||
${pesananHTML}
|
${item?.kalori ? `<div class="text-muted small mb-1"><i class="fas fa-fire me-1"></i>Kalori: ${item.kalori} kal</div>` : ''}
|
||||||
<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>
|
|
||||||
|
|
||||||
<div><strong>Total:</strong> <span class="text-success">Rp ${itemTotal.toLocaleString('id-ID')}</span></div>
|
<!-- Deskripsi -->
|
||||||
</div>
|
${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>
|
</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)
|
fetchMenu(filterState)
|
||||||
}, 300)
|
}, 300)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function changePerPage(select) {
|
function changePerPage(select) {
|
||||||
|
|||||||
@ -3,14 +3,152 @@
|
|||||||
if (cart.length > 0) {
|
if (cart.length > 0) {
|
||||||
$('#floatingCartButton').removeClass('d-none');
|
$('#floatingCartButton').removeClass('d-none');
|
||||||
$('#menuBtn').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 = {}) {
|
function fetchMenu(filter = {}) {
|
||||||
const containerGuest = $("#order_guest_id");
|
const containerGuest = $("#order_guest_id");
|
||||||
$("#tanggal-filter").removeClass('d-none');
|
$("#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({
|
let params = new URLSearchParams({
|
||||||
page: filter.page || 1,
|
page: filter.page || 1,
|
||||||
@ -45,7 +183,7 @@
|
|||||||
$("#tanggal-filter").addClass('d-none');
|
$("#tanggal-filter").addClass('d-none');
|
||||||
let html = `
|
let html = `
|
||||||
<div class="container">
|
<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>
|
<i class="fas fa-calendar-alt me-2"></i>
|
||||||
Jadwal Konsultasi
|
Jadwal Konsultasi
|
||||||
</h4>
|
</h4>
|
||||||
@ -147,6 +285,11 @@
|
|||||||
--soft-gray: #f8f9fa;
|
--soft-gray: #f8f9fa;
|
||||||
--charcoal: #2d3436;
|
--charcoal: #2d3436;
|
||||||
}
|
}
|
||||||
|
.text-gradient {
|
||||||
|
background: linear-gradient(45deg, #667eea 0%, #764ba2 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
.bg-gradient-primary {
|
.bg-gradient-primary {
|
||||||
background: linear-gradient(135deg, var(--mint-dark) 0%, var(--mint) 100%);
|
background: linear-gradient(135deg, var(--mint-dark) 0%, var(--mint) 100%);
|
||||||
}
|
}
|
||||||
|
|||||||
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">
|
<div class="col-md-6">
|
||||||
<label class="form-label">Nama Pemesan <span class="text-danger">*</span></label>
|
<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="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>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<label class="form-label">No. Whatsapp <span class="text-danger">*</span></label>
|
<label class="form-label">No. Whatsapp <span class="text-danger">*</span></label>
|
||||||
@ -104,7 +106,7 @@
|
|||||||
{{-- Karyawan --}}
|
{{-- Karyawan --}}
|
||||||
<div class="col-md-6 karyawan">
|
<div class="col-md-6 karyawan">
|
||||||
<label class="form-label">Bagian /Instalasi <span class="text-danger">*</span></label>
|
<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>
|
||||||
<div class="col-md-6 karyawan">
|
<div class="col-md-6 karyawan">
|
||||||
<label class="form-label">Ekstensien yang bisa di Hubungi</label>
|
<label class="form-label">Ekstensien yang bisa di Hubungi</label>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
@extends('guest.layout.main')
|
@extends('guest.layout.main')
|
||||||
@section('body_main_guests')
|
@section('body_main_guests')
|
||||||
|
|
||||||
<section class="section py-5 bg-light">
|
<section class="section py-3 bg-light">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
|
||||||
@ -121,6 +121,7 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
@include('guest.checkout_order')
|
@include('guest.checkout_order')
|
||||||
|
@include('guest.cara_bayar')
|
||||||
|
|
||||||
<script src="{{ ver('/js/order_guest/register.js') }}"></script>
|
<script src="{{ ver('/js/order_guest/register.js') }}"></script>
|
||||||
<script src="{{ ver('/js/order_guest/functions.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">
|
<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 --}}
|
{{-- Jquery --}}
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
<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/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>
|
</head>
|
||||||
|
|
||||||
<body class="index-page">
|
<body class="index-page">
|
||||||
|
|||||||
@ -98,6 +98,8 @@ Route::get('/check-order/search', [CustomerController::class, 'searchOrder']);
|
|||||||
Route::get('/order-mcu', [CustomerController::class, 'indexMcu']);
|
Route::get('/order-mcu', [CustomerController::class, 'indexMcu']);
|
||||||
Route::post('/order-mcu', [CustomerController::class, 'storeMcu']);
|
Route::post('/order-mcu', [CustomerController::class, 'storeMcu']);
|
||||||
Route::get('/success-mcu', [CustomerController::class, 'successMcu']);
|
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(){
|
// Route::get('/send-mail', function(){
|
||||||
// Mail::to('skyjok14@gmail.com')->queue(new NotifikasiCustomer('Test'));
|
// Mail::to('skyjok14@gmail.com')->queue(new NotifikasiCustomer('Test'));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user