Files

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);
}
});
});
});