148 lines
5.7 KiB
JavaScript
148 lines
5.7 KiB
JavaScript
$(document).ready(function () {
|
|
|
|
// Pastikan setiap request AJAX non-GET membawa token CSRF terbaru.
|
|
// Mencegah 419 "CSRF token mismatch" walau ada call yang lupa kirim header.
|
|
$(document).ajaxSend(function (event, jqxhr, settings) {
|
|
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type || '')) {
|
|
jqxhr.setRequestHeader('X-CSRF-TOKEN', $('meta[name="csrf-token"]').attr('content'));
|
|
}
|
|
});
|
|
|
|
$.validator.addClassRules('no-spinner-time', {
|
|
required: true,
|
|
min: 1
|
|
});
|
|
|
|
$.validator.messages.min = "Nilai tidak boleh 0";
|
|
|
|
$('#show-tarif').validate({
|
|
errorClass: 'text-danger',
|
|
|
|
highlight: function(element) {
|
|
$(element).addClass('is-invalid');
|
|
},
|
|
|
|
unhighlight: function(element) {
|
|
$(element).removeClass('is-invalid');
|
|
},
|
|
|
|
errorPlacement: function(error, element) {
|
|
error.insertAfter(element);
|
|
}
|
|
});
|
|
|
|
$(document).on('click', '.vehicle-price', function () {
|
|
|
|
|
|
let btn = $(this);
|
|
let btnHtml = btn.html();
|
|
let id = btn.data('id');
|
|
let nama = btn.data('nama');
|
|
console.log(id);
|
|
|
|
btn.prop('disabled', true).html('<span class="spinner-border spinner-border-sm me-1"></span>Memuat...');
|
|
|
|
$.ajax({
|
|
url: '/setup/master/price/' + id,
|
|
type: 'GET',
|
|
success: function (r) { console.log(r);
|
|
$('#id_mobil').val(r.id_mobil);
|
|
$('.title').text('Ubah Tarif Kendaraan ' + nama);
|
|
$('#waktu_gratis').val(r.waktu_gratis); // waktu kurang dari n pertama
|
|
$('#tarif_period').val(r.tarif_period); // adalah
|
|
$('#frek_interval').val(r.frek_interval); // 1
|
|
$('#interval').val(r.interval); // X n menit pertama
|
|
$('#tarif_interval').val(r.tarif_interval); // adalah Rp.
|
|
$('#bayar_dimuka').val(r.bayar_dimuka).trigger('change');
|
|
$('#asuransi_incl').val(r.asuransi_incl);
|
|
$('#frek_waktu2').val(r.frek_waktu2); // waktu 1
|
|
$('#waktu2').val(r.waktu2); // xn menit berikutnya
|
|
$('#tarif2').val(r.tarif2); // adalah Rp.
|
|
$('#tarif').val(r.tarif); // tarif berikut nya
|
|
$('#waktu_tarif').val(r.waktu_tarif); // per n menit
|
|
$('#maksimum').val(r.maksimum);
|
|
$('#maksimum_mode').val(r.time_base == 1 ? 'hour' : 'day');
|
|
$('#maksimum_hour').val(r.time_base_maks || 24);
|
|
$('#maksimum_day_minute').val(r.min_per_hari || 0);
|
|
$('#maksimum_mode').trigger('change');
|
|
$('#denda').val(r.denda);
|
|
$('#denda_member').val(r.denda_member);
|
|
$('#denda_only_casual').prop('checked', Number(r.denda_only_casual) === 1);
|
|
$('#denda_only').prop('checked', Number(r.denda_only) === 1);
|
|
$('#asuransi_incl').val(r.asuransi_incl || 0);
|
|
bootstrap.Tab.getOrCreateInstance(document.querySelector('#modal-vehicle .nav-link[href="#tarif"]')).show();
|
|
},
|
|
error: function (xhr) {
|
|
Swal.fire({icon: 'error', title: 'Gagal memuat tarif', text: xhr.responseJSON?.message || 'Data tarif tidak ditemukan.'});
|
|
},
|
|
complete: function () {
|
|
btn.prop('disabled', false).html(btnHtml);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#maksimum_mode').on('change', function() {
|
|
let mode = $(this).val();
|
|
if (mode === 'hour') {
|
|
$('#maksimum_hour').show();
|
|
$('.maks_cond_day').hide();
|
|
$('#maksimum_day_minute').hide();
|
|
} else {
|
|
$('#maksimum_hour').hide();
|
|
$('.maks_cond_day').show();
|
|
$('#maksimum_day_minute').show();
|
|
}
|
|
});
|
|
|
|
$('.simpan').on('click', function () {
|
|
|
|
if (!$('#show-tarif').valid()) {
|
|
return false;
|
|
}
|
|
|
|
let id = $('#id_mobil').val();
|
|
if (!id) {
|
|
Swal.fire({icon: 'warning', title: 'ID kendaraan kosong', text: 'Tutup modal lalu klik tombol Tarif lagi.'});
|
|
return false;
|
|
}
|
|
|
|
let vehicleRate = $('#show-tarif').serialize();
|
|
|
|
let url = $(this).data('url');
|
|
url = url.replace(':id', encodeURIComponent(id));
|
|
console.log(url);
|
|
|
|
const saveBtn = $(this);
|
|
const saveHtml = saveBtn.html();
|
|
saveBtn.prop('disabled', true).html('<span class="spinner-border spinner-border-sm me-1"></span>Menyimpan...');
|
|
|
|
$.ajax({
|
|
url: url,
|
|
type: 'PUT',
|
|
headers: {
|
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
|
},
|
|
data: vehicleRate,
|
|
success: function(r) {
|
|
if (!r.status) {
|
|
Swal.fire({icon: 'info', title: r.message || 'Tidak ada perubahan data'});
|
|
return;
|
|
}
|
|
$('#modal-vehicle').modal('hide');
|
|
Swal.fire({icon: 'success', title: 'Tarif diperbarui', timer: 1500, showConfirmButton: false});
|
|
},
|
|
error: function(xhr) {
|
|
if (xhr.status === 419) {
|
|
Swal.fire({icon: 'warning', title: 'Sesi berakhir', text: 'Token CSRF kedaluwarsa. Halaman akan dimuat ulang untuk token baru.', confirmButtonText: 'Muat ulang'}).then(() => window.location.reload());
|
|
return;
|
|
}
|
|
Swal.fire({icon: 'error', title: 'Gagal memperbarui tarif', text: xhr.responseJSON?.message || 'Silakan periksa kembali data tarif.'});
|
|
},
|
|
complete: function() {
|
|
saveBtn.prop('disabled', false).html(saveHtml);
|
|
}
|
|
});
|
|
});
|
|
|
|
});
|