@@ -947,23 +948,22 @@
},
};
+ function safeVal(selector) {
+ const val = $(selector).val();
+ return (val === undefined || val === null || val === '') ? null : val;
+ }
+
const VNew = {
activate: function() {
VNew.event();
},
event: function() {
- // modal
+ // Tampilkan modal saat tombol diklik
$('#btnMdlNewVhc').on('click', function() {
$('#mdlNewVhc').modal('show');
});
- $('#mdlNewVhc').on('shown.bs.modal', function() {
- });
- $('#btnSubmitNewVhc').on('click', function() {
- let data = VNew.getData();
- VNew.submitData(data);
- });
- // datepicker
+ // Datepicker untuk tanggal
$('#add-stnk-exp').datepicker({
format: 'dd-mm-yyyy',
startDate: moment().add(1, 'days').toDate(),
@@ -973,118 +973,139 @@
startDate: moment().add(1, 'days').toDate(),
endDate: moment().add(6, 'month').toDate(),
});
- // $('#add-kirexp').datepicker({
- // format: 'dd-mm-yyyy',
- // startDate: moment().add(1, 'days').toDate(),
- // endDate: moment().add(1, 'year').toDate(),
- // });
- // file
+
+ // Reset input file saat diklik
$('#add-fvhc-file').on('click', function() {
- $('#add-fvhc-file').val('');
+ $(this).val('');
});
$('#add-stnk-file').on('click', function() {
- $('#add-stnk-file').val('');
+ $(this).val('');
+ });
+
+ // Submit form
+ $('#btnSubmitNewVhc').on('click', function() {
+ let data = VNew.getData();
+ VNew.submitData(data);
});
},
getData: function() {
- let data = {};
- data.fvhc_base64 = $('#add-fvhc-base64').val().replace(/^data:image\/(png|jpg|jpeg);base64,/, '');
- data.vhc_name = $('#add-vhcname').val();
- // data.device_id = $('#add-deviceid').val();
- // data.simcard = $('#add-simcard').val();
+ let data = new FormData();
+
+ data.append('vhc_name', safeVal('#add-vhcname'));
+
let selected_device = $('#add-deviceid :selected');
- data.dvc_id = selected_device.val();
- data.device_id = selected_device.data('device_id');
- data.simcard = selected_device.data('simcard');
- data.brand_id = $('#add-brand').val();
- data.type_id = $('#add-type').val();
- data.model_id = $('#add-model').val();
+ data.append('dvc_id', safeVal('#add-deviceid') ?? 0);
+ data.append('device_id', selected_device.data('device_id') ?? 0);
+ data.append('simcard', selected_device.data('simcard') ?? 0);
- data.speed_limit = $('#add-speedlimit').val();
- data.fuel_capacity = $('#add-fuelcapacity').val();
- data.fuel_drop_treshold = $('#add-fueldroptreshold').val();
- data.max_pressure = $('#add-maxpressure').val();
+ data.append('brand_id', safeVal('#add-brand'));
+ data.append('type_id', safeVal('#add-type'));
+ data.append('model_id', safeVal('#add-model') ?? 0);
+ data.append('speed_limit', safeVal('#add-speedlimit'));
+ data.append('fuel_capacity', safeVal('#add-fuelcapacity') ?? 0);
+ data.append('fuel_drop_treshold', safeVal('#add-fueldroptreshold') ?? 0);
+ data.append('max_pressure', safeVal('#add-maxpressure') ?? 0);
+ data.append('d_current', safeVal('#add-dcurrent') ?? 0);
+ data.append('d_assign', safeVal('#add-dassign') ?? 0);
- data.d_current = $('#add-dcurrent').val();
- data.d_assign = $('#add-dassign').val();
+ // tanggal juga sama, pakai safeVal dan cek dulu
+ const stnkExp = safeVal('#add-stnk-exp');
+ if (stnkExp) data.append('stnk_exp', stnkExp.split('-').reverse().join('-'));
+ else data.append('stnk_exp', null);
- data.stnk_base64 = $('#add-stnk-base64').val().replace(/^data:image\/(png|jpg|jpeg);base64,/, '');
- data.stnk_exp = $('#add-stnk-exp').val().split('-').reverse().join('-');
- data.nopol1 = $('#add-nopol1').val();
- // data.nopol2 = $('#add-nopol2').val();
- // data.nopol3 = $('#add-nopol3').val();
+ data.append('nopol1', safeVal('#add-nopol1'));
+ data.append('stnk_vyear', safeVal('#add-stnk-vyear'));
+ data.append('cc', safeVal('#add-stnk-cc'));
+ data.append('vin', safeVal('#add-stnk-vin'));
+ data.append('en', safeVal('#add-stnk-en'));
+ data.append('color', safeVal('#add-stnk-color'));
+ data.append('fuel_type', safeVal('#add-stnk-fueltype'));
+ data.append('tnkb_color', safeVal('#add-stnk-tnkbcolor'));
+ data.append('regis_year', safeVal('#add-stnk-regisyear'));
- data.stnk_vyear = $('#add-stnk-vyear').val();
- data.cc = $('#add-stnk-cc').val();
- data.vin = $('#add-stnk-vin').val();
- data.en = $('#add-stnk-en').val();
- data.color = $('#add-stnk-color').val();
- data.fuel_type = $('#add-stnk-fueltype').val();
- data.tnkb_color = $('#add-stnk-tnkbcolor').val();
- data.regis_year = $('#add-stnk-regisyear').val();
- data.tax_exp = $('#add-stnk-taxexp').val().split('-').reverse().join('-');
- // data.kir_exp = $('#add-kirexp').val().split('-').reverse().join('-');
+ const taxExp = safeVal('#add-stnk-taxexp');
+ if (taxExp) data.append('tax_exp', taxExp.split('-').reverse().join('-'));
+ else data.append('tax_exp', null);
+
+ data.append('vendor_id', safeVal('#add-vendor_id'));
+
+ // File input (cek ada file atau tidak)
+ const fvhcFile = $('#add-fvhc-file')[0].files[0];
+ if (fvhcFile) data.append('fvhc_file', fvhcFile);
+
+ const stnkFile = $('#add-stnk-file')[0].files[0];
+ if (stnkFile) data.append('stnk_file', stnkFile);
- data.vendor_id = $('#add-vendor_id').val();
return data;
},
- submitData: async function(data) {
+ submitData: function(data) {
return new Promise((resolve, reject) => {
- if (typeof $('#btnSubmitNewVhc').attr('disabed') != 'undefined') {
+ if ($('#btnSubmitNewVhc').is('[disabled]')) {
resolve({
type: 'fail'
});
return false;
}
- $('#btnSubmitNewVhc').attr('disabed', true);
- $('#btnSubmitNewVhc').addClass('d-none');
+
+
+ $('#btnSubmitNewVhc').attr('disabled', true).addClass('d-none');
$('#add-btnSubmitNewVhc').removeClass('d-none');
+
$.ajax({
url: "{{ route('api_add_vehicle') }}",
method: 'POST',
crossDomain: true,
- processData: true,
+ processData: false,
+ contentType: false,
headers: {
'x-api-key': Helper.getCookie('_trtk'),
'x-csrf-token': $('meta[name="csrf-token"]').attr('content'),
},
data: data,
- success: (data, textStatus, jqXHR) => {
- $('#btnSubmitNewVhc').removeAttr('disabed');
- $('#btnSubmitNewVhc').removeClass('d-none');
+ success: (res) => {
+ $('#btnSubmitNewVhc').removeAttr('disabled').removeClass('d-none');
$('#add-btnSubmitNewVhc').addClass('d-none');
- if (data.meta.type != 'success') {
+
+ if (res.meta?.type !== 'success') {
+ Helper.toast('Warning', 'just now', res.meta?.message || 'Failed to add vehicle');
resolve({
type: 'fail'
});
- Helper.toast('Warning', 'just now', data.meta.message);
- return false;
+ return;
}
- Helper.toast('Success', 'just now', 'success add new vehicle');
+
+ Helper.toast('Success', 'just now', 'Successfully added vehicle');
$('#mdlNewVhc').modal('hide');
DTable.reload();
+
resolve({
type: 'success'
});
},
- error: (jqXHR, textStatus, error) => {
- $('#btnSubmitNewVhc').removeAttr('disabed');
- $('#btnSubmitNewVhc').removeClass('d-none');
+ error: (jqXHR) => {
+ $('#btnSubmitNewVhc').removeAttr('disabled').removeClass('d-none');
$('#add-btnSubmitNewVhc').addClass('d-none');
+
if (jqXHR.status >= 500) {
- Helper.toast('Error', 'just now', 'Please try again');
+ Helper.toast('Error', 'just now', 'Server error occurred, please try again');
} else {
- Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
- .message);
+ Helper.toast('Error', 'just now', jqXHR.responseJSON?.meta?.message || 'Error during submission');
}
+
resolve({
type: 'error'
});
}
- })
- })
- },
- }
+ });
+ });
+ }
+ };
+
+
+ $(function() {
+ VNew.activate();
+ });
+
const VEdt = {
activate: function() {