update name input, error validation, and date format in booking foto feature
This commit is contained in:
parent
23cd1e5b0b
commit
5b5fbf1c50
|
|
@ -18,7 +18,7 @@
|
|||
@csrf
|
||||
{{-- Kotak simpan data sementara di dalam form --}}
|
||||
<input type="hidden" name="tgl_booking" id="input_tgl_booking">
|
||||
<input type="hidden" name="jam_awal" id="input_jam_awal">
|
||||
<input type="hidden" name="jam_mulai" id="input_jam_mulai">
|
||||
<input type="hidden" name="jam_selesai" id="input_jam_selesai">
|
||||
<div id="data-paket" data-durasi="15"></div>
|
||||
<div class="row">
|
||||
|
|
@ -35,8 +35,16 @@ class="detailfoto-thumb rounded-4">
|
|||
<div class="col">
|
||||
<div class="detailfoto-card p-3 h-100">
|
||||
<h3 class="detailfoto-product-title">{{ $foto->nama }}</h3>
|
||||
<h4 class="detailfoto-product-price">Rp {{ number_format($foto->harga, 0, ',', '.') }}
|
||||
</h4>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<h4 class="detailfoto-product-price mb-0">
|
||||
Rp {{ number_format($foto->harga, 0, ',', '.') }}
|
||||
</h4>
|
||||
<span class="text-muted">|</span>
|
||||
<span class="badge rounded-pill"
|
||||
style="background-color: #e6f0f0; color: #3B8181; font-weight: 500;">
|
||||
<i class="bi bi-clock me-1"></i> {{ $foto->durasi }} Menit Sesi
|
||||
</span>
|
||||
</div>
|
||||
<p class="detailfoto-product-desc mb-0 text-justify">{{ $foto->deskripsi }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -78,10 +86,12 @@ class="detailfoto-thumb rounded-4">
|
|||
<span class="timer-badge" id="booking-timer">10:00</span>
|
||||
</div>
|
||||
<h4 class="schedule-title">Pilih Tanggal dan Waktu</h4>
|
||||
<p class="small">Slot abu-abu berarti jadwal sudah penuh. Silakan pilih waktu lain yang
|
||||
tersedia.</p>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-md-9 border-end pe-md-4" id="calendar-wrapper">
|
||||
<div class="col-md-9 border-end pe-md-4" id="calendar-grid-wrapper">
|
||||
@include('user.components.calendar-grid')
|
||||
</div>
|
||||
|
||||
|
|
@ -89,13 +99,16 @@ class="detailfoto-thumb rounded-4">
|
|||
<h6 class="mb-3 small">Jam Tersedia</h6>
|
||||
<div class="time-slot-container">
|
||||
@for ($hour = 9; $hour <= 20; $hour++)
|
||||
{{-- Slot Jam Genap (contoh: 09:00) --}}
|
||||
<button type="button" class="btn-time"
|
||||
data-time="{{ sprintf('%02d:00', $hour) }}">
|
||||
{{ sprintf('%02d:00', $hour) }} {{ $hour < 12 ? 'AM' : 'PM' }}
|
||||
{{ sprintf('%02d:00', $hour) }} WIB
|
||||
</button>
|
||||
|
||||
{{-- Slot Jam Setengah (contoh: 09:30) --}}
|
||||
<button type="button" class="btn-time"
|
||||
data-time="{{ sprintf('%02d:30', $hour) }}">
|
||||
{{ sprintf('%02d:30', $hour) }} {{ $hour < 12 ? 'AM' : 'PM' }}
|
||||
{{ sprintf('%02d:30', $hour) }} WIB
|
||||
</button>
|
||||
@endfor
|
||||
</div>
|
||||
|
|
@ -113,12 +126,13 @@ class="detailfoto-thumb rounded-4">
|
|||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
// ============================================================
|
||||
// 1. VARIABLE GLOBAL & UTILITIES
|
||||
// ============================================================
|
||||
let countdown; // Variabel untuk menyimpan timer
|
||||
let isTimeUp = false;
|
||||
const durasiPaket = parseInt(document.getElementById('data-paket')?.dataset.durasi || 15);
|
||||
|
||||
// Fungsi Update Counter (+/-) untuk Additional
|
||||
|
|
@ -146,7 +160,6 @@ function showCalendar() {
|
|||
calendarCol.scrollIntoView({
|
||||
behavior: 'smooth'
|
||||
});
|
||||
|
||||
startTimer(10 * 60);
|
||||
}
|
||||
}
|
||||
|
|
@ -169,7 +182,7 @@ function hideCalendar() {
|
|||
|
||||
// Reset pilihan tanggal & jam di input hidden
|
||||
document.getElementById('input_tgl_booking').value = "";
|
||||
document.getElementById('input_jam_awal').value = "";
|
||||
document.getElementById('input_jam_mulai').value = "";
|
||||
}
|
||||
|
||||
// Fungsi Timer Mundur
|
||||
|
|
@ -177,8 +190,9 @@ function startTimer(duration) {
|
|||
let timer = duration,
|
||||
minutes, seconds;
|
||||
const display = document.querySelector('#booking-timer');
|
||||
const submitBtn = document.querySelector('.btn-action-submit'); // Pastikan class tombol benar
|
||||
|
||||
// Reset timer lama jika ada
|
||||
isTimeUp = false; // Reset status setiap timer mulai
|
||||
if (countdown) clearInterval(countdown);
|
||||
|
||||
countdown = setInterval(function() {
|
||||
|
|
@ -192,8 +206,25 @@ function startTimer(duration) {
|
|||
|
||||
if (--timer < 0) {
|
||||
clearInterval(countdown);
|
||||
Swal.fire('Waktu Habis!', 'Sesi booking Anda telah berakhir. Silakan pilih ulang.', 'warning')
|
||||
.then(() => location.reload());
|
||||
isTimeUp = true; // Kunci status
|
||||
|
||||
// Matikan tombol submit secara visual
|
||||
if (submitBtn) {
|
||||
submitBtn.disabled = true;
|
||||
submitBtn.classList.add('disabled');
|
||||
}
|
||||
|
||||
// Tampilkan alert
|
||||
Swal.fire({
|
||||
title: 'Waktu Habis!',
|
||||
text: 'Sesi booking Anda telah berakhir. Silakan pilih ulang jadwal.',
|
||||
icon: 'warning',
|
||||
confirmButtonText: 'Oke',
|
||||
confirmButtonColor: '#3B8181',
|
||||
allowOutsideClick: false
|
||||
}).then(() => {
|
||||
location.reload(); // Refresh halaman
|
||||
});
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
|
@ -271,8 +302,29 @@ function checkSlotAvailability(tgl) {
|
|||
});
|
||||
|
||||
// 2. Kosongkan input jam (karena user ganti tanggal)
|
||||
document.getElementById('input_jam_awal').value = "";
|
||||
document.getElementById('input_jam_mulai').value = "";
|
||||
const sekarang = new Date();
|
||||
const jamSekarang = sekarang.getHours();
|
||||
const menitSekarang = sekarang.getMinutes();
|
||||
const totalMenitSekarang = (jamSekarang * 60) + menitSekarang;
|
||||
|
||||
// Format tanggal hari ini (YYYY-MM-DD) untuk perbandingan
|
||||
const hariIni = sekarang.toISOString().split('T')[0];
|
||||
|
||||
// 3. LOGIKA JAM LEWAT: Jika tanggal yang diklik adalah hari ini
|
||||
if (tgl === hariIni) {
|
||||
allTimeBtns.forEach(btn => {
|
||||
const [jamBtn, menitBtn] = btn.dataset.time.split(':').map(Number);
|
||||
const totalMenitBtn = (jamBtn * 60) + menitBtn;
|
||||
|
||||
// Jika waktu pada tombol sudah lewat dari waktu sekarang
|
||||
if (totalMenitBtn <= totalMenitSekarang) {
|
||||
btn.classList.add('disabled', 'full');
|
||||
btn.disabled = true;
|
||||
btn.title = "Waktu sudah terlewat";
|
||||
}
|
||||
});
|
||||
}
|
||||
// 3. Panggil Server
|
||||
fetch(`/cek-slot-foto?tanggal=${tgl}`)
|
||||
.then(res => res.json())
|
||||
|
|
@ -300,7 +352,7 @@ function checkSlotAvailability(tgl) {
|
|||
// ============================================================
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
|
||||
// 1. Jalankan Listener Tanggal (Untuk kalender awal)
|
||||
// 1. Jalankan Listener Tanggal (Untuk kalender mulai)
|
||||
reinitDateListeners();
|
||||
|
||||
// 2. Pasang Listener Tombol Jam (Cukup sekali)
|
||||
|
|
@ -318,7 +370,7 @@ function checkSlotAvailability(tgl) {
|
|||
|
||||
// Logic: Simpan Jam
|
||||
const startTime = this.dataset.time;
|
||||
document.getElementById('input_jam_awal').value = startTime;
|
||||
document.getElementById('input_jam_mulai').value = startTime;
|
||||
|
||||
// Logic: Hitung Jam Selesai
|
||||
const endTime = calculateEndTime(startTime, durasiPaket);
|
||||
|
|
@ -326,15 +378,24 @@ function checkSlotAvailability(tgl) {
|
|||
});
|
||||
});
|
||||
|
||||
// 3. Validasi Submit Form
|
||||
// 3. Validasi Submit Form
|
||||
const bookingForm = document.getElementById('form-booking');
|
||||
if (bookingForm) {
|
||||
bookingForm.addEventListener('submit', function(e) {
|
||||
const tgl = document.getElementById('input_tgl_booking').value;
|
||||
const jam = document.getElementById('input_jam_awal').value;
|
||||
const jam = document.getElementById('input_jam_mulai').value;
|
||||
|
||||
// CEK APAKAH WAKTU HABIS
|
||||
if (isTimeUp) {
|
||||
e.preventDefault();
|
||||
Swal.fire('Maaf!', 'Waktu booking sudah habis, halaman akan dimuat ulang.', 'error')
|
||||
.then(() => location.reload());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!tgl || !jam) {
|
||||
e.preventDefault(); // Stop kirim
|
||||
e.preventDefault();
|
||||
Swal.fire({
|
||||
title: 'Jadwal Belum Dipilih!',
|
||||
text: 'Silakan pilih tanggal dan jam pemotretan terlebih dahulu.',
|
||||
|
|
|
|||
|
|
@ -11,15 +11,6 @@
|
|||
<h2 class="formulirfoto-page-title">Formulir Pemesanan</h2>
|
||||
</div>
|
||||
</div>
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<form action="{{ route('transaksi.foto.store') }}" method="POST" enctype="multipart/form-data">
|
||||
@csrf
|
||||
{{-- DATA DARI HALAMAN SEBELUMNYA (WAJIB ADA) --}}
|
||||
|
|
@ -41,22 +32,41 @@
|
|||
|
||||
<div>
|
||||
<label class="form-label small">Nama Lengkap</label>
|
||||
<input type="text" name="nama" class="form-control formulirfoto-input"
|
||||
placeholder="Masukkan Nama Lengkap" required>
|
||||
<input type="text" name="nama"
|
||||
class="form-control formulirbuket-input @error('nama') is-invalid @enderror"
|
||||
placeholder="Masukkan Nama Lengkap" value="{{ old('nama') }}">
|
||||
|
||||
@error('nama')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="form-label small">Nomor WhatsApp</label>
|
||||
<input type="number" name="no_wa" class="form-control formulirfoto-input"
|
||||
placeholder="Masukkan Nomor WhatsApp" required>
|
||||
<label class="form-label small">Nomor WhatsApp</label>
|
||||
<input type="number" name="no_wa"
|
||||
class="form-control formulirbuket-input @error('no_wa') is-invalid @enderror"
|
||||
placeholder="Masukkan Nomor WhatsApp" value="{{ old('no_wa') }}">
|
||||
@error('no_wa')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<span class="timer-alert-text">Selesaikan pembayaran dalam</span>
|
||||
<span class="timer-badge" id="countdown-timer">00:58:58</span>
|
||||
@php
|
||||
// Hitung format jam:menit:detik langsung di HTML agar tidak flash 58:58
|
||||
$jam = floor($sisaWaktu / 3600);
|
||||
$menit = floor(($sisaWaktu / 60) % 60);
|
||||
$detik = $sisaWaktu % 60;
|
||||
$tampilanAwal = sprintf('%02d:%02d:%02d', $jam, $menit, $detik);
|
||||
@endphp
|
||||
|
||||
<span class="timer-badge" id="countdown-timer">{{ $tampilanAwal }}</span>
|
||||
{{-- <span class="timer-badge" id="countdown-timer"></span> --}}
|
||||
</div>
|
||||
<h4 class="formulirfoto-section-title mb-3">Informasi Pembayaran</h4>
|
||||
|
||||
|
|
@ -64,9 +74,14 @@
|
|||
<div class="summary-item">
|
||||
<span class="summary-label">Jadwal Booking:</span>
|
||||
<div class="summary-row">
|
||||
<span
|
||||
class="summary-subtext">{{ \Carbon\Carbon::parse($request->tgl_booking)->translatedFormat('l, d F Y') }}</span>
|
||||
<span class="summary-value">{{ $request->jam_mulai }}</span>
|
||||
{{-- Menampilkan Hari, Tanggal Bulan Tahun dalam Bahasa Indonesia --}}
|
||||
<span class="summary-subtext">
|
||||
{{ \Carbon\Carbon::parse($request->tgl_booking)->translatedFormat('l, d F Y') }}
|
||||
</span>
|
||||
|
||||
{{-- Menampilkan Jam di bagian kanan --}}
|
||||
<span class="summary-value">
|
||||
{{ $request->jam_mulai }} - {{ $jamSelesaiBaru }} WIB </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="summary-item">
|
||||
|
|
@ -100,18 +115,18 @@ class="summary-subtext">{{ \Carbon\Carbon::parse($request->tgl_booking)->transla
|
|||
<p class="small mb-2">Transfer ke Rekening Berikut:</p>
|
||||
<div class="row g-2 mb-4">
|
||||
<div class="col-6">
|
||||
<div class="formulirfoto-bank-card">
|
||||
<div class="formulirbuket-bank-card">
|
||||
<div class="d-flex align-items-center gap-2 mb-2">
|
||||
<i class="bi bi-bank text-secondary"></i> <span class="small">BCA</span>
|
||||
<i class="bi bi-bank text-secondary"></i> <span class="small ">BCA</span>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<div>
|
||||
<p class="mb-0 small bank-num">1234567890</p>
|
||||
<p class="mb-0 x-small bank-name">a.n Flo.do</p>
|
||||
<p class="mb-0 small bank-num">6860305231</p>
|
||||
<p class="mb-0 x-small bank-name">a.n Deborah Febryana</p>
|
||||
</div>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary py-1 px-3 x-small btn-copy"
|
||||
data-clipboard-text="1234567890">salin</button>
|
||||
class="btn btn-sm btn-outline-secondary py-1 px-2 btn-copy"
|
||||
data-clipboard-text="6860305231" style="font-size: 12px">salin</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -122,12 +137,44 @@ class="btn btn-sm btn-outline-secondary py-1 px-3 x-small btn-copy"
|
|||
</div>
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<div>
|
||||
<p class="mb-0 small bank-num">0987654321</p>
|
||||
<p class="mb-0 x-small bank-name">a.n Flo.do</p>
|
||||
<p class="mb-0 small bank-num">005601002337563</p>
|
||||
<p class="mb-0 x-small bank-name">a.n Deborah Febryana</p>
|
||||
</div>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary py-1 px-3 x-small btn-copy"
|
||||
data-clipboard-text="0987654321">salin</button>
|
||||
class="btn btn-sm btn-outline-secondary py-1 px-2 btn-copy"
|
||||
data-clipboard-text="005601002337563" style="font-size: 12px">salin</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="formulirbuket-bank-card">
|
||||
<div class="d-flex align-items-center gap-2 mb-2">
|
||||
<i class="bi bi-bank text-secondary"></i> <span class="small ">ShopeePay</span>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<div>
|
||||
<p class="mb-0 small bank-num">082133958469</p>
|
||||
<p class="mb-0 x-small bank-name">a.n Deborah Febryana</p>
|
||||
</div>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary py-1 px-2 btn-copy"
|
||||
data-clipboard-text="082133958469" style="font-size: 12px">salin</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="formulirbuket-bank-card">
|
||||
<div class="d-flex align-items-center gap-2 mb-2">
|
||||
<i class="bi bi-bank text-secondary"></i> <span class="small ">Dana</span>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<div>
|
||||
<p class="mb-0 small bank-num">082133958469</p>
|
||||
<p class="mb-0 x-small bank-name">a.n Deborah Febryana</p>
|
||||
</div>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary py-1 px-2 btn-copy"
|
||||
data-clipboard-text="082133958469" style="font-size: 12px">salin</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -135,16 +182,18 @@ class="btn btn-sm btn-outline-secondary py-1 px-3 x-small btn-copy"
|
|||
|
||||
<p class="small mb-2">Upload Bukti Pembayaran</p>
|
||||
<div class="formulirbuket-upload-area mb-2 text-center position-relative">
|
||||
<input type="file"
|
||||
class="position-absolute w-100 h-100 opacity-0 start-0 top-0 cursor-pointer"
|
||||
name="bukti_bayar" accept="image/*" id="fileUpload">
|
||||
<input type="file" name="bukti_bayar" accept="image/*"
|
||||
class="position-absolute w-100 h-100 opacity-0 start-0 top-0 cursor-pointer @error('bukti_bayar') is-invalid @enderror"
|
||||
id="fileUpload" value="{{ old('bukti_bayar') }}">
|
||||
<div class="py-4" id="uploadPlaceholder">
|
||||
<i class="bi bi-file-earmark-arrow-up fs-3 text-secondary"></i>
|
||||
<p class="mb-0 small text-muted">Upload Bukti Pembayaran</p>
|
||||
<p class="mb-0 x-small text-muted">Max. 2 MB</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@error('bukti_bayar')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
<p class="x-small text-muted mb-4">
|
||||
*Note: Pastikan pembayaran sudah dilakukan sebelum mengunggah bukti, ya!
|
||||
</p>
|
||||
|
|
@ -165,11 +214,14 @@ class="btn formulirfoto-btn-cancel flex-fill">Batalkan</a> --}}
|
|||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 1. VARIABLE PENGUNCI
|
||||
let isPaymentTimeUp = false; //
|
||||
const submitBtn = document.querySelector('.formulirfoto-btn-submit');
|
||||
|
||||
// 1. FITUR COPY NO REK
|
||||
// 2. FITUR COPY NO REK (Tetap sama)
|
||||
document.querySelectorAll('.btn-copy').forEach(btn => {
|
||||
btn.addEventListener('click', function() {
|
||||
navigator.clipboard.writeText(this.getAttribute('data-clipboard-text'));
|
||||
|
|
@ -181,7 +233,7 @@ class="btn formulirfoto-btn-cancel flex-fill">Batalkan</a> --}}
|
|||
});
|
||||
});
|
||||
|
||||
// 2. FITUR PREVIEW UPLOAD
|
||||
// 3. FITUR PREVIEW UPLOAD (Tetap sama)
|
||||
const fileInput = document.getElementById('fileUpload');
|
||||
if (fileInput) {
|
||||
fileInput.addEventListener('change', function() {
|
||||
|
|
@ -193,14 +245,13 @@ class="btn formulirfoto-btn-cancel flex-fill">Batalkan</a> --}}
|
|||
<p class="mb-0 small text-success fw-bold">${file.name}</p>
|
||||
<p class="mb-0 x-small text-muted">Klik lagi untuk ganti file</p>
|
||||
`;
|
||||
// Optional: Kasih border hijau biar makin jelas
|
||||
placeholder.parentElement.style.borderColor = "#198754";
|
||||
placeholder.parentElement.style.backgroundColor = "#e8f5e9";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 3. FITUR TIMER MUNDUR
|
||||
// 4. FITUR TIMER MUNDUR
|
||||
let sisaDetik = {{ $sisaWaktu }};
|
||||
let display = document.querySelector('#countdown-timer');
|
||||
|
||||
|
|
@ -221,9 +272,24 @@ function startTimer(duration) {
|
|||
|
||||
if (--timer < 0) {
|
||||
clearInterval(interval);
|
||||
alert("Waktu pembayaran habis!");
|
||||
window.location.href =
|
||||
"{{ route('booking.cancel') }}"; // Redirect ke cancel agar session bersih
|
||||
isPaymentTimeUp = true; // Kunci status
|
||||
|
||||
if (submitBtn) {
|
||||
submitBtn.disabled = true; // Matikan tombol secara visual
|
||||
submitBtn.classList.add('disabled');
|
||||
}
|
||||
|
||||
// Gunakan SweetAlert agar pasti muncul
|
||||
Swal.fire({
|
||||
title: 'Waktu Pembayaran Habis!',
|
||||
text: 'Maaf, batas waktu pembayaran Anda telah berakhir, jadwal booking akan dibatalkan.',
|
||||
confirmButtonColor: '#3B8181',
|
||||
icon: 'error',
|
||||
confirmButtonText: 'Kembali ke Katalog',
|
||||
allowOutsideClick: false
|
||||
}).then(() => {
|
||||
window.location.href = "{{ route('booking.cancel') }}";
|
||||
});
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
|
@ -232,9 +298,19 @@ function startTimer(duration) {
|
|||
if (sisaDetik > 0) {
|
||||
startTimer(sisaDetik);
|
||||
} else {
|
||||
// Jaga-jaga kalau sisaDetik 0 pas load (redirect langsung)
|
||||
window.location.href = "{{ route('booking.cancel') }}";
|
||||
}
|
||||
|
||||
// 5. VALIDASI TAMBAHAN SAAT SUBMIT (Mencegah submit jika waktu habis)
|
||||
const form = document.querySelector('form');
|
||||
if (form) {
|
||||
form.addEventListener('submit', function(e) {
|
||||
if (isPaymentTimeUp) {
|
||||
e.preventDefault(); // Stop kirim data
|
||||
Swal.fire('Gagal!', 'Waktu pembayaran sudah habis.', 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
|
|||
Loading…
Reference in New Issue