You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

338 lines
12 KiB
PHTML

<script>
function typeInput(a){
var ct = div().class('form-group');
ct.child(
el('label').html(a.title)
)
var inpt = el('input').type(a.type).class('form-control form-d').name(a.name).id(a.name).hold('...')
if(a.readonly == true){
inpt.attr('readonly', 'true')
}
ct.child(
inpt
)
var dv = div().class('col-sm-'+a.row).child(ct)
return dv.get();
}
function typeSelect(a){
var ct = div().class('form-group');
ct.child(
el('label').html(a.title)
)
var inpt = el('select').class('form-control form-d').name(a.name).id(a.name)
if(a.readonly == true){
inpt.attr('readonly', 'true')
}
inpt.child(
el('option').val('').html('Pilih Data')
)
a.data.forEach(function(dt){
inpt.child(
el('option').val(dt.id).html(dt.id+'-'+dt.text)
)
})
ct.child(
inpt
)
var dv = div().class('col-sm-'+a.row).child(ct)
return dv.get();
}
var formMaker = objectForm.data.map(function(e){
var obj = null;
if(e.type == 'text'){
obj = typeInput(e);
}else if(e.type == 'date'){
obj = typeInput(e);
}else if(e.type == 'select'){
obj = typeSelect(e);
}
return obj;
});
formMaker.forEach(function(elemen){
_id(objectForm.idform).appendChild(elemen)
});
(function dtButtons(){
var dt = document.querySelector('.dt-buttons');
if(dt == null){
setTimeout(() => {
dtButtons();
}, 500);
}else{
Array.from(document.querySelector('.dt-buttons').children).forEach(function(e){
_id('listreportmenu').appendChild(
el('a').addModule('actbut', e).click(function(){
this.actbut.click();
}).href('#').class('dropdown-item').html(e.innerHTML).get()
)
});
document.querySelector('.panel-head-menu').appendChild(
el('input').type('search').keyup(function(){
table.search( this.value ).draw();
}).load(function(e){
e.el.addEventListener('search', function(){
table.search( this.value ).draw();
},false)
}).class('form-control form-search').hold('search...').get()
)
}
})();
var table = $('#tabledata').DataTable( {
dom: 'Bfrtip',
scrollX: true,
scrollCollapse: true,
paging: true,
"lengthChange": true,
"lengthMenu": [[25, 50, 100, 500, 1000],[25, 50, 100, 500, "Max"]],
"pageLength": 50,
"columnDefs": [
{ "width": "59px", "targets": 0 }
],
fixedColumns: {
left: 1
},
buttons: [
'copy',
{
title: 'Data '+(function(){
var titleX = '';
if(objectForm.title != undefined){
titleX = objectForm.title();
}
return titleX;
})(),
extend: 'excel',
exportOptions: {
columns: [ 1, 2 ]
}
},
{
title: 'Data '+(function(){
var titleX = '';
if(objectForm.title != undefined){
titleX = objectForm.title();
}
return titleX;
})(),
extend: 'pdf',
download: 'open',
messageBottom: null,
exportOptions: {
columns: [ 1, 2 ]
}
},
{
title: 'Data '+(function(){
var titleX = '';
if(objectForm.title != undefined){
titleX = objectForm.title();
}
return titleX;
})(),
extend: 'print',
exportOptions: {
columns: [ 1, 2 ]
},
messageBottom: null
}
]
} );
function _load(){
table.clear();
var g = cssLoader();
var qr = objectForm.queryTemp;
qr1 = qr.split('||')[0].replace(/\{select\}/g, objectForm.dataSelect);
qr2 = qr.split('||')[1];
var ty = qr1 + qr2;
AuditDevQuery(ty, function(r){
r.forEach(function(d,i){
var dat = [];
dat.push(`<div>
<button data-id="${i}" data-kode="${d[objectForm.kode]}" class="btn btn-sm btn-warning edit"><i class="icon-note"></i></button>
<button data-id="${i}" data-kode="${d[objectForm.kode]}" class="btn btn-sm btn-danger hapus"><i class="icon-trash"></i></button>
</div>`)
objectForm.view.forEach(function(v){
dat.push(d[v])
})
table.row.add(dat)
})
g.remove();
table.draw(true)
})
}
_load();
$(document).on('click','button.new', function(){
$("#modala").modal('show')
var titleX = '';
if(objectForm.title != undefined){
titleX = objectForm.title();
}
$(".title-f").html('Tambah Baru '+titleX)
var qr = objectForm.queryTemp;
qr1 = qr.split('||')[0].replace(/\{select\}/g, objectForm.dataSelect);
Array.from(document.querySelectorAll('.form-d')).forEach(function(j){
j.value = '';
});
if(objectForm.newkode != ''){
var k = cssLoader();
AuditDevQuery(objectForm.newkode, function(a){
k.remove();
globalThis['kode'].parent.value = a[0].kode;
})
}
})
var editActive;
var dataSelect;
$(document).on('click','.edit', function(){
var kode = this.getAttribute('data-kode');
var id = this.getAttribute('data-id');
editActive = id;
var cek = `SELECT * FROM ${objectForm.table} WHERE ${objectForm.kode} = '${kode}'`;
var t = cssLoader();
AuditDevQuery(cek, function(r){
if(r.length > 0){
t.remove()
r = r[0];
dataSelect = r;
var titleX = '';
if(objectForm.title != undefined){
titleX = objectForm.title();
}
$(".title-f").html('Update Data '+titleX)
Object.keys(r).forEach(function(jj){
if(globalThis[jj] != undefined && globalThis[jj] != ''){
globalThis[jj].parent.value = r[jj];
}
})
$("#modala").modal('show')
_id('kode').value = r.kode;
_id('nama').value = r.nama;
}else{
dataSelect = null;
t.remove();
Swal('Info', 'data ini telah dihapus', 'info')
setTimeout(() => {
_load();
}, 500);
}
})
})
$(document).on('click','.hapus', function(event){
var kode = this.getAttribute('data-kode');
event.preventDefault()
Swal({
title: "Apa kamu yakin?",
text: "Data ini akan di hapus dari system!",
type: "warning",
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Ya, Saya yakin!',
cancelButtonText: "Tidak, Batalkan!",
closeOnConfirm: false,
closeOnCancel: false
},
function(isConfirm){
if (isConfirm){
swal("Cancelled", "Your imaginary file is safe :)", "error");
} else {
swal("Cancelled", "Your imaginary file is safe :)", "error");
e.preventDefault();
}
});
setTimeout(() => {
document.querySelector('.swal2-cancel').focus()
}, 100);
document.querySelector('.swal2-confirm').addEventListener('click', function(){
AuditDevQuery(`DELETE FROM ${objectForm.table} WHERE ${objectForm.kode} = '${kode}'`, function(){
_load();
})
},false)
})
$(document).on('click','.simpan', function(){
var type = document.querySelector('.title-f').innerHTML;
if(type.indexOf('Tambah Baru') != -1){
var gt = Array.from(document.querySelectorAll('.form-d')).map(function(j){
var t = {};
t['title'] = j.parentNode.querySelector('label').innerHTML;
t['name'] = j.name;
t['text'] = j.value;
return t;
});
objectForm.validasiForm.forEach(function(t){
if(globalThis[t].parent.value === ''){
Swal('Warning', globalThis[t].parent.parentNode.querySelector('label').innerHTML+' Tidak Boleh Kosong', 'warning');
throw globalThis[t].parent.parentNode.querySelector('label').innerHTML+' Tidak Boleh Kosong';
}
});
var insert = `INSERT INTO ${objectForm.table} (${gt.map(function(n){
return n.name
}).join(',')}) values (${gt.map(function(cj){
return `"${cj.text.replace(/\"/g,"\\\"")}"`;
})})`;
var cek = `SELECT * FROM ${objectForm.table} WHERE ${objectForm.kode} = '${globalThis[objectForm.kode].parent.value}'`;
AuditDevQuery(cek, function(r){
if(r.length == 0){
AuditDevQuery(insert, function(){
$("#modala").modal('toggle')
swal("Success", "Data telah ditambahkan", "success");
_load();
})
}else{
Swal('Warning', 'kode sudah digunakan', 'warning');
}
})
}else{
var gt = Array.from(document.querySelectorAll('.form-d')).map(function(j){
var t = {};
t['title'] = j.parentNode.querySelector('label').innerHTML;
t['name'] = j.name;
t['text'] = j.value;
return t;
});
objectForm.validasiForm.forEach(function(t){
if(globalThis[t].parent.value === ''){
Swal('Warning', globalThis[t].parent.parentNode.querySelector('label').innerHTML+' Tidak Boleh Kosong', 'warning');
throw globalThis[t].parent.parentNode.querySelector('label').innerHTML+' Tidak Boleh Kosong';
}
});
var kode = _id(objectForm.kode).value;
var update = `UPDATE ${objectForm.table} SET ${gt.map(function(df){
return ` ${df.name} = "${df.text.replace(/\"/g, '\\\"')}" `
}).join(',')} WHERE ${objectForm.kode} = '${kode}'`;
var y = cssLoader()
AuditDevQuery(update,function(){
y.remove();
$("#modala").modal('toggle')
var dat = [];
dat.push(`<div>
<button data-id="${editActive}" data-kode="${kode}" class="btn btn-sm btn-warning edit"><i class="icon-note"></i></button>
<button data-id="${editActive}" data-kode="${kode}" class="btn btn-sm btn-danger hapus"><i class="icon-trash"></i></button>
</div>`);
objectForm.view.forEach(function(v){
dat.push(globalThis[v].parent.value)
})
table.row(editActive).data(dat).draw( false )
});
}
})
</script>