/******************************************************************* PHP Class : /Controller/Inv/JualController Description : Transaksi Penjualan Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : May 22th, 2010. Last Modified : September 27th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. *******************************************************************/ var JualJS = { PHP: '', KODE: '', index(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() { var _isi = new String('
 
'); 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(acell) { FoniaJS.closeWindow(this.winBTX); $('#No_Jual').val(acell[0]); this.data_query('master', 'view'); }, tx_tambah() { this.data_query('master', 'add'); }, tx_ubah() { 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() { if (!$('#No_Jual').val()){ FoniaJS.showError("Silakan masukkan Nomor Transaksi !"); return; } FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus '+$('#No_Jual').val()+' ?', () => { 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(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() { FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', () => { this.data_query('master', 'cancel'); $('#No_Jual').val(''); }, 'danger'); }, tx_print(prt) { if ($('#No_Jual').val()) { let cetak = new Printer('report/nota/jual') .addParam("Nomor_Cetak", $('#No_Jual').val()); if (prt) cetak.doPrint(); else cetak.doPreview(); return; } FoniaJS.showError("Silakan masukkan Nomor Transaksi !"); }, tx_print_pos() { if ($('#No_Jual').val()) { new PrinterPos('report/nota/pos') .addParam("Nomor_Cetak", $('#No_Jual').val()) .exec(); return; } FoniaJS.showError("Silakan masukkan Nomor Transaksi !"); }, pending_brow() { this.winBPending = FoniaJS.showWindow('BPending', 'Daftar Pending Penjualan', '
 
', 'xl', '', () => this.data_query('brow-pending')); }, pending_select(acell) { FoniaJS.closeWindow(this.winBPending); $('#No_Jual').val(acell[0]); this.data_query('master', 'pending-edit'); }, pending_delete(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() { var _isi = new String('
 
'); 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(acell) { FoniaJS.closeWindow(this.winBMember); $('#MemberID').val(acell[0]); $('#Grup_MemberID').val(acell[1]); $('#Nama_Member').val(acell[3]); this.update_Piutang(); }, produk_brow() { if ($('#MemberID').val()==0){ FoniaJS.showError("Silakan masukkan Nama Member !"); return; } var _isi = new String('
 
'); 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(acell) { FoniaJS.closeWindow(this.winBProduk); this.detail_produk('insert', 0, acell[0], acell[1], acell[2]); }, detail_produk(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(acell) { this.detail_produk('update', acell[0], acell[1], acell[2], acell[3]); }, detail_hapus(acell) { FoniaJS.showConfirm('Konfirmasi', 'Hapus item "'+acell[5]+'" ?', () => { new Request_JSF({ url: this.PHP + '/table_detail', sendParam: ['mode','mode_detail=delete','No_Jual','ID='+acell[0]], onSuccess: () => $('#Nama_Produk').focus() }).send(); }, 'danger'); }, detail_simpan() { if (FoniaJS.StrToFloat($('#Disk_Persen').val()) >= 100) { FoniaJS.showInfo('Nilai Diskon diluar batas !'); return false; } new Request_JSF({ 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(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, 'breakFocus': true}); $('#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_JSF({ url: this.PHP + '/table_detail', sendParam: ['mode','No_Jual'] }).send(); } else if (tipe=="brow-tx"){ new Request_JSF({ url: this.PHP + '/brow_tx', sendParam: ['Cari_TX'], onSuccess: () => FoniaJS.setFocus('#Cari_TX') }).send(); } else if (tipe=="brow-pending"){ new Request_JSF({ url: this.PHP + '/brow_pending', }).send(); } else if (tipe=="brow-member"){ new Request_JSF({ url: this.PHP + '/brow_member', sendParam: ['Cari_Member'], onSuccess: () => FoniaJS.setFocus('#Cari_Member') }).send(); } else if (tipe=="brow-produk"){ new Request_JSF({ url: this.PHP + '/brow_produk', sendParam: ['Cari_Produk','Grup_MemberID'], onSuccess: () => FoniaJS.setFocus('#Cari_Produk') }).send(); } }, Member_Comp(item) { $('#MemberID').val(item.value); $('#Grup_MemberID').val(item.data); JualJS.update_Piutang(); }, Produk_Comp(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_JSF({ 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', '
Barang tidak tersedia atau habis !
', 300, [{},{i:'butTutup'}], () => { $('#winPesan').find('#butTutup').click(() => $('#Nama_Produk').focus()).focus(); }); }*/ } $('#Nama_Produk').val('').focus(); }, update_Piutang() { new Request_JSF({ url: this.PHP + '/update_piutang', sendParam: ['MemberID'], onSuccess: () => FoniaJS.setFocus('#Nama_Produk') }).send(); }, Hitung_Detail(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)); } };