$(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('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('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); } }); }); });