403 lines
18 KiB
JavaScript
403 lines
18 KiB
JavaScript
/*******************************************************************
|
|
|
|
PHP Class : /Controller/Inv/JualController
|
|
Description : Transaksi Penjualan
|
|
Created By : Siau Pheng ([email protected]).
|
|
Created Date : May 22th, 2010.
|
|
Last Modified : September 27th, 2026.
|
|
|
|
(c) 3FONIA Software; WWW.3FONIA.COM.
|
|
|
|
*******************************************************************/
|
|
|
|
var JualJS = {
|
|
PHP: '',
|
|
KODE: '',
|
|
|
|
index: function(q){
|
|
$('#butTambah').click(() => this.tx_tambah());
|
|
$('#butUbah').click(() => this.tx_ubah());
|
|
$('#butHapus').click(() => this.tx_hapus());
|
|
$('#butPendingBrow').click(() => this.pending_brow());
|
|
$('#butPendingSimpan').click(() => this.tx_simpan('pending'));
|
|
$('#butSimpan').click(() => this.tx_simpan());
|
|
$('#butBatal').click(() => this.tx_batal());
|
|
$('#printNota').click(() => this.tx_print());
|
|
$('#printPOS').click(() => this.tx_print_pos());
|
|
this.data_query('master', 'view', ((typeof(q)!=='undefined') ? q : ''));
|
|
},
|
|
|
|
tx_brow: function(){
|
|
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_TX" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divBrowTX"> </div>');
|
|
this.winBTX = FoniaJS.showWindow('BTX', 'Daftar Transaksi', _isi, 'xl', '', () => {
|
|
$('#winBTX')
|
|
.find('#Cari_TX').keydown((e) => {
|
|
var key = e.keyCode || e.which || 0;
|
|
if (key==13 && e.target.value!='') this.data_query('brow-tx');
|
|
}).end()
|
|
.find('#butSearch').click(() => this.data_query('brow-tx')).end()
|
|
.find('#butAll').click(() => {
|
|
$('#winBTX').find('#Cari_TX').val('');
|
|
this.data_query('brow-tx');
|
|
});
|
|
this.data_query('brow-tx');
|
|
});
|
|
},
|
|
|
|
tx_select: function(acell){
|
|
FoniaJS.closeWindow(this.winBTX);
|
|
$('#No_Jual').val(acell[0]);
|
|
this.data_query('master', 'view');
|
|
},
|
|
|
|
tx_tambah: function(){
|
|
this.data_query('master', 'add');
|
|
},
|
|
|
|
tx_ubah: function(){
|
|
if (!$('#No_Jual').val()){
|
|
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
|
return;
|
|
}
|
|
if (-1 !== $('#No_Jual').val().search(/JUAL/i)){
|
|
this.data_query('master', 'pending-edit')
|
|
return;
|
|
}
|
|
FoniaJS.showAuth(() => this.data_query('master', 'edit'), this, 'EDIT '+$('#No_Jual').val());
|
|
},
|
|
|
|
tx_hapus: function(){
|
|
if (!$('#No_Jual').val()){
|
|
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
|
return;
|
|
}
|
|
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <strong>'+$('#No_Jual').val()+'</strong> ?', () => {
|
|
FoniaJS.showAuth(() => {
|
|
new Request({
|
|
url: this.PHP + '/proses_delete',
|
|
sendParam: ['No_Jual','MemberID'],
|
|
onSuccess: (ajson) => {
|
|
if (ajson.status === true){
|
|
$('#No_Jual').val('');
|
|
this.data_query('master', 'view');
|
|
FoniaJS.showInfo('Proses hapus data sukses!');
|
|
} else {
|
|
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
|
}
|
|
}
|
|
}).send();
|
|
}, this, 'DELETE '+$('#No_Jual').val());
|
|
}, 'danger');
|
|
},
|
|
|
|
tx_simpan: function(mode){
|
|
if ($('#MemberID').val()==0){
|
|
FoniaJS.showError("Silakan masukkan Nama Member !");
|
|
return;
|
|
}
|
|
if (mode == 'pending'){
|
|
this.data_query('master', 'pending-save');
|
|
return;
|
|
}
|
|
this.data_query('master', 'save');
|
|
},
|
|
|
|
tx_batal: function(){
|
|
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', () => {
|
|
this.data_query('master', 'cancel');
|
|
$('#No_Jual').val('');
|
|
}, 'danger');
|
|
},
|
|
|
|
tx_print: function(prt){
|
|
if ($('#No_Jual').val()) {
|
|
var cetak = new Printer('report/nota/jual');
|
|
cetak.add_param("Nomor_Cetak", $('#No_Jual').val());
|
|
if (prt) cetak.doPrint(); else cetak.doPreview();
|
|
return;
|
|
}
|
|
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
|
},
|
|
|
|
tx_print_pos: function(){
|
|
if ($('#No_Jual').val()) {
|
|
var cetak = new PrinterPos('report/nota/pos');
|
|
cetak.add_param("Nomor_Cetak", $('#No_Jual').val());
|
|
cetak.exec();
|
|
return;
|
|
}
|
|
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
|
},
|
|
|
|
pending_brow: function(){
|
|
this.winBPending = FoniaJS.showWindow('BPending', 'Daftar Pending Penjualan', '<div id="divBrowPending"> </div>', 'xl', '', () => this.data_query('brow-pending'));
|
|
},
|
|
|
|
pending_select: function(acell){
|
|
FoniaJS.closeWindow(this.winBPending);
|
|
$('#No_Jual').val(acell[0]);
|
|
this.data_query('master', 'pending-edit');
|
|
},
|
|
|
|
pending_delete: function(acell){
|
|
FoniaJS.closeWindow(this.winBPending);
|
|
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus Transaksi Pending "'+acell[0]+'" ?', () => {
|
|
$('#No_Jual').val(acell[0]);
|
|
this.data_query('master', 'pending-delete');
|
|
}, 'danger');
|
|
},
|
|
|
|
member_brow: function(){
|
|
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Member" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divBrowMember"> </div>');
|
|
this.winBMember = FoniaJS.showWindow('BMember', 'Daftar Member', _isi, 'xl', '', () => {
|
|
$('#winBMember')
|
|
.find('#Cari_Member').keydown((e) => {
|
|
var key = e.keyCode || e.which || 0;
|
|
if (key == 13 && e.target.value != '') this.data_query('brow-member');
|
|
}).end()
|
|
.find('#butSearch').click(() => this.data_query('brow-member')).end()
|
|
.find('#butAll').click(() => {
|
|
$('#winBMember').find('#Cari_Member').val('');
|
|
this.data_query('brow-member');
|
|
});
|
|
this.data_query('brow-member');
|
|
});
|
|
},
|
|
|
|
member_select: function(acell){
|
|
FoniaJS.closeWindow(this.winBMember);
|
|
$('#MemberID').val(acell[0]);
|
|
$('#Grup_MemberID').val(acell[1]);
|
|
$('#Nama_Member').val(acell[3]);
|
|
this.update_Piutang();
|
|
},
|
|
|
|
produk_brow: function(){
|
|
if ($('#MemberID').val()==0){
|
|
FoniaJS.showError("Silakan masukkan Nama Member !");
|
|
return;
|
|
}
|
|
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Produk" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divBrowProduk"> </div>');
|
|
this.winBProduk = FoniaJS.showWindow('BProduk', 'Daftar Barang', _isi, 'xl', '', () => {
|
|
$('#winBProduk')
|
|
.find('#Cari_Produk').keydown((e) => {
|
|
var key = e.keyCode || e.which || 0;
|
|
if (key == 13 && e.target.value != '') this.data_query('brow-produk');
|
|
}).end()
|
|
.find('#butSearch').click(() => this.data_query('brow-produk')).end()
|
|
.find('#butAll').click(() => {
|
|
$('#winBProduk').find('#Cari_Produk').val('');
|
|
this.data_query('brow-produk');
|
|
});
|
|
this.data_query('brow-produk');
|
|
});
|
|
},
|
|
|
|
produk_select: function(acell){
|
|
FoniaJS.closeWindow(this.winBProduk);
|
|
this.detail_produk('insert', 0, acell[0], acell[1], acell[2]);
|
|
},
|
|
|
|
detail_produk: function(mode, ID, InvID, SatuanID, VarianID){
|
|
if ($('#MemberID').val()==0){
|
|
FoniaJS.showError("Silakan masukkan Nama Member !");
|
|
FoniaJS.setFocus('Nama_Member');
|
|
return;
|
|
}
|
|
new Request({
|
|
url: this.PHP + '/form_produk',
|
|
sendParam: ['mode','mode_detail='+mode,'No_Jual','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID,'VarianID='+VarianID,'Grup_MemberID'],
|
|
onSuccess: (ajson) => {
|
|
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', ajson.html, 'lg', [{},{i:'butBatal'},{i:'butWSimpan',v:'Simpan',c:'success'}], () => {
|
|
$('#winDetail')
|
|
.find('#butWSimpan').click(() => this.detail_simpan()).end()
|
|
.find('#butBatal').click(() => $('#Nama_Produk').focus()).end()
|
|
.find('#Qty').keyup((e) => {
|
|
this.Hitung_Detail(1);
|
|
if ((-1!==$.inArray(e.which, [13,9])) && parseInt(e.target.value)>0) FoniaJS.setFocus('#Disk_Rupiah');
|
|
}).end()
|
|
.find('#Disk_Rupiah').keyup((e) => {
|
|
this.Hitung_Detail(1);
|
|
if (e.which==13 && FoniaJS.StrToFloat($('#Qty').val())>0) this.detail_simpan();
|
|
}).end()
|
|
.find('#Disk_Persen').keyup((e) => {
|
|
this.Hitung_Detail(2);
|
|
if (13==e.which && FoniaJS.StrToFloat($('#Qty').val())>0) this.detail_simpan();
|
|
});
|
|
this.Hitung_Detail(1);
|
|
FoniaJS.setFocus('#Qty');
|
|
});
|
|
}
|
|
}).send();
|
|
},
|
|
|
|
detail_ubah: function(acell){
|
|
this.detail_produk('update', acell[0], acell[1], acell[2], acell[3]);
|
|
},
|
|
|
|
detail_hapus: function(acell){
|
|
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[5]+'"</strong> ?', () => {
|
|
new Request.JSONF({
|
|
url: this.PHP + '/table_detail',
|
|
sendParam: ['mode','mode_detail=delete','No_Jual','ID='+acell[0]],
|
|
onSuccess: () => $('#Nama_Produk').focus()
|
|
}).send();
|
|
}, 'danger');
|
|
},
|
|
|
|
detail_simpan: function(){
|
|
if (FoniaJS.StrToFloat($('#Disk_Persen').val()) >= 100) {
|
|
FoniaJS.showInfo('Nilai Diskon diluar batas !');
|
|
return false;
|
|
}
|
|
new Request.JSONF({
|
|
url: this.PHP + '/table_detail',
|
|
sendParam: ['mode','mode_detail','No_Jual','ID','InvID','SatuanID','VarianID','Qty','Harga_Beli','Harga_Jual','Disk_Rupiah','Disk_Persen'],
|
|
onSuccess: () => {
|
|
FoniaJS.closeWindow(this.winDetail);
|
|
$('#Nama_Produk').val('').focus();
|
|
}
|
|
}).send();
|
|
},
|
|
|
|
data_query: function(tipe, mode, kd_tx){
|
|
if (tipe=="master"){
|
|
mode = (mode) ? mode : '';
|
|
var sparam = ['mode='+mode,'No_Jual'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')];
|
|
if (-1 !== mode.search(/save/i)) sparam = ['mode='+mode,'No_Jual','Tgl_Jual','CabID','MemberID'];
|
|
new Request({
|
|
url: this.PHP + '/form_master',
|
|
sendParam: sparam,
|
|
onSuccess: (ajson) => {
|
|
$('#divTXMaster').html(ajson.html);
|
|
FoniaJS.AutoComplete('#Nama_Member', this.PHP + '/auto_member', [], {'selectFunc':this.Member_Comp});
|
|
FoniaJS.AutoComplete('#Nama_Produk', this.PHP + '/auto_produk', ['No_Jual','CabID','Grup_MemberID'], {'selectFunc':this.Produk_Comp});
|
|
$('#Nama_Produk').click(() => $('#Nama_Produk').select());
|
|
$('#POS_Qty').on({
|
|
keyup: (e) => {
|
|
(13 == e.which) && $('#Nama_Produk').focus();
|
|
},
|
|
blur: (e) => {
|
|
if (parseInt(e.target.value) == 0) e.target.value = '1.00';
|
|
},
|
|
click: () => $('#POS_Qty').select()
|
|
});
|
|
$('#No_Jual').keyup((e) =>{
|
|
if ((e.which || e.keyCode) == 13) {
|
|
if (($("#No_Jual")) && ($("#No_Jual").val() !== '')) this.data_query('master');
|
|
}
|
|
});
|
|
$('#butBrow').click(() => this.tx_brow());
|
|
$('#butBrowMember').click(() => this.member_brow());
|
|
$('#Nama_Member').click(() => $('#Nama_Member').select());
|
|
this.data_query('tabel-detail');
|
|
if ($.inArray($("#mode").val(),['add','edit']) !== -1) {
|
|
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
|
$('#butBrowMember').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
|
$('#butTambah').addClass('d-none');
|
|
$('#butUbah').addClass('d-none');
|
|
$('#butHapus').addClass('d-none');
|
|
$('#butPrint').addClass('d-none');
|
|
$('#butSimpan').removeClass('d-none');
|
|
$('#butBatal').removeClass('d-none');
|
|
$('#butPendingBrow').addClass('d-none');
|
|
$('#butPendingSimpan').addClass('d-none');
|
|
if (-1 !== $('#No_Jual').val().search(/JUAL/i)) $('#butPendingSimpan').removeClass('d-none');
|
|
if ($('#Nama_Member').val() === '') { FoniaJS.setFocus('#Nama_Member'); }
|
|
else FoniaJS.setFocus('#Nama_Produk');
|
|
} else {
|
|
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
|
$('#butBrowMember').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
|
$('#butTambah').removeClass('d-none');
|
|
$('#butUbah').removeClass('d-none');
|
|
$('#butHapus').removeClass('d-none');
|
|
$('#butPrint').removeClass('d-none');
|
|
$('#butSimpan').addClass('d-none');
|
|
$('#butBatal').addClass('d-none');
|
|
$('#butPendingBrow').removeClass('d-none');
|
|
$('#butPendingSimpan').addClass('d-none');
|
|
FoniaJS.setFocus('#No_Jual');
|
|
}
|
|
$('#butUbah').prop('disabled', ($('#Lunas').val()==1 ? true : false));
|
|
$('#butHapus').prop('disabled', ($('#Lunas').val()==1 ? true : false));
|
|
if (ajson.error) FoniaJS.showError(ajson.error);
|
|
}
|
|
}).send();
|
|
} else if (tipe=="tabel-detail"){
|
|
new Request.JSONF({
|
|
url: this.PHP + '/table_detail',
|
|
sendParam: ['mode','No_Jual']
|
|
}).send();
|
|
} else if (tipe=="brow-tx"){
|
|
new Request.JSONF({
|
|
url: this.PHP + '/brow_tx',
|
|
sendParam: ['Cari_TX'],
|
|
onSuccess: () => FoniaJS.setFocus('#Cari_TX')
|
|
}).send();
|
|
} else if (tipe=="brow-pending"){
|
|
new Request.JSONF({
|
|
url: this.PHP + '/brow_pending',
|
|
}).send();
|
|
} else if (tipe=="brow-member"){
|
|
new Request.JSONF({
|
|
url: this.PHP + '/brow_member',
|
|
sendParam: ['Cari_Member'],
|
|
onSuccess: () => FoniaJS.setFocus('#Cari_Member')
|
|
}).send();
|
|
} else if (tipe=="brow-produk"){
|
|
new Request.JSONF({
|
|
url: this.PHP + '/brow_produk',
|
|
sendParam: ['Cari_Produk','Grup_MemberID'],
|
|
onSuccess: () => FoniaJS.setFocus('#Cari_Produk')
|
|
}).send();
|
|
}
|
|
},
|
|
|
|
Member_Comp: function(item){
|
|
$('#MemberID').val(item.value);
|
|
$('#Grup_MemberID').val(item.data);
|
|
JualJS.update_Piutang();
|
|
},
|
|
|
|
Produk_Comp: function(item){
|
|
var _qty = FoniaJS.StrToFloat($('#POS_Qty').val());
|
|
var adata = item.data.split(':');
|
|
// M : Grup_Member
|
|
if (adata[0] === 'M') {
|
|
$('#MemberID').val(item.value);
|
|
$('#Nama_Member').val(item.text);
|
|
$('#Grup_MemberID').val(adata[1]);
|
|
} else {
|
|
// P : Satuan : Varian : Harga_Pokok : Harga_Jual : Stok
|
|
//todo: jika stok kosong tidak simpan !!
|
|
//if (parseInt(adata[5])>0 || _qty<0){
|
|
new Request.JSONF({
|
|
url: JualJS.PHP + '/table_detail',
|
|
sendParam: ['mode','mode_detail=insert','No_Jual','InvID='+item.value,'SatuanID='+adata[1],'VarianID='+adata[2],'Qty='+_qty,'Harga_Beli='+adata[3],'Harga_Jual='+adata[4]],
|
|
onSuccess: () => $('#POS_Qty').val('1.00')
|
|
}).send();
|
|
/*} else {
|
|
this.winPesan = FoniaJS.showWindow('Pesan', 'Informasi Barang', '<div class="fs-3 text-center text-danger">Barang tidak tersedia atau habis !</div>', 300, [{},{i:'butTutup'}], () => {
|
|
$('#winPesan').find('#butTutup').click(() => $('#Nama_Produk').focus()).focus();
|
|
});
|
|
}*/
|
|
}
|
|
$('#Nama_Produk').val('').focus();
|
|
},
|
|
|
|
update_Piutang: function(){
|
|
new Request.JSONF({
|
|
url: this.PHP + '/update_piutang',
|
|
sendParam: ['MemberID'],
|
|
onSuccess: () => FoniaJS.setFocus('#Nama_Produk')
|
|
}).send();
|
|
},
|
|
|
|
Hitung_Detail: function(tipe){
|
|
if (tipe==1) $('#Disk_Persen').val(FoniaJS.FloatToStr((FoniaJS.StrToFloat($('#Disk_Rupiah').val())*100) / FoniaJS.StrToFloat($('#Harga_Jual').val()), 2));
|
|
if (tipe==2) $('#Disk_Rupiah').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Harga_Jual').val()) * FoniaJS.StrToFloat($('#Disk_Persen').val()) * 0.01, 2));
|
|
$('#Jumlah').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Qty').val()) * (FoniaJS.StrToFloat($('#Harga_Jual').val()) - FoniaJS.StrToFloat($('#Disk_Rupiah').val())), 2));
|
|
}
|
|
|
|
};
|