first commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
cache/
|
||||
@@ -0,0 +1,22 @@
|
||||
# ROBINSON
|
||||
|
||||
Aplikasi Stok dan Penjualan POS
|
||||
|
||||
## Description
|
||||
|
||||
Copy of INVESA MAIN FRAME
|
||||
|
||||
## Authors
|
||||
|
||||
Developer dan programmer
|
||||
|
||||
[@siaupheng](mailto:[email protected])
|
||||
|
||||
## Version History
|
||||
|
||||
* 0.1
|
||||
* Initial Release
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed.
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/cfg/app.php
|
||||
Desc. : Konfigurasi Global Aplikasi
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : November 7th, 2009.
|
||||
Last Modified : September 24th, 2025.
|
||||
|
||||
(c) 2009 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/mysql.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
|
||||
if (($_SESSION['__WEB_APP']['APP_CODE'] ?? "")<>"1812803307") {
|
||||
foreach ($_SESSION as $_key => $_val) {
|
||||
if (substr($_key,0,5)=="__WEB") unset($_SESSION[$_key]);
|
||||
if (substr($_key,0,5)=="__APP") unset($_SESSION[$_key]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($_SESSION['__WEB_APP'])) {
|
||||
$real_path = str_replace("\\", "/", __DIR__);
|
||||
$real_path = str_replace("apps/cfg", "", $real_path);
|
||||
$web_path = str_replace($_SERVER['DOCUMENT_ROOT'], "/", $real_path);
|
||||
$web_path = str_replace("//", "/", $web_path);
|
||||
$real_path = str_replace("//", "/", $real_path);
|
||||
|
||||
$apps = [];
|
||||
$apps['APP_CODE'] = "1812803307";
|
||||
$apps['APP_NAME'] = "INVESA";
|
||||
$apps['APP_NAMES'] = "INVENTORY AND SALES SYSTEMS";
|
||||
$apps['APP_VER'] = "2.0";
|
||||
$apps['APP_UPDATED'] = "January 1st, 2026.";
|
||||
$apps['APP_SID'] = md5(time());
|
||||
$apps['APP_LOCALE'] = ['id'=>"Indonesia", 'en'=>"English"];
|
||||
$apps['DEF_LOCALE'] = "id";
|
||||
$apps['AUTH_OVER'] = false;
|
||||
$apps['AUTH_LEVEL'] = 1;
|
||||
$apps['USER_LEVEL'] = [0=>"Administrator", 1=>"Supervisor", 9=>"Operator"];
|
||||
$apps['USER_LOG'] = true;
|
||||
$apps['USE_QZTRAY'] = true;
|
||||
$apps['CREATOR_YEAR'] = "2012";
|
||||
$apps['CREATOR_NAME'] = "3FONIA Software";
|
||||
$apps['CREATOR_WEBSITE'] = "https://www.3fonia.com";
|
||||
$apps['WEB_PATH'] = $web_path;
|
||||
$apps['REAL_PATH'] = $real_path;
|
||||
$apps['MODULE_PATH'] = "../";
|
||||
$apps['PARENT_SUB'] = false;
|
||||
$apps['PARENT_CODE'] = "1812803307";
|
||||
$apps['PARENT_SITE'] = "http://192.168.1.200";
|
||||
$apps['SERVER_ID'] = "0";
|
||||
|
||||
$db->Query("SELECT * FROM app_config WHERE REG_ID='".$apps['APP_CODE']."' LIMIT 1");
|
||||
if ($db->Next()) $apps = array_merge($apps, $db->AllRow());
|
||||
if ($apps['APP_BUILD']<>"") $apps['APP_VER'] = $apps['APP_BUILD'];
|
||||
$_SESSION['__WEB_APP'] = $apps;
|
||||
}
|
||||
|
||||
if (!isset($_SESSION['__APP_INV'])) {
|
||||
$_SESSION['__APP_INV'] = [];
|
||||
$db->Query("SELECT * FROM inv_config WHERE REG_ID='".$_SESSION['__WEB_APP']['APP_CODE']."' LIMIT 1");
|
||||
if ($db->Next()) $_SESSION['__APP_INV'] = $db->AllRow();
|
||||
$db->Query("SELECT MON_ENABLE FROM disp_config WHERE REG_ID='".$_SESSION['__WEB_APP']['APP_CODE']."' LIMIT 1");
|
||||
if ($db->Next()) $_SESSION['__APP_INV'] = array_merge($_SESSION['__APP_INV'], $db->AllRow());
|
||||
}
|
||||
|
||||
if (file_exists(__DIR__."/../../../global.php")) {
|
||||
require(__DIR__."/../../../global.php");
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/cfg/assets.php
|
||||
Desc. : Konfigurasi Assets Aplikasi [css / js]
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : November 23rd, 2019.
|
||||
Last Modified : September 24th, 2025.
|
||||
|
||||
(c) 2019 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
$A_CSS = ["bootstrap/bootstrap.icon.css", "bootstrap/bootstrap.css"];
|
||||
$A_JS = ["jquery/jquery.js", "jquery/jquery.base64.js", "bootstrap/bootstrap.bundle.js", "fonia3.js"];
|
||||
|
||||
if (!user_logged()) {
|
||||
$A_JS[] = "jquery/jquery.backstretch.js";
|
||||
|
||||
} else {
|
||||
//$A_CSS[] = "coreui/coreui.chartjs.css";
|
||||
$A_CSS[] = "datatables/dataTables.bootstrap5.css";
|
||||
$A_CSS[] = "datatables/responsive.bootstrap5.css";
|
||||
$A_CSS[] = "datatables/scroller.bootstrap5.css";
|
||||
$A_CSS[] = "datatables/stateRestore.bootstrap5.css";
|
||||
$A_CSS[] = "select2/select2.css";
|
||||
$A_CSS[] = "select2/select2-bootstrap-5-theme.css";
|
||||
$A_CSS[] = "bootstrap/bootstrap.datepicker.css";
|
||||
//$A_CSS[] = "simplebar.css";
|
||||
//$A_CSS[] = "lightbox.css";
|
||||
//$A_CSS[] = "codemirror.css";
|
||||
//$A_CSS[] = "summernote-bs4.css";
|
||||
$A_CSS[] = "default.css";
|
||||
$A_CSS[] = "print.css";
|
||||
|
||||
$A_JS = [
|
||||
"jquery/jquery.js",
|
||||
"jquery/jquery.base64.js",
|
||||
"jquery/jquery.autosize.js",
|
||||
"jquery/jquery.maskedinput.js",
|
||||
"jquery/jquery.validate.js",
|
||||
"bootstrap/bootstrap.bundle.js",
|
||||
"bootstrap/bootstrap.datepicker.js",
|
||||
"bootstrap/bootstrap.autocomplete.js",
|
||||
"datatables/jquery.dataTables.js",
|
||||
"datatables/dataTables.bootstrap5.js",
|
||||
"datatables/dataTables.responsive.js",
|
||||
"datatables/responsive.bootstrap5.js",
|
||||
"datatables/dataTables.scroller.js",
|
||||
"datatables/dataTables.stateRestore.js",
|
||||
"datatables/stateRestore.bootstrap5.js",
|
||||
//"codemirror/codemirror.js",
|
||||
//"codemirror/xml.js",
|
||||
"moment.js",
|
||||
"select2/select2.js",
|
||||
"chart/chart.js",
|
||||
//"chart/chartjs-plugin-datalabels.js",
|
||||
//"simplebar.js",
|
||||
//"lightbox.js",
|
||||
//"summernote-bs4.js",
|
||||
"html5-qrcode.js",
|
||||
"fonia3.js",
|
||||
"print.js",
|
||||
"pdf.js",
|
||||
"export.js",
|
||||
//"simulator.js",
|
||||
"pole-display.js",
|
||||
"share.js"
|
||||
];
|
||||
|
||||
// add qz support
|
||||
if (($_SESSION['__WEB_APP']['USE_QZTRAY'] ?? false) == true) {
|
||||
$A_JS[] = "qz/qz-tray.js";
|
||||
$A_JS[] = "qz/qz-start.js";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/cfg/mysql.php
|
||||
Desc. : Konfigurasi Server MySQL
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : November 7th, 2009.
|
||||
Last Modified : January 1st, 2025.
|
||||
|
||||
(c) 2009 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
$APP_DATA = [
|
||||
'host' => "127.0.0.1",
|
||||
'port' => "3306",
|
||||
'user' => "invesa_robinson",
|
||||
'pwd' => "1nv3s4r0b1ns0n",
|
||||
'db' => "invesa_robinson",
|
||||
'sock' => ""
|
||||
];
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,88 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/disp/config.js
|
||||
Desc. : JS - Konfigurasi Display POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 4th, 2013.
|
||||
Last Modified : December 7th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var DISPConfigJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butBrow').click(function(){this.cab_brow();}.bind(this));
|
||||
$('#butUbah').click(function(){this.proses_edit();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.proses_save();}.bind(this));
|
||||
this.data_query('form-display');
|
||||
},
|
||||
|
||||
cab_brow: function(){
|
||||
var _isi = new String('<div id="divBrowCab"> </div>');
|
||||
this.winBCab = FoniaJS.showWindow('BCab', 'Daftar Cabang', _isi, 'lg', '', function(){
|
||||
this.data_query('brow-cabang');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
cab_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBCab);
|
||||
$('#REG_ID').val(acell[0]);
|
||||
this.data_query('form-display', 'view');
|
||||
},
|
||||
|
||||
proses_edit: function(){
|
||||
this.data_query('form-display', 'edit');
|
||||
this.load_port();
|
||||
},
|
||||
|
||||
proses_save: function(){
|
||||
this.data_query('form-display', 'save');
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=='form-display'){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=form-display','mode='+mode,'REG_ID','MON_ENABLE','Text_Run','Warna','Font','Promo_Idle','Promo_Durasi','POLE_ENABLE','POLE_PORT','POLE_START1','POLE_START2','POLE_END1','POLE_END2'],
|
||||
onSuccess: function(a){
|
||||
$('#divDisplay').html(a.html);
|
||||
$('#Nama_Cabang').val(a.Nama_Cabang);
|
||||
this.update_event();
|
||||
if (a.sukses) FoniaJS.showInfo('Konfigurasi display POS sukses disimpan!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=='brow-cabang'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-cabang']
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
update_event: function(){
|
||||
if ($.inArray($('#mode').val(), ['edit']) >= 0) {
|
||||
$('#butUbah').prop('disabled', true);
|
||||
$('#butSimpan').prop('disabled', false);
|
||||
} else {
|
||||
$('#butUbah').prop('disabled', false);
|
||||
$('#butSimpan').prop('disabled', true);
|
||||
}
|
||||
},
|
||||
|
||||
load_port: function(){
|
||||
var parent = this;
|
||||
qz.serial.findPorts().then(function(data){
|
||||
var _selport = $('#POLE_PORT').val();
|
||||
$('#POLE_PORT').empty();
|
||||
for (var i = 0; i < data.length; i++){
|
||||
$('<option/>', {value: data[i]}).text(data[i]).appendTo('#POLE_PORT');
|
||||
};
|
||||
$('#POLE_PORT').val(_selport);
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,107 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/disp/iklan.js
|
||||
Desc. : JS - Konfigurasi Display Iklan POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 15th, 2015.
|
||||
Last Modified : December 8th, 2025.
|
||||
|
||||
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var DISPIklanJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Iklan').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Iklan').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Iklan');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=promo-detail','mode_detail='+mode,'PromoID='+ID],
|
||||
onSuccess: function(ajson){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Informasi Iklan', ajson.html, 900, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_save();}.bind(this)).end()
|
||||
.find('#FileGambar').off('change').change(function(){
|
||||
var fd = new FormData(), files = $('#FileGambar')[0].files[0];
|
||||
fd.append('Gambar1', files);
|
||||
$.ajax({
|
||||
url: this.PHP+'?'+(FoniaJS.RequestParam(['data=upload-gambar','PromoID']).join('&')),
|
||||
type: 'post',
|
||||
data: fd,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(ares){
|
||||
if (ares.result != 0){
|
||||
FoniaJS.showInfo('Sukses upload file Gambar !');
|
||||
$('#PromoID').val(ares.PromoID);
|
||||
$('#imgPhoto').attr('src', this.PHP + '?data=image&PromoID=' + ares.PromoID + '&cq=' + $.now());
|
||||
} else {
|
||||
FoniaJS.showError(ares.message);
|
||||
}
|
||||
}.bind(this)
|
||||
});
|
||||
}.bind(this));
|
||||
$('#imgPhoto').attr('src', this.PHP + '?data=image&PromoID=' + $('#PromoID').val() + '&cq=' + $.now());
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','PromoID='+acell[0],'Cari_Iklan'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','PromoID','CabID','Tanggal','Info','Aktif','Cari_Iklan'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Iklan']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,107 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/disp/promo.js
|
||||
Desc. : JS - Konfigurasi Display Promo POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 15th, 2015.
|
||||
Last Modified : December 8th, 2025.
|
||||
|
||||
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var DISPPromoJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Promo').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Promo').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Promo');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=promo-detail','mode_detail='+mode,'PromoID='+ID],
|
||||
onSuccess: function(ajson){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Informasi Promo', ajson.html, 900, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_save();}.bind(this)).end()
|
||||
.find('#FileGambar').off('change').change(function(){
|
||||
var fd = new FormData(), files = $('#FileGambar')[0].files[0];
|
||||
fd.append('Gambar1', files);
|
||||
$.ajax({
|
||||
url: this.PHP+'?'+(FoniaJS.RequestParam(['data=upload-gambar','PromoID']).join('&')),
|
||||
type: 'post',
|
||||
data: fd,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(ares){
|
||||
if (ares.result != 0){
|
||||
FoniaJS.showInfo('Sukses upload file Gambar !');
|
||||
$('#PromoID').val(ares.PromoID);
|
||||
$('#imgPhoto').attr('src', this.PHP + '?data=image&PromoID=' + ares.PromoID + '&cq=' + $.now());
|
||||
} else {
|
||||
FoniaJS.showError(ares.message);
|
||||
}
|
||||
}.bind(this)
|
||||
});
|
||||
}.bind(this));
|
||||
$('#imgPhoto').attr('src', this.PHP + '?data=image&PromoID=' + $('#PromoID').val() + '&cq=' + $.now());
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','PromoID='+acell[0],'Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','PromoID','Tanggal','Info','Warna','Font','Aktif','Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Promo']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,82 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/gel/keluar.js
|
||||
Desc. : JS - Transaksi Pengeluaran Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 23rd, 2013.
|
||||
Last Modified : September 29th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var KasKeluarJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
//$('#butCari').click(function(){this.tx_brow();}.bind(this));
|
||||
this.data_query('tabel-detail', 'view', ((typeof(q)!=='undefined') ? q : ''));
|
||||
},
|
||||
|
||||
tx_detail: function(mode, No_Kas){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-tx','mode_detail='+mode,'No_Kas='+No_Kas],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Pengeluaran Kas', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.tx_simpan();}.bind(this)).end()
|
||||
.find('#Jumlah').keyup(function(e){
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (-1!==$.inArray(e.which, [13,9])) this.tx_simpan();
|
||||
}.bind(this));
|
||||
if (mode == 'insert') {
|
||||
$('#TXID').focus();
|
||||
} else {
|
||||
FoniaJS.setFocus('#Ket');
|
||||
}
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.tx_detail('insert', "");
|
||||
},
|
||||
|
||||
tx_ubah: function(acell){
|
||||
this.tx_detail('update', acell[0]);
|
||||
},
|
||||
|
||||
tx_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[0]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_Kas='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_Kas','Tgl_Kas','CabID','TXID','Ket','Jumlah'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode='+mode,'No_Kas'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')]
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,82 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/gel/terima.js
|
||||
Desc. : JS - Transaksi Penerimaan Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 23rd, 2013.
|
||||
Last Modified : September 29th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var KasTerimaJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
//$('#butCari').click(function(){this.tx_brow();}.bind(this));
|
||||
this.data_query('tabel-detail', 'view', ((typeof(q)!=='undefined') ? q : ''));
|
||||
},
|
||||
|
||||
tx_detail: function(mode, No_Kas){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-tx','mode_detail='+mode,'No_Kas='+No_Kas],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Penerimaan Kas', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.tx_simpan();}.bind(this)).end()
|
||||
.find('#Jumlah').keyup(function(e){
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (-1!==$.inArray(e.which, [13,9])) this.tx_simpan();
|
||||
}.bind(this));
|
||||
if (mode == 'insert') {
|
||||
$('#TXID').focus();
|
||||
} else {
|
||||
FoniaJS.setFocus('#Ket');
|
||||
}
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.tx_detail('insert', "");
|
||||
},
|
||||
|
||||
tx_ubah: function(acell){
|
||||
this.tx_detail('update', acell[0]);
|
||||
},
|
||||
|
||||
tx_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[0]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_Kas='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_Kas','Tgl_Kas','CabID','TXID','Ket','Jumlah'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode='+mode,'No_Kas'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')]
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,112 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/index.js
|
||||
Desc. : JS - Halaman Utama Desktop
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 24th, 2010.
|
||||
Last Modified : December 14th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
$(document).ready(function(){
|
||||
jQuery("#preloader").remove();
|
||||
loadSidebar();
|
||||
IndexJS.loading();
|
||||
setInterval(function(){
|
||||
if ($('#ChartB').length) return false;
|
||||
IndexJS.load_chart();
|
||||
}, 600000);
|
||||
if ('undefined' !== typeof qz) startConnection();
|
||||
});
|
||||
|
||||
var IndexJS = {
|
||||
|
||||
loading: function(){
|
||||
new Request.JSON({
|
||||
url: FoniaJS.WEB_PATH+'apps/php/index.php',
|
||||
sendParam: ['data=default'],
|
||||
onSuccess: function(ares){
|
||||
$('#pageContent').html(ares.content);
|
||||
$('#pageToolbarTop').html('');
|
||||
$('#pageToolbarBot').html('');
|
||||
this.load_chart();
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
load_chart: function(){
|
||||
this.data_query('chart-sale');
|
||||
this.data_query('chart-omzet');
|
||||
this.data_query('tabel-stok');
|
||||
},
|
||||
|
||||
data_query: function(tipe){
|
||||
if (tipe=="chart-sale"){
|
||||
new Request.JSON({
|
||||
url: FoniaJS.WEB_PATH+'apps/php/index.php',
|
||||
sendParam: ['data=chart-sale'],
|
||||
onSuccess: function(ares){
|
||||
if (ares.tipe=='chart') {
|
||||
var ctx = Chart.getChart('ChartA');
|
||||
if (typeof ctx !== 'undefined') ctx.destroy();
|
||||
var myChart = new Chart($('#ChartA'), {
|
||||
type: ares.chart.type,
|
||||
data: ares.chart.data,
|
||||
options: ares.chart.options
|
||||
});
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="chart-omzet"){
|
||||
new Request.JSON({
|
||||
url: FoniaJS.WEB_PATH+'apps/php/index.php',
|
||||
sendParam: ['data=chart-omzet'],
|
||||
onSuccess: function(ares){
|
||||
if (ares.tipe=='chart') {
|
||||
var ctx = Chart.getChart('ChartB');
|
||||
if (typeof ctx !== 'undefined') ctx.destroy();
|
||||
var myChart = new Chart($('#ChartB'), {
|
||||
type: ares.chart.type,
|
||||
data: ares.chart.data,
|
||||
options: ares.chart.options
|
||||
});
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="tabel-stok"){
|
||||
new Request.JSON({
|
||||
url: FoniaJS.WEB_PATH+'apps/php/index.php',
|
||||
sendParam: ['data=tabel-stok'],
|
||||
onSuccess: function(ares){
|
||||
if (ares.tipe=='tabel') {
|
||||
$('#tabelStok').html(ares.html);
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function loadSidebar(){
|
||||
const mySidebar = document.getElementById('sidebarMain');
|
||||
mySidebar.addEventListener('shown.bs.modal', () => {
|
||||
document.querySelectorAll('.sidebar .nav-link').forEach((element) => {
|
||||
element.addEventListener('click', (e) => {
|
||||
let nextEl = element.nextElementSibling, parentEl = element.parentElement;
|
||||
if (nextEl){
|
||||
e.preventDefault();
|
||||
let mycollapse = new bootstrap.Collapse(nextEl);
|
||||
if (nextEl.classList.contains('show')){
|
||||
mycollapse.hide();
|
||||
} else {
|
||||
mycollapse.show();
|
||||
var opened_submenu = parentEl.parentElement.querySelector('.submenu.show');
|
||||
if (opened_submenu){ new bootstrap.Collapse(opened_submenu); }
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,448 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/beli.js
|
||||
Desc. : JS - Transaksi Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var BeliJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
$('#butUbah').click(function(){this.tx_ubah();}.bind(this));
|
||||
$('#butHapus').click(function(){this.tx_hapus();}.bind(this));
|
||||
$('#butPendingBrow').click(function(){this.pending_brow();}.bind(this));
|
||||
$('#butPendingSimpan').click(function(){this.tx_simpan('pending');}.bind(this));
|
||||
$('#butSimpan').click(function(){this.tx_simpan();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
$('#butPrint').click(function(){this.tx_print();}.bind(this));
|
||||
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, 900, '', function(){
|
||||
$('#winBTX').find('#Cari_TX').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
$('#winBTX').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
$('#winBTX').find('#butAll').click(function(){
|
||||
$('#winBTX').find('#Cari_TX').val('');
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
this.data_query('brow-tx');
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
tx_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBTX);
|
||||
$('#No_Beli').val(acell[0]);
|
||||
this.data_query('master', 'view');
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.data_query('master', 'add');
|
||||
},
|
||||
|
||||
tx_ubah: function(){
|
||||
if (!$('#No_Beli').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
if (-1 !== $('#No_Beli').val().search(/BELI/i)){
|
||||
this.data_query('master', 'pending-edit')
|
||||
return;
|
||||
}
|
||||
FoniaJS.showAuth(function(){this.data_query('master', 'edit')}.bind(this), this, 'EDIT '+$('#No_Beli').val());
|
||||
},
|
||||
|
||||
tx_hapus: function(){
|
||||
if (!$('#No_Beli').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <strong>'+$('#No_Beli').val()+'</strong> ?', function(){
|
||||
FoniaJS.showAuth(function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=delete','No_Beli'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
$('#No_Beli').val('');
|
||||
this.data_query('master', 'view');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), this, 'DELETE '+$('#No_Beli').val());
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(mode){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
return;
|
||||
}
|
||||
if (mode == 'pending'){
|
||||
this.data_query('master', 'pending-save');
|
||||
return;
|
||||
}
|
||||
if (parseFloat($('#Total_Hutang').val())==0){
|
||||
this.total_show();
|
||||
return;
|
||||
}
|
||||
this.data_query('master', 'save');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', function(){
|
||||
this.data_query('master', 'cancel');
|
||||
$('#No_Beli').val('');
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_print: function(prt){
|
||||
if ($('#No_Beli').val()) {
|
||||
var cetak = new cPRINTER(FoniaJS.WEB_PATH+'apps/php/repo/nota.php');
|
||||
cetak.add_param("data", "nota-beli");
|
||||
cetak.add_param("Nomor_Cetak", $('#No_Beli').val());
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
return;
|
||||
}
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
},
|
||||
|
||||
pending_brow: function(){
|
||||
var _isi = new String('<div id="divBrowPending"> </div>');
|
||||
this.winBPending = FoniaJS.showWindow('BPending', 'Daftar Pending Pembelian', _isi, 900, '', function(){
|
||||
this.data_query('brow-pending');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
pending_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBPending);
|
||||
$('#No_Beli').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]+'" ?', function(){
|
||||
$('#No_Beli').val(acell[0]);
|
||||
this.data_query('master', 'pending-delete');
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
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><input type="hidden" id="Filter_Browse" value="all" /></div></div></div><div id="divBrowProduk"> </div>');
|
||||
this.winBProduk = FoniaJS.showWindow('BProduk', 'Daftar Barang', _isi, 900, '', function(){
|
||||
$('#winBProduk').find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butAll').click(function(){
|
||||
if ($('#Filter_Browse').val()=='filter') {
|
||||
$('#Filter_Browse').val('all');
|
||||
$('#butAll').html('Semua');
|
||||
} else {
|
||||
$('#Filter_Browse').val('filter');
|
||||
$('#butAll').html('Supplier');
|
||||
}
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
this.detail_produk('insert', 0, acell[0], acell[1]);
|
||||
},
|
||||
|
||||
detail_produk: function(mode, ID, InvID, SatuanID){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-produk','No_Beli','mode','mode_detail='+mode,'ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 700, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Beli','CabID','SupID'], this.Produk_Comp);
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end()
|
||||
.find('#Nama_Produk').on('click', function(){
|
||||
$('#Nama_Produk').select();
|
||||
}).end()
|
||||
.find('#Qty').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13 && parseInt(e.target.value)>0) FoniaJS.setFocus('#Harga_Beli');
|
||||
}.bind(this)).end()
|
||||
.find('#Harga_Beli').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13) FoniaJS.setFocus('#Disk_Rupiah');
|
||||
}.bind(this)).end()
|
||||
.find('#Disk_Rupiah').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13) FoniaJS.setFocus('#Disk_Persen1');
|
||||
}.bind(this)).end()
|
||||
.find('#Disk_Persen1').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13) FoniaJS.setFocus('#Disk_Persen2');
|
||||
}.bind(this)).end()
|
||||
.find('#Disk_Persen2').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13) FoniaJS.setFocus('#Disk_Persen3');
|
||||
}.bind(this)).end()
|
||||
.find('#Disk_Persen3').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13) FoniaJS.setFocus('#Disk_Persen4');
|
||||
}.bind(this)).end()
|
||||
.find('#Disk_Persen4').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13) FoniaJS.setFocus('#Disk_Persen5');
|
||||
}.bind(this)).end()
|
||||
.find('#Disk_Persen5').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13 && FoniaJS.StrToFloat($('#Jumlah').val())>0) this.detail_simpan();
|
||||
}.bind(this));
|
||||
if ($('#mode_detail').val() == 'insert' && $('#InvID').val() == 0) {
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
} else {
|
||||
this.Hitung_Detail();
|
||||
FoniaJS.setFocus('#Qty');
|
||||
}
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
return;
|
||||
}
|
||||
this.detail_produk('insert', 0, 0, 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_produk('update', acell[0], acell[1], acell[2]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[4]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_Beli','ID='+acell[0]],
|
||||
onSuccess: function(){
|
||||
var _obtn = $('button:contains("Total")');
|
||||
if (_obtn) _obtn.removeClass('btn-info').addClass('btn-secondary').attr('id','tombolTotal').html('Hutang : '+FoniaJS.FloatToStr($('#Total_Hutang').val(),2));
|
||||
}
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_simpan: function(){
|
||||
if (parseInt($('#InvID').val())==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
return;
|
||||
}
|
||||
var _mdetail = $('#mode_detail').val();
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_Beli','ID','InvID','SatuanID','Qty','Harga_Beli','Disk_Rupiah','Disk_Persen1','Disk_Persen2','Disk_Persen3','Disk_Persen4','Disk_Persen5'],
|
||||
onSuccess: function(){
|
||||
var _obtn = $('button:contains("Total")');
|
||||
if (_obtn) _obtn.removeClass('btn-info').addClass('btn-secondary').attr('id','tombolTotal').html('Hutang : '+FoniaJS.FloatToStr($('#Total_Hutang').val(),2));
|
||||
if (_mdetail=='insert') { this.detail_tambah(); } else FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
total_show: function(){
|
||||
if (['add','edit'].indexOf($('#mode').val()) == -1) return false;
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-total'],
|
||||
onSuccess: function(a){
|
||||
this.winTotal = FoniaJS.showWindow('Total', 'Informasi Transaksi', a.html, 500, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
var dhutang = parseFloat($('#Total_Hutang').val());
|
||||
if (dhutang==0) dhutang = parseFloat($('#Total_Beli').val());
|
||||
$('#winTotal')
|
||||
.find('#butWSimpan').click(function(){this.total_simpan();}.bind(this)).end()
|
||||
.find('#popTotal_Bulat').keyup(function(e) {
|
||||
this.Hitung_Total();
|
||||
if (e.which==13) $('#butWSimpan').focus();
|
||||
}.bind(this)).end()
|
||||
.find('#popTotal_Bulat').val($('#Total_Bulat').val()).end()
|
||||
.find('#popTotal_Hutang').val(dhutang);
|
||||
FoniaJS.setFocus('#popTotal_Bulat');
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
total_simpan: function(){
|
||||
$('#Total_Bulat').val(FoniaJS.StrToFloat($('#popTotal_Bulat').val()));
|
||||
$('#Total_Hutang').val(FoniaJS.StrToFloat($('#popTotal_Hutang').val()));
|
||||
$('#tombolTotal').html('<i class="bi-wallet2 me-1"></i>Hutang : '+FoniaJS.FloatToStr($('#Total_Hutang').val(),2));
|
||||
FoniaJS.closeWindow(this.winTotal);
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
mode = (mode) ? mode : '';
|
||||
var sparam = ['data=master','mode='+mode,'No_Beli'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')];
|
||||
if (-1 !== mode.search(/save/i)) sparam = ['data=master','mode='+mode,'No_Beli','Tgl_Beli','Tgl_Faktur','No_Faktur','CabID','SupID','Total_Bulat='+FoniaJS.StrToFloat($('#Total_Bulat').val()),'Total_Hutang='+FoniaJS.StrToFloat($('#Total_Hutang').val())];
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: sparam,
|
||||
onSuccess: function(ajson){
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
$('#No_Beli').keyup(function(e){
|
||||
if ((e.which || e.keyCode) == 13) {
|
||||
if (($("#No_Beli")) && ($("#No_Beli").val() !== '')) this.data_query('master');
|
||||
}
|
||||
}.bind(this));
|
||||
this.data_query('tabel-detail');
|
||||
if ($.inArray($("#mode").val(),['add','edit']) !== -1) {
|
||||
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
||||
$('#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_Beli').val().search(/BELI/i)) $('#butPendingSimpan').removeClass('d-none');
|
||||
} else {
|
||||
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
||||
$('#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');
|
||||
}
|
||||
$('#butUbah').prop('disabled', ($('#Lunas').val()==1 ? true : false));
|
||||
$('#butHapus').prop('disabled', ($('#Lunas').val()==1 ? true : false));
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
FoniaJS.setFocus('#No_Beli');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','No_Beli'],
|
||||
onSuccess: function(){
|
||||
var _obtn = $('button:contains("Total")');
|
||||
if (_obtn) _obtn.removeClass('btn-info').addClass('btn-secondary').attr('id','tombolTotal').html('<i class="bi-wallet2 me-1"></i>Hutang : '+FoniaJS.FloatToStr($('#Total_Hutang').val(),2));
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-tx"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-tx','Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-pending"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-pending','Cari_Pending'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Pending');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk','Filter_Browse','SupID'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#SatuanID').val(adata[0]);
|
||||
$('#Nama_Satuan').val(adata[1]);
|
||||
$('#Harga_Jual').val(FoniaJS.FloatToStr(adata[3]));
|
||||
BeliJS.update_Items();
|
||||
},
|
||||
|
||||
update_Items: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-item','InvID','SatuanID','SupID'],
|
||||
onSuccess: function(adata){
|
||||
if (!adata.data) {
|
||||
$('#Harga_Beli').val(FoniaJS.FloatToStr(adata.Harga_Beli));
|
||||
$('#Disk_Rupiah').val(adata.Disk_Rupiah);
|
||||
$('#Disk_Persen1').val(adata.Disk_Persen1);
|
||||
$('#Disk_Persen2').val(adata.Disk_Persen2);
|
||||
$('#Disk_Persen3').val(adata.Disk_Persen3);
|
||||
$('#Disk_Persen4').val(adata.Disk_Persen4);
|
||||
$('#Disk_Persen5').val(adata.Disk_Persen5);
|
||||
this.Hitung_Detail();
|
||||
}
|
||||
FoniaJS.setFocus('#Qty');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
Hitung_Detail: function(){
|
||||
var dqty = FoniaJS.StrToFloat($('#Qty').val());
|
||||
var dharga = FoniaJS.StrToFloat($('#Harga_Beli').val());
|
||||
var ddiskrp = FoniaJS.StrToFloat($('#Disk_Rupiah').val());
|
||||
var ddiskp1 = (100.0-FoniaJS.StrToFloat($('#Disk_Persen1').val())) / 100;
|
||||
var ddiskp2 = (100.0-FoniaJS.StrToFloat($('#Disk_Persen2').val())) / 100;
|
||||
var ddiskp3 = (100.0-FoniaJS.StrToFloat($('#Disk_Persen3').val())) / 100;
|
||||
var ddiskp4 = (100.0-FoniaJS.StrToFloat($('#Disk_Persen4').val())) / 100;
|
||||
var ddiskp5 = (100.0-FoniaJS.StrToFloat($('#Disk_Persen5').val())) / 100;
|
||||
var dtot = ((dharga - ddiskrp) * ddiskp1 * ddiskp2 * ddiskp3 * ddiskp4 * ddiskp5) * dqty;
|
||||
var ddis = (dharga * dqty) - dtot;
|
||||
$('#Total_Diskon').val(FoniaJS.FloatToStr(ddis,2));
|
||||
$('#Jumlah').val(FoniaJS.FloatToStr(dtot,2));
|
||||
},
|
||||
|
||||
Hitung_Total: function(){
|
||||
var dbeli = FoniaJS.StrToFloat($('#Total_Beli').val());
|
||||
var dbulat = FoniaJS.StrToFloat($('#popTotal_Bulat').val());
|
||||
$('#popTotal_Hutang').val(FoniaJS.FloatToStr(dbeli-dbulat,2));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,174 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/beli_lunas.js
|
||||
Desc. : JS - Transaksi Pembayaran Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 7th, 2011.
|
||||
Last Modified : October 8th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var BeliLunasJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butMode').click(function(){this.tx_mode();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
if (FoniaJS.User.Level>0) $('#butMode').hide();
|
||||
this.data_query('master', 'view', ((typeof(q)!=='undefined') ? q : ''));
|
||||
},
|
||||
|
||||
tx_mode: function(){
|
||||
var mode = ($('#Mode_Tampil').val()==1) ? 0 : 1;
|
||||
$('#Mode_Tampil').val(mode);
|
||||
$('#butMode').html('<i class="bi-list me-2"></i>'+(mode==1?'Semua':'Normal'));
|
||||
this.data_query('tabel-nota');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
$('#divTXNota').removeClass('d-none');
|
||||
$('#divDetailNota').addClass('d-none');
|
||||
$('#divDetailBayar').addClass('d-none');
|
||||
if (FoniaJS.User.Level==0) $('#butMode').removeClass('d-none');
|
||||
$('#butBatal').addClass('d-none');
|
||||
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
||||
$('#Nama_Sup').prop('disabled', false).removeClass('disabled').addClass('enabled');
|
||||
this.data_query('tabel-nota');
|
||||
},
|
||||
|
||||
sup_brow: function(){
|
||||
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Sup" 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="divBrowSup"> </div>');
|
||||
this.winBSup = FoniaJS.showWindow('BSup', 'Daftar Supplier', _isi, 900, '', function(){
|
||||
$('#winBSup').find('#Cari_Sup').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-sup');
|
||||
}.bind(this));
|
||||
$('#winBSup').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-sup');
|
||||
}.bind(this));
|
||||
$('#winBSup').find('#butAll').click(function(){
|
||||
$('#winBSup').find('#Cari_Sup').val('');
|
||||
this.data_query('brow-sup');
|
||||
}.bind(this));
|
||||
this.data_query('brow-sup');
|
||||
FoniaJS.setFocus('#Cari_Sup');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
sup_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBSup);
|
||||
$('#SupID').val(acell[0]);
|
||||
$('#Nama_Sup').val(acell[2]);
|
||||
$('#Alamat_Sup').val(acell[4]);
|
||||
this.data_query('tabel-nota');
|
||||
},
|
||||
|
||||
nota_select: function(acell){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-nota','No_Beli='+acell[1],'Tipe_Nota='+acell[0]],
|
||||
onSuccess: function(ajson){
|
||||
$('#divDetailNota').html(ajson.html);
|
||||
$('#divTXNota').addClass('d-none');
|
||||
$('#divDetailNota').removeClass('d-none');
|
||||
$('#divDetailBayar').removeClass('d-none');
|
||||
if (FoniaJS.User.Level==0) $('#butMode').addClass('d-none');
|
||||
$('#butBatal').removeClass('d-none');
|
||||
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
||||
$('#Nama_Sup').prop('disabled', true).removeClass('enabled').addClass('disabled');
|
||||
this.data_query('tabel-bayar');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
bayar_show: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-bayar','No_Beli','Total_Sisa'],
|
||||
onSuccess: function(ajson){
|
||||
this.winBayar = FoniaJS.showWindow('Bayar', 'Detail Pembayaran', ajson.html, 500, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winBayar').find('#butWSimpan').click(function(){this.bayar_simpan();}.bind(this));
|
||||
this.Hitung_Detail();
|
||||
FoniaJS.setFocus('#Total_Bayar');
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
bayar_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[1]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-bayar','mode_detail=delete','No_Beli','ID='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
bayar_simpan: function(){
|
||||
if ((FoniaJS.StrToFloat($('#Total_Bayar').val()) + FoniaJS.StrToFloat($('#Total_Potong').val())) > $('#Total_Sisa').val()){
|
||||
FoniaJS.showError("Jumlah pelunasan melebihi jumlah faktur!");
|
||||
return;
|
||||
}
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-bayar','mode_detail=insert','No_Beli','Tgl_Bayar','Total_Bayar','Total_Potong','Tipe_Nota'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winBayar);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=master','SupID'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')],
|
||||
onSuccess: function(ajson){
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
this.tx_batal();
|
||||
FoniaJS.AutoComplete('#Nama_Sup', this.PHP, ['data=auto-sup'], this.Sup_Comp);
|
||||
$('#Nama_Sup').on('click', function(){
|
||||
$('#Nama_Sup').select();
|
||||
});
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
}
|
||||
FoniaJS.setFocus('#Nama_Sup');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=="tabel-nota"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-nota','SupID','Mode_Tampil']
|
||||
}).send();
|
||||
} else if (tipe=="tabel-bayar"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-bayar','No_Beli','Lunas','Mode_Tampil']
|
||||
}).send();
|
||||
} else if (tipe=="brow-sup"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-sup','Cari_Sup'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Sup');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Sup_Comp: function(item){
|
||||
$('#SupID').val(item.value);
|
||||
$('#Alamat_Sup').val(item.data);
|
||||
BeliLunasJS.data_query('tabel-nota');
|
||||
},
|
||||
|
||||
Hitung_Detail: function(){
|
||||
$('#Temp_Sisa').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Temp_Total').val()) - FoniaJS.StrToFloat($('#Total_Bayar').val()) - FoniaJS.StrToFloat($('#Total_Potong').val()), 2));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,165 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/beli_lunas_sup.js
|
||||
Desc. : JS - Transaksi Pelunasan Pembelian / Supplier
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 7th, 2011.
|
||||
Last Modified : December 11th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var BeliLunasSupJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butSimpan').click(function(){this.tx_simpan();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
this.data_query('master', 'view', ((typeof(q)!=='undefined') ? q : ''));
|
||||
},
|
||||
|
||||
tx_simpan: function(mode){
|
||||
FoniaJS.showConfirm("Konfirmasi", "Yakin akan proses Pelunasan ?", function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=proses-bayar','SupID','Tgl_Bayar'],
|
||||
onSuccess: function(){
|
||||
this.data_query('tabel-nota');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'warning');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', function(){
|
||||
this.data_query('master', 'cancel');
|
||||
$('#SupID').val(0);
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
sup_brow: function(){
|
||||
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Sup" 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="divBrowSup"> </div>');
|
||||
this.winBSup = FoniaJS.showWindow('BSup', 'Daftar Supplier', _isi, 900, '', function(){
|
||||
$('#winBSup').find('#Cari_Sup').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-sup');
|
||||
}.bind(this));
|
||||
$('#winBSup').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-sup');
|
||||
}.bind(this));
|
||||
$('#winBSup').find('#butAll').click(function(){
|
||||
$('#winBSup').find('#Cari_Sup').val('');
|
||||
this.data_query('brow-sup');
|
||||
}.bind(this));
|
||||
this.data_query('brow-sup');
|
||||
FoniaJS.setFocus('#Cari_Sup');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
sup_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBSup);
|
||||
$('#SupID').val(acell[0]);
|
||||
$('#Nama_Sup').val(acell[2]);
|
||||
$('#Alamat_Sup').val(acell[4]);
|
||||
this.data_query('tabel-nota');
|
||||
},
|
||||
|
||||
bayar_tampil: function(acell){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-bayar'],
|
||||
onSuccess: function(ajson){
|
||||
this.winBayar = FoniaJS.showWindow('Bayar', 'Detail Pembayaran', ajson.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winBayar')
|
||||
.find('#butWSimpan').click(function(){this.bayar_simpan();}.bind(this)).end()
|
||||
.find('#Jumlah_Bayar').keyup(function(e) {this.Hitung_Bayar();}.bind(this)).end()
|
||||
.find('#Jumlah_Potong').keyup(function(e) {this.Hitung_Bayar();}.bind(this)).end()
|
||||
.find('#No_Beli').val(acell[0]).end()
|
||||
.find('#No_Faktur').val(acell[1]).end()
|
||||
.find('#Tgl_Faktur').val(acell[2]).end()
|
||||
.find('#Faktur').val(this.IDR_to_USD(acell[3])).end()
|
||||
.find('#SBayar').val(this.IDR_to_USD(acell[4])).end()
|
||||
.find('#Jumlah_Faktur').val(this.IDR_to_USD(acell[5])).end()
|
||||
.find('#Jumlah_Bayar').val(this.IDR_to_USD((acell[6]==0?acell[5]:acell[6]))).end()
|
||||
.find('#Jumlah_Potong').val(this.IDR_to_USD(acell[7]));
|
||||
this.Hitung_Bayar();
|
||||
FoniaJS.setFocus('#Jumlah_Bayar');
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
bayar_simpan: function(){
|
||||
var djumlah = FoniaJS.StrToFloat($('#Jumlah_Faktur').val());
|
||||
var dbayar = FoniaJS.StrToFloat($('#Jumlah_Bayar').val());
|
||||
var dpot = FoniaJS.StrToFloat($('#Jumlah_Potong').val());
|
||||
if (djumlah<(dbayar+dpot)) {
|
||||
FoniaJS.showError('Jumlah Pembayaran melebihi Jumlah Faktur !');
|
||||
return;
|
||||
}
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-nota','mode_detail','SupID','No_Beli','Jumlah_Bayar','Jumlah_Potong'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winBayar);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=master','mode='+mode,'SupID'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')],
|
||||
onSuccess: function(ajson){
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
FoniaJS.AutoComplete('#Nama_Sup', this.PHP, ['data=auto-sup'], this.Sup_Comp);
|
||||
$('#Nama_Sup').on('click', function(){
|
||||
$('#Nama_Sup').select();
|
||||
});
|
||||
$('#Disp_Bayar').addClass('border-success');
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
}
|
||||
this.data_query('tabel-nota');
|
||||
FoniaJS.setFocus('#Nama_Sup');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=="tabel-nota"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-nota','SupID']
|
||||
}).send();
|
||||
} else if (tipe=="brow-sup"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-sup','Cari_Sup'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Sup');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Sup_Comp: function(item){
|
||||
$('#SupID').val(item.value);
|
||||
$('#Alamat_Sup').val(item.data);
|
||||
BeliLunasSupJS.data_query('tabel-nota');
|
||||
},
|
||||
|
||||
Hitung_Bayar: function(){
|
||||
var djumlah = FoniaJS.StrToFloat($('#Jumlah_Faktur').val());
|
||||
var dbayar = FoniaJS.StrToFloat($('#Jumlah_Bayar').val());
|
||||
var dpot = FoniaJS.StrToFloat($('#Jumlah_Potong').val());
|
||||
$('#Sisa_Bayar').val(FoniaJS.FloatToStr(djumlah-dbayar-dpot, 2));
|
||||
},
|
||||
|
||||
IDR_to_USD: function(value){
|
||||
var nilai = value.replace(/\./g,'').replace(',','.');
|
||||
return FoniaJS.FloatToStr(parseFloat(nilai));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,290 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/beli_retur.js
|
||||
Desc. : JS - Transaksi Retur Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 10th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var BeliReturJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
$('#butUbah').click(function(){this.tx_ubah();}.bind(this));
|
||||
$('#butHapus').click(function(){this.tx_hapus();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.tx_simpan();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
$('#butPrint').click(function(){this.tx_print();}.bind(this));
|
||||
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, 900, '', function(){
|
||||
$('#winBTX')
|
||||
.find('#Cari_TX').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-tx');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBTX').find('#Cari_TX').val('');
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
this.data_query('brow-tx');
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
tx_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBTX);
|
||||
$('#No_Beli').val(acell[0]);
|
||||
this.data_query('master', 'view');
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.data_query('master', 'add');
|
||||
},
|
||||
|
||||
tx_ubah: function(){
|
||||
if (!$('#No_Beli').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showAuth(function(){this.data_query('master', 'edit')}.bind(this), this, 'EDIT '+$('#No_Beli').val());
|
||||
},
|
||||
|
||||
tx_hapus: function(){
|
||||
if (!$('#No_Beli').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <strong>'+$('#No_Beli').val()+'</strong> ?', function(){
|
||||
FoniaJS.showAuth(function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=delete','No_Beli'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
$('#No_Beli').val('');
|
||||
this.data_query('master', 'view');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), this, 'DELETE '+$('#No_Beli').val());
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
return;
|
||||
}
|
||||
this.data_query('master', 'save');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', function(){
|
||||
this.data_query('master', 'cancel');
|
||||
$('#No_Beli').val('');
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_print: function(prt){
|
||||
if ($('#No_Beli').val()) {
|
||||
var cetak = new cPRINTER(FoniaJS.WEB_PATH+'apps/php/repo/nota.php');
|
||||
cetak.add_param("data", "nota-beli-retur");
|
||||
cetak.add_param("Nomor_Cetak", $('#No_Beli').val());
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
return;
|
||||
}
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
this.detail_produk('insert', 0, acell[0], acell[1]);
|
||||
},
|
||||
|
||||
detail_produk: function(mode, ID, InvID, SatuanID){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-produk','mode','mode_detail='+mode,'No_Beli','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 700, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Beli','CabID','SupID'], {'selectFunc': BeliReturJS.Produk_Comp});
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end()
|
||||
.find('#Qty').keyup(function(e){
|
||||
this.Hitung_Detail();
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#Harga_Beli');
|
||||
}.bind(this)).end()
|
||||
.find('#Harga_Beli').keyup(function(e){
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13 && FoniaJS.StrToFloat($('#Jumlah').val())>0) this.detail_simpan();
|
||||
}.bind(this));
|
||||
if (mode == 'insert' && InvID == 0) {
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
} else {
|
||||
this.Hitung_Detail();
|
||||
FoniaJS.setFocus('#Qty');
|
||||
}
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
return;
|
||||
}
|
||||
this.detail_produk('insert', 0, 0, 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_produk('update', acell[0], acell[1], acell[2]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[2]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_Beli','ID='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_simpan: function(){
|
||||
if (parseInt($('#InvID').val())==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
return;
|
||||
}
|
||||
var _mdetail = $('#mode_detail').val();
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_Beli','CabID','ID','InvID','SatuanID','Qty','Harga_Beli'],
|
||||
onSuccess: function(){
|
||||
if (_mdetail=='insert') { this.detail_tambah(); } else FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
var sparam = ['data=master','mode='+mode,'No_Beli'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')];
|
||||
if ((mode ?? '')=='save') sparam = ['data=master','mode=save','No_Beli','Tgl_Beli','CabID','SupID','No_Faktur'];
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: sparam,
|
||||
onSuccess: function(ajson){
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
$('#No_Beli').keyup(function(e){
|
||||
if ((e.which || e.keyCode) == 13) {
|
||||
if (($("#No_Beli")) && ($("#No_Beli").val() !== '')) this.data_query('master');
|
||||
}
|
||||
}.bind(this));
|
||||
this.data_query('tabel-detail');
|
||||
if ($.inArray($("#mode").val(),['add','edit']) !== -1) {
|
||||
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
||||
$('#butTambah').addClass('d-none');
|
||||
$('#butUbah').addClass('d-none');
|
||||
$('#butHapus').addClass('d-none');
|
||||
$('#butPrint').addClass('d-none');
|
||||
$('#butSimpan').removeClass('d-none');
|
||||
$('#butBatal').removeClass('d-none');
|
||||
} else {
|
||||
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
||||
$('#butTambah').removeClass('d-none');
|
||||
$('#butUbah').removeClass('d-none');
|
||||
$('#butHapus').removeClass('d-none');
|
||||
$('#butPrint').removeClass('d-none');
|
||||
$('#butSimpan').addClass('d-none');
|
||||
$('#butBatal').addClass('d-none');
|
||||
}
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
FoniaJS.setFocus('#No_Beli');
|
||||
}
|
||||
if ($('#mode').val()=='print') this.tx_print(true);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','No_Beli']
|
||||
}).send();
|
||||
} else if (tipe=="brow-tx"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-tx','Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','CabID','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#SatuanID').val(adata[0]);
|
||||
$('#Nama_Satuan').val(adata[1]);
|
||||
$('#Harga_Beli').val(adata[2]);
|
||||
FoniaJS.setFocus('#Qty');
|
||||
},
|
||||
|
||||
Hitung_Detail: function(){
|
||||
$('#Jumlah').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Qty').val()) * FoniaJS.StrToFloat($('#Harga_Beli').val()), 2));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,113 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/cekharga.js
|
||||
Desc. : JS - Informasi Barang & Harga Jual
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 22nd, 2014.
|
||||
Last Modified : January 4th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var CekHargaJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
html5QrcodeScanner: null,
|
||||
|
||||
loading: function(){
|
||||
$('#butBrow').click(function(){this.produk_brow();}.bind(this));
|
||||
if (FoniaJS.WEB_MOBILE){
|
||||
//html5QrcodeScanner = new Html5QrcodeScanner('qr-reader', { fps: 10, qrbox: 250, rememberLastUsedCamera: true, supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_CAMERA] });
|
||||
html5QrcodeScanner = new Html5Qrcode('qr-reader');
|
||||
html5QrcodeScanner.start({ facingMode: 'environment' }, { fps: 10, qrbox: 250 }, CekHargaJS.ScanSukses);
|
||||
} else {
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk'], {'selectFunc': CekHargaJS.Produk_Comp});
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
}
|
||||
},
|
||||
/* release QRScanner
|
||||
if (FoniaJS.WEB_MOBILE){
|
||||
this.html5QrcodeScanner.resume();
|
||||
} else FoniaJS.setFocus('Nama_Produk');
|
||||
*/
|
||||
|
||||
ScanSukses: function(decodedText, decodedResult){
|
||||
new Request.JSON({
|
||||
url: CekHargaJS.PHP,
|
||||
sendParam: ['data=scan-produk','Cari_Produk='+decodedText],
|
||||
onSuccess: function(ajson){
|
||||
$('#InvID').val(ajson.InvID);
|
||||
$('#Kode_Barang').val(ajson.Kode_Barang);
|
||||
$('#Nama_Barang').val(ajson.Nama_Barang);
|
||||
$('#Nama_Satuan').val(ajson.Nama_Satuan);
|
||||
$('#Harga_Jual').val(ajson.Harga_Jual);
|
||||
$('#Nama_Supplier').val(ajson.Nama_Supplier);
|
||||
}
|
||||
}).send();
|
||||
//this.html5QrcodeScanner.pause();
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
$('#InvID').val(acell[0]);
|
||||
$('#Kode_Barang').val(acell[1]+' / '+acell[2]);
|
||||
$('#Nama_Barang').val(acell[5]);
|
||||
$('#Nama_Satuan').val(acell[6]);
|
||||
$('#Harga_Jual').val(acell[4]);
|
||||
this.update_Sup();
|
||||
},
|
||||
|
||||
data_query: function(tipe){
|
||||
if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#Kode_Barang').val(adata[0]);
|
||||
$('#Nama_Barang').val(adata[1]);
|
||||
$('#Nama_Satuan').val(adata[2]);
|
||||
$('#Harga_Jual').val(adata[3]);
|
||||
$('#Nama_Produk').val('');
|
||||
$('#Nama_Produk').focus();
|
||||
CekHargaJS.update_Sup();
|
||||
},
|
||||
|
||||
update_Sup: function(){
|
||||
if ($('#InvID').val()==0) return false;
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=cek_supplier','InvID']
|
||||
}).send();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,294 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/mutasi.js
|
||||
Desc. : JS - Transaksi Mutasi Stok Cabang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : February 28th, 2011.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var MutasiJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
$('#butUbah').click(function(){this.tx_ubah();}.bind(this));
|
||||
$('#butHapus').click(function(){this.tx_hapus();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.tx_simpan();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
$('#butPrint').click(function(){this.tx_print();}.bind(this));
|
||||
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, 900, '', function(){
|
||||
$('#winBTX')
|
||||
.find('#Cari_TX').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-tx');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBTX').find('#Cari_TX').val('');
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
this.data_query('brow-tx');
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
tx_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBTX);
|
||||
$('#No_Mutasi').val(acell[0]);
|
||||
this.data_query('master', 'view');
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.data_query('master', 'add');
|
||||
},
|
||||
|
||||
tx_ubah: function(){
|
||||
if (!$('#No_Mutasi').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showAuth(function(){this.data_query('master', 'edit')}.bind(this), this, 'EDIT '+$('#No_Mutasi').val());
|
||||
},
|
||||
|
||||
tx_hapus: function(){
|
||||
if (!$('#No_Mutasi').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <strong>'+$('#No_Mutasi').val()+'</strong> ?', function(){
|
||||
FoniaJS.showAuth(function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=delete','No_Mutasi'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
$('#No_Mutasi').val('');
|
||||
this.data_query('master', 'view');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), this, 'DELETE '+$('#No_Mutasi').val());
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(){
|
||||
this.data_query('master', 'save');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', function(){
|
||||
this.data_query('master', 'cancel');
|
||||
$('#No_Mutasi').val('');
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_print: function(prt){
|
||||
if ($('#No_Mutasi').val()) {
|
||||
var cetak = new cPRINTER(FoniaJS.WEB_PATH+'apps/php/repo/nota.php');
|
||||
cetak.add_param("data", "nota-mutasi");
|
||||
cetak.add_param("Nomor_Cetak", $('#No_Mutasi').val());
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
return;
|
||||
}
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
if ($('#Dari_CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Dari Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#Ke_CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Ke Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#Dari_CabID').val()==$('#Ke_CabID').val()){
|
||||
FoniaJS.showError("Dari Cabang dan Ke Cabang tidak boleh sama !");
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
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, HPP){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-produk','mode','mode_detail='+mode,'No_Mutasi','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID,'HPP='+HPP],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Mutasi','Dari_CabID'], {'selectFunc': MutasiJS.Produk_Comp});
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end()
|
||||
.find('#Qty').keyup(function(e){
|
||||
this.Hitung_Detail();
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (-1!==$.inArray(e.which, [13,9])) this.detail_simpan();
|
||||
}.bind(this));
|
||||
if (mode == 'insert' && InvID == 0) {
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
} else {
|
||||
this.Hitung_Detail();
|
||||
FoniaJS.setFocus('#Qty');
|
||||
}
|
||||
}.bind(this), null, false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
if ($('#Dari_CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Dari Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#Ke_CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Ke Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#Dari_CabID').val()==$('#Ke_CabID').val()){
|
||||
FoniaJS.showError("Dari Cabang dan Ke Cabang tidak boleh sama !");
|
||||
return;
|
||||
}
|
||||
this.detail_produk('insert', 0, 0, 0, 0);
|
||||
},
|
||||
|
||||
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[2]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_Mutasi','ID='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_simpan: function(){
|
||||
if (parseInt($('#InvID').val())==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
return;
|
||||
}
|
||||
var _mdetail = $('#mode_detail').val();
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_Mutasi','Dari_CabID','Ke_CabID','ID','InvID','SatuanID','Qty','Harga_Beli'],
|
||||
onSuccess: function(){
|
||||
if (_mdetail=='insert') { this.detail_tambah(); } else FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
var sparam = ['data=master','mode='+mode,'No_Mutasi'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')];
|
||||
if ((mode ?? '')=='save') sparam = ['data=master','mode=save','No_Mutasi','Tgl_Mutasi','Dari_CabID','Ke_CabID','Catatan'];
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: sparam,
|
||||
onSuccess: function(ajson){
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
$('#No_Mutasi').keyup(function(e){
|
||||
if ((e.which || e.keyCode) == 13) {
|
||||
if (($("#No_Mutasi")) && ($("#No_Mutasi").val() !== '')) this.data_query('master');
|
||||
}
|
||||
}.bind(this));
|
||||
this.data_query('tabel-detail');
|
||||
if ($.inArray($("#mode").val(),['add','edit']) !== -1) {
|
||||
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
||||
$('#butTambah').addClass('d-none');
|
||||
$('#butUbah').addClass('d-none');
|
||||
$('#butHapus').addClass('d-none');
|
||||
$('#butPrint').addClass('d-none');
|
||||
$('#butSimpan').removeClass('d-none');
|
||||
$('#butBatal').removeClass('d-none');
|
||||
} else {
|
||||
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
||||
$('#butTambah').removeClass('d-none');
|
||||
$('#butUbah').removeClass('d-none');
|
||||
$('#butHapus').removeClass('d-none');
|
||||
$('#butPrint').removeClass('d-none');
|
||||
$('#butSimpan').addClass('d-none');
|
||||
$('#butBatal').addClass('d-none');
|
||||
}
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
FoniaJS.setFocus('#No_Mutasi');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','No_Mutasi']
|
||||
}).send();
|
||||
} else if (tipe=="brow-tx"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-tx','Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Dari_CabID','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#SatuanID').val(adata[3]);
|
||||
$('#Kode_Barang').val(adata[0]);
|
||||
$('#Nama_Satuan').val(adata[2]);
|
||||
$('#Harga_Beli').val(adata[4]);
|
||||
FoniaJS.setFocus('#Qty');
|
||||
},
|
||||
|
||||
Hitung_Detail: function(){
|
||||
$('#Jumlah').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Qty').val()) * FoniaJS.StrToFloat($('#Harga_Beli').val()), 2));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,286 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/opname.js
|
||||
Desc. : JS - Transaksi Opname Stok Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 24th, 2010.
|
||||
Last Modified : September 29th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var OpnameJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
$('#butUbah').click(function(){this.tx_ubah();}.bind(this));
|
||||
$('#butHapus').click(function(){this.tx_hapus();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.tx_simpan();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
$('#butPrint').click(function(){this.tx_print();}.bind(this));
|
||||
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, 900, '', function(){
|
||||
$('#winBTX')
|
||||
.find('#Cari_TX').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-tx');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBTX').find('#Cari_TX').val('');
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
this.data_query('brow-tx');
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
tx_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBTX);
|
||||
$('#No_Opname').val(acell[0]);
|
||||
this.data_query('master', 'view');
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.data_query('master', 'add');
|
||||
},
|
||||
|
||||
tx_ubah: function(){
|
||||
if (!$('#No_Opname').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showAuth(function(){this.data_query('master', 'edit')}.bind(this), this, 'EDIT '+$('#No_Opname').val());
|
||||
},
|
||||
|
||||
tx_hapus: function(){
|
||||
if (!$('#No_Opname').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <strong>'+$('#No_Opname').val()+'</strong> ?', function(){
|
||||
FoniaJS.showAuth(function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=delete','No_Opname'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
$('#No_Opname').val('');
|
||||
this.data_query('master', 'view');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), this, 'DELETE '+$('#No_Opname').val());
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
return;
|
||||
}
|
||||
this.data_query('master', 'save');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', function(){
|
||||
this.data_query('master', 'cancel');
|
||||
$('#No_Opname').val('');
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_print: function(prt){
|
||||
if ($('#No_Opname').val()) {
|
||||
var cetak = new cPRINTER(FoniaJS.WEB_PATH+'apps/php/repo/nota.php');
|
||||
cetak.add_param("data", "nota-opname");
|
||||
cetak.add_param("Nomor_Cetak", $('#No_Opname').val());
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
return;
|
||||
}
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
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, HPP){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-produk','mode','mode_detail='+mode,'No_Opname','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID,'HPP='+HPP],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Opname','Tgl_Opname','CabID'], {'selectFunc': OpnameJS.Produk_Comp});
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end()
|
||||
.find('#Qty').keyup(function(e){
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (-1!==$.inArray(e.which, [13,9])) this.detail_simpan();
|
||||
}.bind(this));
|
||||
if (mode == 'insert' && InvID == 0) {
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
} else {
|
||||
FoniaJS.setFocus('#Qty');
|
||||
}
|
||||
this.update_stok();
|
||||
}.bind(this), null, false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
return;
|
||||
}
|
||||
this.detail_produk('insert', 0, 0, 0, 0);
|
||||
},
|
||||
|
||||
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[2]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_Opname','ID='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_simpan: function(){
|
||||
if (parseInt($('#InvID').val())==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
return;
|
||||
}
|
||||
var _mdetail = $('#mode_detail').val();
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_Opname','CabID','ID','InvID','SatuanID','Qty','Harga_Beli'],
|
||||
onSuccess: function(){
|
||||
if (_mdetail=='insert') { this.detail_tambah(); } else FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
var sparam = ['data=master','mode='+mode,'No_Opname'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')];
|
||||
if ((mode ?? '')=='save') sparam = ['data=master','mode=save','No_Opname','Tgl_Opname','CabID','Catatan'];
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: sparam,
|
||||
onSuccess: function(ajson){
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
$('#No_Opname').keyup(function(e){
|
||||
if ((e.which || e.keyCode) == 13) {
|
||||
if (($("#No_Opname")) && ($("#No_Opname").val() !== '')) this.data_query('master');
|
||||
}
|
||||
}.bind(this));
|
||||
this.data_query('tabel-detail');
|
||||
if ($.inArray($("#mode").val(),['add','edit']) !== -1) {
|
||||
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
||||
$('#butTambah').addClass('d-none');
|
||||
$('#butUbah').addClass('d-none');
|
||||
$('#butHapus').addClass('d-none');
|
||||
$('#butPrint').addClass('d-none');
|
||||
$('#butSimpan').removeClass('d-none');
|
||||
$('#butBatal').removeClass('d-none');
|
||||
} else {
|
||||
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
||||
$('#butTambah').removeClass('d-none');
|
||||
$('#butUbah').removeClass('d-none');
|
||||
$('#butHapus').removeClass('d-none');
|
||||
$('#butPrint').removeClass('d-none');
|
||||
$('#butSimpan').addClass('d-none');
|
||||
$('#butBatal').addClass('d-none');
|
||||
}
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
FoniaJS.setFocus('#No_Opname');
|
||||
}
|
||||
if ($('#mode').val()=='print') this.tx_print(true);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','No_Opname']
|
||||
}).send();
|
||||
} else if (tipe=="brow-tx"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-tx','Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','CabID','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#SatuanID').val(adata[3]);
|
||||
$('#Kode_Barang').val(adata[0]);
|
||||
$('#Nama_Satuan').val(adata[2]);
|
||||
$('#Harga_Beli').val(adata[4]);
|
||||
OpnameJS.update_stok();
|
||||
FoniaJS.setFocus('#Qty');
|
||||
},
|
||||
|
||||
update_stok: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=cek_stok','Tgl_Opname','CabID','InvID']
|
||||
}).send();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,128 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/opname_barang.js
|
||||
Desc. : JS - Transaksi Penyesuaian Stok Per Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 22nd, 2014.
|
||||
Last Modified : September 21st, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var OpnameBarangJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
html5QrcodeScanner: null,
|
||||
|
||||
loading: function(){
|
||||
$('#butSimpan').click(function(){this.proses_save();}.bind(this));
|
||||
$('#butBrow').click(function(){this.produk_brow();}.bind(this));
|
||||
if (FoniaJS.WEB_MOBILE){
|
||||
//html5QrcodeScanner = new Html5QrcodeScanner('qr-reader', { fps: 10, qrbox: 250, rememberLastUsedCamera: true, supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_CAMERA] });
|
||||
html5QrcodeScanner = new Html5Qrcode('qr-reader');
|
||||
html5QrcodeScanner.start({ facingMode: 'environment' }, { fps: 10, qrbox: 250 }, OpnameBarangJS.ScanSukses);
|
||||
} else {
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk'], {'selectFunc': OpnameBarangJS.Produk_Comp});
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
}
|
||||
},
|
||||
|
||||
proses_save: function(){
|
||||
if ($('#InvID').val()==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Produk!');
|
||||
return;
|
||||
}
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=simpan-opname','InvID','Stok_Fisik'],
|
||||
onSuccess: function(ares){
|
||||
if (ares.Status){
|
||||
FoniaJS.showInfo('Sukses simpan penyesuaian Stok !');
|
||||
$('#InvID').val(0);
|
||||
$('.form-control').val('')
|
||||
if (FoniaJS.WEB_MOBILE){
|
||||
this.html5QrcodeScanner.resume();
|
||||
} else FoniaJS.setFocus('Nama_Produk');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
ScanSukses: function(decodedText, decodedResult){
|
||||
new Request.JSON({
|
||||
url: OpnameBarangJS.PHP,
|
||||
sendParam: ['data=scan-produk','Cari_Produk='+decodedText],
|
||||
onSuccess: function(ajson){
|
||||
$('#InvID').val(ajson.InvID);
|
||||
$('#Kode_Barang').val(ajson.Kode_Barang);
|
||||
$('#Nama_Barang').val(ajson.Nama_Barang);
|
||||
$('#Nama_Satuan').val(ajson.Nama_Satuan);
|
||||
$('#Stok_Sistem').val(ajson.Stok_Sistem);
|
||||
FoniaJS.setFocus('#Stok_Fisik');
|
||||
}
|
||||
}).send();
|
||||
this.html5QrcodeScanner.pause();
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
$('#InvID').val(acell[0]);
|
||||
$('#Kode_Barang').val(acell[1]+' / '+acell[2]);
|
||||
$('#Nama_Barang').val(acell[5]);
|
||||
$('#Nama_Satuan').val(acell[6]);
|
||||
OpnameBarangJS.update_Stok();
|
||||
},
|
||||
|
||||
data_query: function(tipe){
|
||||
if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#Kode_Barang').val(adata[0]);
|
||||
$('#Nama_Barang').val(adata[1]);
|
||||
$('#Nama_Satuan').val(adata[2]);
|
||||
OpnameBarangJS.update_Stok();
|
||||
},
|
||||
|
||||
update_Stok: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=cek_stok','InvID'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Stok_Fisik');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,348 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/po.js
|
||||
Desc. : JS - Transaksi Pembuatan Purchase Order
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : January 19th, 2026.
|
||||
|
||||
(c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var POJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){
|
||||
$('#butTambah').click(function(){this.tx_tambah();}.bind(this));
|
||||
$('#butUbah').click(function(){this.tx_ubah();}.bind(this));
|
||||
$('#butHapus').click(function(){this.tx_hapus();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.tx_simpan();}.bind(this));
|
||||
$('#butBatal').click(function(){this.tx_batal();}.bind(this));
|
||||
$('#butPrint').click(function(){this.tx_print();}.bind(this));
|
||||
$('#butShare').click(function(){this.tx_share();}.bind(this));
|
||||
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, 900, '', function(){
|
||||
$('#winBTX').find('#Cari_TX').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
$('#winBTX').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
$('#winBTX').find('#butAll').click(function(){
|
||||
$('#winBTX').find('#Cari_TX').val('');
|
||||
this.data_query('brow-tx');
|
||||
}.bind(this));
|
||||
this.data_query('brow-tx');
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
tx_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBTX);
|
||||
$('#No_PO').val(acell[0]);
|
||||
this.data_query('master', 'view');
|
||||
},
|
||||
|
||||
tx_tambah: function(){
|
||||
this.data_query('master', 'add');
|
||||
},
|
||||
|
||||
tx_ubah: function(){
|
||||
if (!$('#No_PO').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showAuth(function(){this.data_query('master', 'edit')}.bind(this), this, 'EDIT '+$('#No_PO').val());
|
||||
},
|
||||
|
||||
tx_hapus: function(){
|
||||
if (!$('#No_PO').val()){
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
return;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <strong>'+$('#No_PO').val()+'</strong> ?', function(){
|
||||
FoniaJS.showAuth(function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=delete','No_PO'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
$('#No_PO').val('');
|
||||
this.data_query('master', 'view');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), this, 'DELETE '+$('#No_PO').val());
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_simpan: function(mode){
|
||||
if ($('#CabID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Cabang !");
|
||||
return;
|
||||
}
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
return;
|
||||
}
|
||||
this.data_query('master', 'save');
|
||||
},
|
||||
|
||||
tx_batal: function(){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan membatalkan ?', function(){
|
||||
this.data_query('master', 'cancel');
|
||||
$('#No_PO').val('');
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
tx_print: function(){
|
||||
if ($('#No_PO').val()) {
|
||||
if (FoniaJS.WEB_MOBILE){
|
||||
var dload = new cEXPORT({'url':FoniaJS.WEB_PATH+'apps/php/pdf/po.php'});
|
||||
dload.add_param("data", "pdf-po");
|
||||
dload.add_param("mode", "share");
|
||||
dload.add_param("Nomor_Cetak", $('#No_PO').val());
|
||||
dload.download();
|
||||
} else {
|
||||
var cetak = new cPDF(FoniaJS.WEB_PATH+'apps/php/pdf/po.php');
|
||||
cetak.add_param("data", "pdf-po");
|
||||
cetak.add_param("Nomor_Cetak", $('#No_PO').val());
|
||||
cetak.showPDF();
|
||||
}
|
||||
return;
|
||||
}
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
},
|
||||
|
||||
tx_share: function(){
|
||||
if ($('#No_PO').val()) {
|
||||
var dload = new cSHARE({'url':FoniaJS.WEB_PATH+'apps/php/pdf/po.php'});
|
||||
dload.add_param("data", "pdf-po");
|
||||
dload.add_param("mode", "share");
|
||||
dload.add_param("Nomor_Cetak", $('#No_PO').val());
|
||||
dload.share();
|
||||
return;
|
||||
}
|
||||
FoniaJS.showError("Silakan masukkan Nomor Transaksi !");
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
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><input type="hidden" id="Filter_Browse" value="all" /></div></div></div><div id="divBrowProduk"> </div>');
|
||||
this.winBProduk = FoniaJS.showWindow('BProduk', 'Daftar Barang', _isi, 900, '', function(){
|
||||
$('#winBProduk').find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butAll').click(function(){
|
||||
if ($('#Filter_Browse').val()=='filter') {
|
||||
$('#Filter_Browse').val('all');
|
||||
$('#butAll').html('Semua');
|
||||
} else {
|
||||
$('#Filter_Browse').val('filter');
|
||||
$('#butAll').html('Supplier');
|
||||
}
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
this.detail_produk('insert', 0, acell[0], acell[1]);
|
||||
},
|
||||
|
||||
detail_produk: function(mode, ID, InvID, SatuanID){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-produk','No_PO','mode','mode_detail='+mode,'ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 700, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_PO','CabID','SupID'], this.Produk_Comp);
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end()
|
||||
.find('#Nama_Produk').on('click', function(){
|
||||
$('#Nama_Produk').select();
|
||||
}).end()
|
||||
.find('#Qty').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13 && parseInt(e.target.value)>0) FoniaJS.setFocus('#Harga_Beli');
|
||||
}.bind(this)).end()
|
||||
.find('#Harga_Beli').keyup(function(e) {
|
||||
this.Hitung_Detail();
|
||||
if (e.which==13 && FoniaJS.StrToFloat($('#Jumlah').val())>0) this.detail_simpan();
|
||||
}.bind(this));
|
||||
if ($('#mode_detail').val() == 'insert' && $('#InvID').val() == 0) {
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
} else {
|
||||
if ($('#mode_detail').val() != 'insert') this.Hitung_Detail();
|
||||
this.Update_Items();
|
||||
}
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
if ($('#SupID').val()==0){
|
||||
FoniaJS.showError("Silakan pilih Nama Supplier !");
|
||||
return;
|
||||
}
|
||||
this.detail_produk('insert', 0, 0, 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_produk('update', acell[0], acell[1], acell[2]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[4]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=delete','No_PO','ID='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_simpan: function(){
|
||||
if (parseInt($('#InvID').val())==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
return;
|
||||
}
|
||||
var _mdetail = $('#mode_detail').val();
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail','No_PO','ID','InvID','SatuanID','Qty','Harga_Beli','Harga_HPP'],
|
||||
onSuccess: function(){
|
||||
if (_mdetail=='insert') { this.detail_tambah(); } else FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){
|
||||
if (tipe=="master"){
|
||||
mode = (mode) ? mode : '';
|
||||
var sparam = ['data=master','mode='+mode,'No_PO'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')];
|
||||
if (-1 !== mode.search(/save/i)) sparam = ['data=master','mode='+mode,'No_PO','Tgl_PO','CabID','SupID','Total_Beli'];
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: sparam,
|
||||
onSuccess: (ajson) => {
|
||||
$('#divTXMaster').html(ajson.html);
|
||||
$('#No_PO').keyup((e) => {
|
||||
if ((e.which || e.keyCode) == 13) {
|
||||
if (($("#No_PO")) && ($("#No_PO").val() !== '')) this.data_query('master');
|
||||
}
|
||||
});
|
||||
this.data_query('tabel-detail');
|
||||
if ($.inArray($("#mode").val(),['add','edit']) !== -1) {
|
||||
$('#butBrow').prop('disabled', true).removeClass('btn-info').addClass('btn-secondary');
|
||||
$('#butTambah').addClass('d-none');
|
||||
$('#butUbah').addClass('d-none');
|
||||
$('#butHapus').addClass('d-none');
|
||||
$('#butPrint').addClass('d-none');
|
||||
$('#butShare').addClass('d-none');
|
||||
$('#butSimpan').removeClass('d-none');
|
||||
$('#butBatal').removeClass('d-none');
|
||||
} else {
|
||||
$('#butBrow').prop('disabled', false).removeClass('btn-secondary').addClass('btn-info');
|
||||
$('#butTambah').removeClass('d-none');
|
||||
$('#butUbah').removeClass('d-none');
|
||||
$('#butHapus').removeClass('d-none');
|
||||
$('#butPrint').removeClass('d-none');
|
||||
$('#butShare').removeClass('d-none');
|
||||
$('#butSimpan').addClass('d-none');
|
||||
$('#butBatal').addClass('d-none');
|
||||
}
|
||||
//$('#butUbah').prop('disabled', ($('#Lunas').val()==1 ? true : false));
|
||||
//$('#butHapus').prop('disabled', ($('#Lunas').val()==1 ? true : false));
|
||||
if (ajson.error) {
|
||||
FoniaJS.showError(ajson.error);
|
||||
FoniaJS.setFocus('#No_PO');
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','No_PO']
|
||||
}).send();
|
||||
} else if (tipe=="brow-tx"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-tx','Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk','Filter_Browse','SupID','No_PO'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#SatuanID').val(adata[0]);
|
||||
$('#Nama_Satuan1').val(adata[1]);
|
||||
$('#Nama_Satuan2').val(adata[1]);
|
||||
$('#Harga_Beli').val(FoniaJS.FloatToStr(adata[3]));
|
||||
$('#Harga_HPP').val(FoniaJS.FloatToStr(adata[3]));
|
||||
POJS.Update_Items();
|
||||
},
|
||||
|
||||
oc_SupID: function(ob){
|
||||
if (ob.value == 0) return false;
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode','mode_detail=sup-baru','No_PO','SupID']
|
||||
}).send();
|
||||
},
|
||||
|
||||
Update_Items: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-item','InvID'],
|
||||
onSuccess: function(adata){
|
||||
if (!adata.data) {
|
||||
$('#Stok').val(FoniaJS.FloatToStr(adata.Stok));
|
||||
}
|
||||
FoniaJS.setFocus('#Qty');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
Hitung_Detail: function(){
|
||||
var dqty = FoniaJS.StrToFloat($('#Qty').val());
|
||||
var dharga = FoniaJS.StrToFloat($('#Harga_Beli').val());
|
||||
var dtot = dharga * dqty;
|
||||
$('#Jumlah').val(FoniaJS.FloatToStr(dtot,2));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,525 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/iss/pos.js
|
||||
Desc. : JS - Transaksi Penjualan / Kasir POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 5th, 2012.
|
||||
Last Modified : January 21st, 2026.
|
||||
|
||||
(c) 2012 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var POSJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
POLE_DISP: null,
|
||||
POLE_CONF: {},
|
||||
|
||||
loading: function(){
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Jual'], {'selectFunc': POSJS.Produk_Comp, 'keyFunc': POSJS.Produk_Key, 'breakValue': ['*9']});
|
||||
$('#Nama_Produk').click(() => $('#Nama_Produk').select());
|
||||
$('#POS_Qty').on({
|
||||
keyup: (e) => {
|
||||
(13 == e.which) && $('#Nama_Produk').focus();
|
||||
},
|
||||
click: () => $('#POS_Qty').select()
|
||||
});
|
||||
this.data_query('master');
|
||||
//POLE DISPLAY
|
||||
this.data_query('pole-config');
|
||||
},
|
||||
|
||||
proses_oc: function(){
|
||||
var cetak = new cPRINTERPOS(FoniaJS.WEB_PATH+'apps/php/repo/nota.php');
|
||||
cetak.add_param("data", "opencash");
|
||||
cetak.exec();
|
||||
$('#Nama_Produk').focus();
|
||||
},
|
||||
|
||||
proses_print: function(oc){
|
||||
var _no_jual = $('#No_Cetak').val();
|
||||
var cetak = new cPRINTERPOS(FoniaJS.WEB_PATH+'apps/php/repo/nota.php');
|
||||
cetak.add_param("data", "nota-pos");
|
||||
cetak.add_param("Nomor_Cetak", _no_jual);
|
||||
cetak.add_param("Open_Cash", oc);
|
||||
cetak.exec();
|
||||
},
|
||||
|
||||
proses_cancel: function(){
|
||||
if ($('#Total_Item').val()==0) {
|
||||
FoniaJS.showInfo('Tidak ada item barang !');
|
||||
return;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Apakah Anda yakin ingin membatalkan ?<br>Semua item transaksi nota ini akan dihapus !', () => this.data_query('master','cancel'), 'danger');
|
||||
},
|
||||
|
||||
nota_brow: function(){
|
||||
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Nota" 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="divBrowNota"> </div>');
|
||||
this.winBNota = FoniaJS.showWindow('BNota', 'Daftar Transaksi', _isi, 900, '', () => {
|
||||
$('#winBNota')
|
||||
.find('#Cari_Nota').keydown((e) => {
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-nota');
|
||||
}).end()
|
||||
.find('#butSearch').click((e) => {
|
||||
this.data_query('brow-nota');
|
||||
}).end()
|
||||
.find('#butAll').click(() => {
|
||||
$('#winBNota').find('#Cari_Nota').val('');
|
||||
this.data_query('brow-nota');
|
||||
});
|
||||
this.data_query('brow-nota');
|
||||
});
|
||||
},
|
||||
|
||||
nota_print: function(acell){
|
||||
FoniaJS.closeWindow(this.winBNota);
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin ingin cetak ulang Nota "'+acell[0]+'" ?', () => {
|
||||
$('#No_Cetak').val(acell[0]);
|
||||
this.proses_print(0);
|
||||
}, 'info');
|
||||
},
|
||||
|
||||
nota_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBNota);
|
||||
FoniaJS.showAuth(() => {
|
||||
$('#No_Jual').val(acell[0]);
|
||||
this.data_query('master', 'edit');
|
||||
}, this, 'EDIT POS : '+acell[0]);
|
||||
},
|
||||
|
||||
nota_delete: function(acell){
|
||||
FoniaJS.closeWindow(this.winBNota);
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus Nota "'+acell[0]+'" ?', () => {
|
||||
FoniaJS.showAuth(() => {
|
||||
$('#No_Jual').val(acell[0]);
|
||||
this.data_query('master', 'delete');
|
||||
}, this, 'DELETE '+acell[0]);
|
||||
}, 'danger');
|
||||
},
|
||||
|
||||
pending_brow: function(){
|
||||
this.winBPend = FoniaJS.showWindow('BPend', 'Daftar Transaksi Pending', '<div id="divBrowPending"> </div>', 900, '', () => this.data_query('brow-pending'));
|
||||
},
|
||||
|
||||
pending_select: function(acell){
|
||||
$('#No_Jual').val(acell[0]);
|
||||
FoniaJS.closeWindow(this.winBPend);
|
||||
this.data_query('master', 'pending-edit');
|
||||
},
|
||||
|
||||
pending_delete: function(acell){
|
||||
FoniaJS.closeWindow(this.winBPend);
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus Transaksi Pending "'+acell[0]+'" ?', () => {
|
||||
$('#No_Jual').val(acell[0]);
|
||||
this.data_query('master', 'pending-delete');
|
||||
}, 'danger');
|
||||
},
|
||||
|
||||
produk_add: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=info_produk'],
|
||||
onSuccess: (txt) => {
|
||||
this.winBarang = FoniaJS.showWindow('Barang', 'Penambahan Item Barang', txt, 600, [{},{i:'butBatal'},{i:'butSimpan',v:'Simpan',c:'success'}], () => {
|
||||
$('#winBarang')
|
||||
.find('#butSimpan').click(() => this.produk_simpan()).end()
|
||||
.find('#butBatal').click(() => $('#Nama_Produk').focus()).end()
|
||||
.find('#Kode_Barcode').keyup((e) => {
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#Nama_Barang');
|
||||
}).end()
|
||||
.find('#Nama_Barang').keyup((e) => {
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#Grup_InvID');
|
||||
}).end()
|
||||
.find('#Grup_InvID').keyup((e) => {
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#StokID');
|
||||
}).end()
|
||||
.find('#StokID').keyup((e) => {
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#Harga_Jual');
|
||||
});
|
||||
FoniaJS.setFocus('#Kode_Barcode');
|
||||
});
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_simpan: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=simpan_produk','Kode_Barcode','Nama_Barang','Grup_InvID','StokID','Harga_Jual'],
|
||||
onSuccess: (ajson) => {
|
||||
if (ajson.msg) FoniaJS.showInfo(ajson.msg);
|
||||
FoniaJS.closeWindow(this.winBarang);
|
||||
$('#Nama_Produk').val('').focus();
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
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, 900, '', () => {
|
||||
$('#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((e) => {
|
||||
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]);
|
||||
},
|
||||
|
||||
detail_produk: function(mode, ID, InvID, SatuanID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail_produk','mode_detail='+mode,'No_Jual','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID],
|
||||
onSuccess: (txt) => {
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', txt, 600, [{},{i:'butBatal'},{i:'butSimpan',v:'Simpan',c:'success'}], () => {
|
||||
$('#winDetail')
|
||||
.find('#butSimpan').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])) FoniaJS.setFocus('#Harga_Diskon');
|
||||
}).end()
|
||||
.find('#Harga_Diskon').keyup((e) => {
|
||||
this.Hitung_Detail(1);
|
||||
if (13==e.which) {
|
||||
if (FoniaJS.StrToFloat($('#Qty').val())>0) this.detail_simpan();
|
||||
}
|
||||
}).end()
|
||||
.find('#Persen_Diskon').keyup((e) => {
|
||||
this.Hitung_Detail(2);
|
||||
if (13==e.which) {
|
||||
if (FoniaJS.StrToFloat($('#Qty').val())>0) this.detail_simpan();
|
||||
}
|
||||
});
|
||||
this.Hitung_Detail(1);
|
||||
FoniaJS.setFocus('#Qty');
|
||||
});
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
if (parseInt(acell[3])==1){
|
||||
this.detail_lain('update', acell[0]);
|
||||
} else
|
||||
this.detail_produk('update', acell[0], acell[1], acell[2]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','No_Jual','ID='+acell[0]],
|
||||
onSuccess: () => {
|
||||
$('#Nama_Produk').focus();
|
||||
//POLE DISPLAY
|
||||
if (this.POLE_CONF.ENABLE){
|
||||
this.POLE_DISP.Send([{'t':'..','a':'L'},{'t':'Total '+$('#Total_Disp').html(),'a':'R'}]);
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_simpan: function(){
|
||||
if (FoniaJS.StrToFloat($('#Persen_Diskon').val())>=100) {
|
||||
FoniaJS.showInfo('Nilai Diskon diluar batas !');
|
||||
return false;
|
||||
}
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','No_Jual','InvID','SatuanID','Qty','Harga_Beli','Harga_Jual','Harga_Diskon','ID','Ket'],
|
||||
onSuccess: () => {
|
||||
//POLE DISPLAY
|
||||
if (this.POLE_CONF.ENABLE){
|
||||
this.POLE_DISP.Send([{'t':$('#Nama_Lengkap').val(),'a':'L'},{'t':'Total '+$('#Total_Disp').html(),'a':'R'}]);
|
||||
}
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
$('#Nama_Produk').val('');
|
||||
$('#Nama_Produk').focus();
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_lain: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail_lain','mode_detail='+mode,'No_Jual','ID='+ID],
|
||||
onSuccess: (txt) => {
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', txt, 600, [{},{i:'butBatal'},{i:'butSimpan',v:'Simpan',c:'success'}], () => {
|
||||
$('#winDetail')
|
||||
.find('#butSimpan').click(() => this.detail_simpan()).end()
|
||||
.find('#butBatal').click(() => $('#Nama_Produk').focus()).end()
|
||||
.find('#Ket').keyup((e) => {
|
||||
if ('' === e.target.value) return false;
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#Qty');
|
||||
}).end()
|
||||
.find('#Qty').keyup((e) => {
|
||||
this.Hitung_Detail(0);
|
||||
if (-1!==$.inArray(e.which, [13,9])) FoniaJS.setFocus('#Harga_Jual');
|
||||
}).end()
|
||||
.find('#Harga_Jual').keyup((e) => {
|
||||
this.Hitung_Detail(0);
|
||||
if (13==e.which) {
|
||||
if (FoniaJS.StrToFloat($('#Qty').val())>0 && FoniaJS.StrToFloat($('#Harga_Jual').val())>0) this.detail_simpan();
|
||||
}
|
||||
});
|
||||
this.Hitung_Detail(0);
|
||||
FoniaJS.setFocus('#Ket');
|
||||
});
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
kasir_show: function(){
|
||||
//POLE DISPLAY
|
||||
if (this.POLE_CONF.ENABLE){
|
||||
this.POLE_DISP.Send([{'t':'Total '+$('#Total_Disp').html(),'a':'C'},{'t':'Tunai / Non Tunai ?','a':'C'}]);
|
||||
}
|
||||
if ($('#Total_Item').val()==0) {
|
||||
FoniaJS.showInfo('Belum ada transaksi !');
|
||||
return;
|
||||
}
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=info_kasir','No_Jual','Total_Nota'],
|
||||
onSuccess: (adata) => {
|
||||
this.winKasir = FoniaJS.showWindow('Kasir', 'Informasi Pembayaran', adata.html, 500, '', () => {
|
||||
$('#butKPend').click(() => this.kasir_pending());
|
||||
$('#butKBayar').click(() => this.kasir_simpan());
|
||||
$('#butKBatal').click(() => $('#Nama_Produk').focus());
|
||||
$('#popTotal_Tunai').keyup((e) => {
|
||||
if (13 == e.which && parseFloat(e.target.value) == 0){
|
||||
e.target.value = FoniaJS.FloatToStr($('#Total_Nota').val());
|
||||
}
|
||||
if (27 == e.which) {
|
||||
FoniaJS.closeWindow(this.winKasir);
|
||||
$('#Nama_Produk').focus();
|
||||
}
|
||||
this.kasir_hitung();
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (13 == e.which) $('#butKBayar').focus();
|
||||
});
|
||||
$('#popTotal_Kartu').keyup((e) => {
|
||||
if (13 == e.which && $('#popKartuID').val() > 0 && parseFloat(e.target.value) == 0){
|
||||
e.target.value = FoniaJS.FloatToStr($('#Total_Nota').val()-FoniaJS.StrToFloat($('#popTotal_Tunai').val()));
|
||||
}
|
||||
if (27 == e.which) {
|
||||
FoniaJS.closeWindow(this.winKasir);
|
||||
$('#Nama_Produk').focus();
|
||||
}
|
||||
this.kasir_hitung();
|
||||
if (parseFloat(e.target.value) == 0) return false;
|
||||
if (13 == e.which) $('#butKBayar').focus();
|
||||
});
|
||||
$('#popKartuID').change(() => {
|
||||
if ($('#popKartuID').val() > 0){
|
||||
if (parseFloat($('#popTotal_Kartu').val()) == 0) $('#popTotal_Kartu').val(FoniaJS.FloatToStr($('#Total_Nota').val()-FoniaJS.StrToFloat($('#popTotal_Tunai').val())));
|
||||
$('.ckartu').removeClass('d-none');
|
||||
} else {
|
||||
$('#popTotal_Kartu').val('0.00');
|
||||
$('.ckartu').addClass('d-none');
|
||||
}
|
||||
this.kasir_hitung();
|
||||
FoniaJS.setFocus('#popTotal_Kartu');
|
||||
});
|
||||
$('#popTotal_Tunai').val(FoniaJS.FloatToStr($('#Total_Tunai').val()));
|
||||
$('#popTotal_Kartu').val(FoniaJS.FloatToStr($('#Total_Kartu').val()));
|
||||
$('#popTotal_Bayar').val($('#Total_Bayar').val());
|
||||
$('#popKartuID').val($('#KartuID').val()).trigger('change');
|
||||
$('#popNo_Kartu').val($('#No_Kartu').val());
|
||||
$('#popNama_Kartu').val($('#Nama_Kartu').val());
|
||||
$('#Total_Disp').html(adata.Total_Disp);
|
||||
FoniaJS.setFocus('#popTotal_Tunai');
|
||||
});
|
||||
this.Simpan = false;
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
kasir_hitung: function(){
|
||||
const totBayar = FoniaJS.StrToFloat($('#popTotal_Tunai').val()) + FoniaJS.StrToFloat($('#popTotal_Kartu').val());
|
||||
const totSisa = totBayar - FoniaJS.StrToFloat($('#popTotal_Jual').val());
|
||||
$('#popTotal_Bayar').val(totBayar);
|
||||
$('#popTotal_Sisa').val(FoniaJS.FloatToStr(totSisa, 2)).removeClass('border-danger border-success').addClass((totSisa < 0) ? 'border-danger' : 'border-success');
|
||||
},
|
||||
|
||||
kasir_simpan: function(){
|
||||
const totTunai = FoniaJS.StrToFloat($('#popTotal_Tunai').val());
|
||||
const totKartu = FoniaJS.StrToFloat($('#popTotal_Kartu').val());
|
||||
const jenKartu = $('#popKartuID').val();
|
||||
if (jenKartu == 0 && totKartu > 0) {
|
||||
FoniaJS.showInfo('Silakan pilih Jenis Pembayaran Non Tunai!');
|
||||
FoniaJS.setFocus('#popKartuID');
|
||||
return false;
|
||||
} else if (jenKartu > 0 && totKartu == 0) {
|
||||
FoniaJS.showInfo('Silakan masukkan Jumlah Pembayaran Non Tunai!');
|
||||
FoniaJS.setFocus('#popKartuID');
|
||||
return false;
|
||||
}
|
||||
if (FoniaJS.StrToFloat($('#popTotal_Sisa').val())<0) {
|
||||
FoniaJS.showInfo('Pembayaran Transaksi tidak mencukupi!');
|
||||
FoniaJS.setFocus('#popTotal_Bayar');
|
||||
return false;
|
||||
}
|
||||
if (this.Simpan==true) {
|
||||
FoniaJS.showError('Proses pembayaran sedang dilakukan!');
|
||||
return;
|
||||
}
|
||||
this.Simpan = true;
|
||||
$('#Total_Tunai').val(totTunai);
|
||||
$('#Total_Kartu').val(totKartu);
|
||||
$('#Total_Bayar').val($('#popTotal_Bayar').val());
|
||||
$('#KartuID').val($('#popKartuID').val());
|
||||
$('#No_Kartu').val($('#popNo_Kartu').val());
|
||||
$('#Nama_Kartu').val($('#popNama_Kartu').val());
|
||||
FoniaJS.closeWindow(this.winKasir);
|
||||
this.data_query('master', 'save');
|
||||
},
|
||||
|
||||
kasir_pending: function(){
|
||||
FoniaJS.closeWindow(this.winKasir);
|
||||
this.data_query('master', 'pending-save');
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=='master'){
|
||||
mode = (mode) ? mode : '';
|
||||
var sparam = ['data=master','mode='+mode,'No_Jual','No_Cetak'];
|
||||
if (-1 !== mode.search(/save/i)) sparam = ['data=master','mode='+mode,'No_Jual','Tgl_Jual','Total_Tunai','Total_Kartu','Total_Bayar','KartuID','No_Kartu','Nama_Kartu'];
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: sparam,
|
||||
onSuccess: (txt) => {
|
||||
$('#divPOS2').html(txt);
|
||||
$('#posPEND').click(() =>this.pending_brow());
|
||||
$('#posTAMBAH').click(() => this.produk_add());
|
||||
$('#posBARANG').click(() => this.produk_brow());
|
||||
$('#posNOTA').click(() => this.nota_brow());
|
||||
$('#posSIMPAN').click(() => this.kasir_show());
|
||||
$('#posBATAL').click(() => this.proses_cancel());
|
||||
FoniaJS.User.Level>1 && $('#posBATAL').hide();
|
||||
this.data_query('detail');
|
||||
$('#Nama_Produk').focus();
|
||||
if (-1!==$.inArray($('#mode').val(), ['print','opencd','saveonly'])){
|
||||
if ($('#mode').val()=='print') this.proses_print(1);
|
||||
if ($('#mode').val()=='opencd') this.proses_oc();
|
||||
//POLE DISPLAY
|
||||
if (this.POLE_CONF.ENABLE){
|
||||
this.POLE_DISP.Send([{'t':this.POLE_CONF.END1,'a':'C'},{'t':this.POLE_CONF.END2,'a':'C'}]);
|
||||
}
|
||||
} else {
|
||||
//POLE DISPLAY
|
||||
if (this.POLE_CONF.ENABLE){
|
||||
this.POLE_DISP.Send([{'t':this.POLE_CONF.START1,'a':'C'},{'t':this.POLE_CONF.START2,'a':'C'}]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=='detail'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','No_Jual']
|
||||
}).send();
|
||||
} else if (tipe=='brow-produk'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: () => {
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=='brow-nota'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-nota','Cari_Nota'],
|
||||
onSuccess: () => {
|
||||
FoniaJS.setFocus('#Cari_Nota');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=='brow-pending'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-pending']
|
||||
}).send();
|
||||
} else if (tipe=='pole-config'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=pole-config'],
|
||||
onSuccess: (acfg) => {
|
||||
if (typeof acfg.pole == 'object'){
|
||||
this.POLE_CONF = acfg.pole;
|
||||
if (this.POLE_CONF.ENABLE){
|
||||
this.POLE_DISP = new cPOLEDISPLAY(this.POLE_CONF.PORT);
|
||||
this.POLE_DISP.Open();
|
||||
}
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var _qty = $('#POS_Qty').val();
|
||||
var adata = item.data.split(':');
|
||||
//todo: jika stok kosong tidak simpan hanya utk glamore
|
||||
//if (parseInt(adata[3])>0 || _qty<0){
|
||||
new Request.JSONF({
|
||||
url: POSJS.PHP,
|
||||
sendParam: ['data=detail','mode_detail=insert','No_Jual','InvID='+item.value,'SatuanID='+adata[0],'Qty='+_qty,'Harga_Beli='+adata[1],'Harga_Jual='+adata[2]],
|
||||
onSuccess: () => {
|
||||
$('#POS_Qty').val('1.00');
|
||||
//POLE DISPLAY
|
||||
if (POSJS.POLE_CONF.ENABLE){
|
||||
POSJS.POLE_DISP.Send([{'t':item.text,'a':'L'},{'t':'Total '+$('#Total_Disp').html(),'a':'R'}]);
|
||||
}
|
||||
}
|
||||
}).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();
|
||||
},
|
||||
|
||||
Produk_Key: function(key, val){
|
||||
if (val == '*9') {
|
||||
if (key == 13) POSJS.detail_lain('insert', 0);
|
||||
} else {
|
||||
if (key == 13) {
|
||||
POSJS.kasir_show();
|
||||
} else if (key == 117) {//f6
|
||||
POSJS.proses_oc();
|
||||
} else if (key == 119) {//f8
|
||||
POSJS.produk_add();
|
||||
} else if (key == 120) {//f9
|
||||
POSJS.produk_brow();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onblur_Qty: function(){
|
||||
if ($('#POS_Qty').val()==0) $('#POS_Qty').val('1.00');
|
||||
},
|
||||
|
||||
Hitung_Detail: function(tipe){
|
||||
if (tipe==1) $('#Persen_Diskon').val(FoniaJS.FloatToStr((FoniaJS.StrToFloat($('#Harga_Diskon').val())*100) / FoniaJS.StrToFloat($('#Harga_Jual').val()), 2));
|
||||
if (tipe==2) $('#Harga_Diskon').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Harga_Jual').val()) * FoniaJS.StrToFloat($('#Persen_Diskon').val()) * 0.01, 2));
|
||||
$('#Jumlah').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Qty').val()) * (FoniaJS.StrToFloat($('#Harga_Jual').val()) - FoniaJS.StrToFloat($('#Harga_Diskon').val())), 2));
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,84 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/login.js
|
||||
Desc. : JS - Halaman Proses Login
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 15th, 2008.
|
||||
Last Modified : June 28th, 2020.
|
||||
|
||||
(c) 2008 - 2020, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
$(document).ready(function(){
|
||||
$('#butLogin').click(LoginJS.Proses_Login);
|
||||
$('#Username').keydown(function(e){
|
||||
if (e.which==13) $('#Password').focus();
|
||||
});
|
||||
$('#Password').keydown(function(e){
|
||||
if (e.which==13) $('#butLogin').trigger('click');
|
||||
});
|
||||
LoginJS.Tampil_Login();
|
||||
document.oncontextmenu = new Function ('return false');
|
||||
|
||||
$.backstretch([
|
||||
[
|
||||
{ width: 1280, url: FoniaJS.WEB_PATH+"assets/images/bs/toko_1280.jpg" },
|
||||
{ width: 960, url: FoniaJS.WEB_PATH+"assets/images/bs/toko_960.jpg" }
|
||||
],
|
||||
[
|
||||
{ width: 1280, url: FoniaJS.WEB_PATH+"assets/images/bs/rak_1280.jpg" },
|
||||
{ width: 960, url: FoniaJS.WEB_PATH+"assets/images/bs/rak_960.jpg" }
|
||||
],
|
||||
[
|
||||
{ width: 1280, url: FoniaJS.WEB_PATH+"assets/images/bs/shop_1280.jpg" },
|
||||
{ width: 960, url: FoniaJS.WEB_PATH+"assets/images/bs/shop_960.jpg" }
|
||||
]
|
||||
], {
|
||||
duration: 6000,
|
||||
transition: 'push_left|push_right|cover_up|cover_down|fade',
|
||||
transitionDuration: 600
|
||||
});
|
||||
});
|
||||
|
||||
var LoginJS = {
|
||||
|
||||
Tampil_Login: function(){
|
||||
var Username = FoniaJS.getCookie('Username');
|
||||
if (Username != '') {
|
||||
$('#Username').val(Username);
|
||||
FoniaJS.setFocus('#Password');
|
||||
} else {
|
||||
FoniaJS.setFocus('#Username');
|
||||
}
|
||||
},
|
||||
|
||||
Proses_Login: function(){
|
||||
if (!$('#Username').val()){
|
||||
$('#Username').focus();
|
||||
FoniaJS.showError('Silahkan masukkan Username !');
|
||||
return false;
|
||||
}
|
||||
if (!$('#Password').val()){
|
||||
$('#Password').focus();
|
||||
FoniaJS.showError('Silahkan masukkan Password !');
|
||||
return false;
|
||||
}
|
||||
new Request.JSON({
|
||||
url: FoniaJS.WEB_PATH+'apps/php/login.php',
|
||||
sendParam: ['mode=login','Username','Password'],
|
||||
onSuccess: function(respon){
|
||||
if (respon.hasil == 'SUKSES'){
|
||||
FoniaJS.setCookie('Username', $('#Username').val(), 365);
|
||||
$('#divLoginMsg').html(respon.pesan).removeClass('d-none');
|
||||
$('.input-group').addClass('d-none');
|
||||
setTimeout(function(){self.location = FoniaJS.WEB_PATH+'?auth='+(respon.token??'');}, 1600);
|
||||
}else{
|
||||
FoniaJS.showInfo(respon.pesan, 3000);
|
||||
if (respon.redir) setTimeout(function(){self.location = respon.redir;}, 600);
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,175 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/promo/barang.js
|
||||
Desc. : JS - Pengaturan Promo Penjualan Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 28th, 2014.
|
||||
Last Modified : December 9th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var PromoBarangJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Promo').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Promo').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Promo');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=promo-detail','mode_detail='+mode,'PromoID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Promo', txt, 'xl', [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
if ($.inArray($("#mode_detail").val(),['insert','update']) !== -1) {
|
||||
this.update_Items($('#InvID').val(), $('#SatuanID').val(), 1);
|
||||
this.update_Items($('#Promo_InvID').val(), $('#Promo_SatuanID').val(), 2);
|
||||
this.oc_PilihQ();
|
||||
this.oc_PilihP();
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','PromoID='+acell[0],'Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','PromoID','InvID','SatuanID','CabID','Pilih_Qty','Qty_Min','Qty_Kali','Tipe_Promo','Promo_Disc','Promo_InvID','Promo_SatuanID','Promo_Qty','Jumlah_Promo','Tgl_Mulai','Tgl_Akhir','Aktif','Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_brow: function(tipe){
|
||||
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><input type="hidden" id="Tipe_Brow" value="'+tipe+'" /></div></div></div><div id="divBrowProduk"> </div>');
|
||||
this.winBProduk = FoniaJS.showWindow('BProduk', 'Daftar Barang', _isi, 900, '', function(){
|
||||
$('#winBProduk').find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
var itipe = parseInt($('#Tipe_Brow').val());
|
||||
if (itipe == 1){
|
||||
$('#InvID').val(acell[0]);
|
||||
$('#Nama_Produk').val(acell[2]);
|
||||
this.update_Items(acell[0], 0, 1);
|
||||
} else {
|
||||
$('#Promo_InvID').val(acell[0]);
|
||||
$('#Promo_Produk').val(acell[2]);
|
||||
this.update_Items(acell[0], 0, 2);
|
||||
}
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Promo']
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
update_Items: function(InvID, SatuanID, Tipe){
|
||||
const elSatuan = (Tipe==1) ? $('#SatuanID') : $('#Promo_SatuanID');
|
||||
elSatuan.empty();
|
||||
if (InvID==0) return false;
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail_item','InvID='+InvID],
|
||||
onSuccess: (adata) => {
|
||||
adata.map((val) => {
|
||||
elSatuan.append(new Option(val['label'],val['value'],false,(val['value']==SatuanID?true:false)))
|
||||
});
|
||||
elSatuan.trigger('change');
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
oc_PilihQ: function(){
|
||||
var i = parseInt($('#Pilih_Qty').val());
|
||||
if (i == 1){
|
||||
$('#Qty_Min').prop('disabled', false);
|
||||
$('#Qty_Kali').prop('disabled', true).val(0);
|
||||
} else {
|
||||
$('#Qty_Min').prop('disabled', true).val(0);
|
||||
$('#Qty_Kali').prop('disabled', false);
|
||||
}
|
||||
},
|
||||
|
||||
oc_PilihP: function(){
|
||||
var i = parseInt($('#Tipe_Promo').val());
|
||||
if (i == 1){
|
||||
$('.promo1').removeClass('d-none');
|
||||
$('.promo2').addClass('d-none');
|
||||
$('#Promo_SatuanID').val(0);
|
||||
$('#Promo_Qty').val(0);
|
||||
$('#Promo_InvID').val(0);
|
||||
} else {
|
||||
$('.promo1').addClass('d-none');
|
||||
$('.promo2').removeClass('d-none');
|
||||
$('#Promo_Disc').val(0);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,118 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/promo/iklan.js
|
||||
Desc. : JS - Pengaturan Promo Iklan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 28th, 2014.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var PromoIklanJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Promo').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Promo').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Promo');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=promo-detail','mode_detail='+mode,'PromoNotaID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Promo', txt, 'xl', [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','PromoNotaID='+acell[0],'Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','PromoNotaID','Nama_Promo','Jual_Min','Jual_Grup','CabID','Promo_Iklan','Jumlah_Promo','Tgl_Mulai','Tgl_Akhir','Aktif','Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
grup_list: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=grup-list','Jual_Grup'],
|
||||
onSuccess: function(ajson){
|
||||
this.winGrup = FoniaJS.showWindow('Grup', 'Daftar Grup Barang', ajson.html, 'lg', [{i:'butWSAll',v:'Cek Semua',c:'info'},{i:'butWCAll',v:'Hapus Semua',c:'info'},{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winGrup')
|
||||
.find('#butWSAll').click(function(){this.grup_semua();}.bind(this)).end()
|
||||
.find('#butWCAll').click(function(){this.grup_clear();}.bind(this)).end()
|
||||
.find('#butWSimpan').click(function(){this.grup_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
grup_semua: function(){
|
||||
$('#tabGrupList').find('input:checkbox').prop('checked', true);
|
||||
},
|
||||
|
||||
grup_clear: function(){
|
||||
$('#tabGrupList').find('input:checkbox').prop('checked', false);
|
||||
},
|
||||
|
||||
grup_save: function(){
|
||||
var alist = [];
|
||||
$('#tabGrupList').find('input:checkbox:checked').each(function(){
|
||||
alist.push($(this).val());
|
||||
})
|
||||
$('#Jual_Grup').val(alist.join());
|
||||
FoniaJS.closeWindow(this.winGrup);
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Promo']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,187 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/promo/total.js
|
||||
Desc. : JS - Pengaturan Promo Total Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 28th, 2014.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var PromoTotalJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Promo').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Promo').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Promo');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=promo-detail','mode_detail='+mode,'PromoID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Promo', txt, 'xl', [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
if ($.inArray($("#mode_detail").val(),['insert','update']) !== -1) {
|
||||
this.update_Items($('#Promo_InvID').val(), $('#Promo_SatuanID').val());
|
||||
this.oc_PilihP();
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','PromoID='+acell[0],'Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','PromoID','Nama_Promo','Jual_Min','Jual_Grup','CabID','Tipe_Promo','Promo_Jual','Promo_InvID','Promo_SatuanID','Promo_Qty','Jumlah_Promo','Tgl_Mulai','Tgl_Akhir','Aktif','Cari_Promo'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
grup_list: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=grup-list','Jual_Grup'],
|
||||
onSuccess: function(ajson){
|
||||
this.winGrup = FoniaJS.showWindow('Grup', 'Daftar Grup Barang', ajson.html, 'lg', [{i:'butWSAll',v:'Cek Semua',c:'info'},{i:'butWCAll',v:'Hapus Semua',c:'info'},{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winGrup')
|
||||
.find('#butWSAll').click(function(){this.grup_semua();}.bind(this)).end()
|
||||
.find('#butWCAll').click(function(){this.grup_clear();}.bind(this)).end()
|
||||
.find('#butWSimpan').click(function(){this.grup_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
grup_semua: function(){
|
||||
$('#tabGrupList').find('input:checkbox').prop('checked', true);
|
||||
},
|
||||
|
||||
grup_clear: function(){
|
||||
$('#tabGrupList').find('input:checkbox').prop('checked', false);
|
||||
},
|
||||
|
||||
grup_save: function(){
|
||||
var alist = [];
|
||||
$('#tabGrupList').find('input:checkbox:checked').each(function(){
|
||||
alist.push($(this).val());
|
||||
})
|
||||
$('#Jual_Grup').val(alist.join());
|
||||
FoniaJS.closeWindow(this.winGrup);
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk').find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
$('#winBProduk').find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
$('#Promo_InvID').val(acell[0]);
|
||||
$('#Promo_Produk').val(acell[2]);
|
||||
this.update_Items(acell[0], 0);
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Promo']
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
update_Items: function(InvID, SatuanID){
|
||||
$('#Promo_SatuanID').empty();
|
||||
if (InvID==0) return false;
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail_item','InvID='+InvID],
|
||||
onSuccess: (adata) => {
|
||||
adata.map((val) => {
|
||||
$('#Promo_SatuanID').append(new Option(val['label'],val['value'],false,(val['value']==SatuanID?true:false)))
|
||||
});
|
||||
$('#Promo_SatuanID').trigger('change');
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
oc_PilihP: function(){
|
||||
var i = parseInt($('#Tipe_Promo').val());
|
||||
if (i == 4){
|
||||
$('.promo1').removeClass('d-none');
|
||||
$('.promo2').addClass('d-none');
|
||||
$('#Promo_SatuanID').val(0);
|
||||
$('#Promo_Qty').val(0);
|
||||
$('#Promo_InvID').val(0);
|
||||
$('#Jumlah_Promo').val(0);
|
||||
} else {
|
||||
$('.promo1').addClass('d-none');
|
||||
$('.promo2').removeClass('d-none');
|
||||
$('#Promo_Jual').val(0);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,118 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/barcode.js
|
||||
Desc. : JS - Cetak Barcode Label
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 28th, 2013.
|
||||
Last Modified : October 2nd, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoBarcodeJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print();}.bind(this));
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk'], {'selectFunc': RepoBarcodeJS.Produk_Comp});
|
||||
$('#butBrow').click(function(){this.produk_brow();}.bind(this));
|
||||
$('#butPL').click(function(){this.load_printer();}.bind(this));
|
||||
$('#Nama_Produk').focus();
|
||||
},
|
||||
|
||||
proses_print: function(){
|
||||
if ($('#InvID').val() == 0){
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
FoniaJS.setFocus('Nama_Produk');
|
||||
return;
|
||||
}
|
||||
if ($('#Printer').val() == ''){
|
||||
FoniaJS.showError('Silakan pilih Nama Printer Barcode !');
|
||||
return;
|
||||
}
|
||||
var cetak = new cPRINTERPOS(this.PHP);
|
||||
cetak.setPrinter($('#Printer').val());
|
||||
cetak.add_param("data", "print-barcode");
|
||||
cetak.add_param("InvID");
|
||||
cetak.add_param("SatuanID");
|
||||
cetak.add_param("Qty");
|
||||
cetak.add_param("Kode_Sup");
|
||||
cetak.add_param("Printer");
|
||||
cetak.exec();
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
$('#InvID').val(acell[0]);
|
||||
$('#SatuanID').val(acell[1]);
|
||||
$('#Kode_SKU').val(acell[2]);
|
||||
$('#Nama_Produk').val(acell[4]);
|
||||
this.update_Sup();
|
||||
FoniaJS.setFocus('#Qty');
|
||||
},
|
||||
|
||||
data_query: function(tipe){
|
||||
if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
var adata = item.data.split(':');
|
||||
$('#InvID').val(item.value);
|
||||
$('#SatuanID').val(adata[1]);
|
||||
$('#Kode_SKU').val(adata[0]);
|
||||
RepoBarcodeJS.update_Sup();
|
||||
FoniaJS.setFocus('#Qty');
|
||||
},
|
||||
|
||||
update_Sup: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=opt-sup','InvID']
|
||||
}).send();
|
||||
},
|
||||
|
||||
load_printer: function(){
|
||||
var parent = this;
|
||||
qz.printers.find().then(function(data){
|
||||
var _dafprt = '';
|
||||
for(var i = 0; i < data.length; i++) {
|
||||
_dafprt += data[i] + '|';
|
||||
};
|
||||
new Request.JSONF({
|
||||
url: parent.PHP,
|
||||
sendParam: ['data=load-printer','Printer='+_dafprt,'DefPrint='+$('#configPrinter').html()]
|
||||
}).send();
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,48 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/beli.js
|
||||
Desc. : JS - Laporan Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : October 10th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoBeliJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Grup_InvID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Grup_InvID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,48 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/beli_analisa.js
|
||||
Desc. : JS - Laporan Analisa Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 4th, 2013.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoBeliAnalisaJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Grup_InvID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Grup_InvID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/beli_mutasi.js
|
||||
Desc. : JS - Laporan Mutasi Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 3rd, 2013.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoBeliMutasiJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/beli_retur.js
|
||||
Desc. : JS - Laporan Retur Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoBeliReturJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,63 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/dana_pos.js
|
||||
Desc. : JS - Laporan Penerimaan Kasir / POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 8th, 2012.
|
||||
Last Modified : September 30th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoDanaPOSJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butPOS').click(function(){this.proses_pos();}.bind(this));
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_pos: function(){
|
||||
if ($('#KasirID').val()==0){
|
||||
FoniaJS.showError("Untuk Cetak POS silakan pilih salah satu Nama Pengguna!");
|
||||
$('#KasirID').focus();
|
||||
return;
|
||||
}
|
||||
var cetak = new cPRINTERPOS(this.PHP);
|
||||
cetak.add_param("data", "print-pos");
|
||||
cetak.add_param("Tipe", "R");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("KasirID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
cetak.exec();
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("KasirID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("KasirID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/hutang.js
|
||||
Desc. : JS - Laporan Hutang Supplier
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 17th, 2011.
|
||||
Last Modified : October 16th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoHutangJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/hutang_bayar.js
|
||||
Desc. : JS - Laporan Pembayaran Hutang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 18th, 2012.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoHutangBayarJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/jual.js
|
||||
Desc. : JS - Laporan Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : September 30th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoJualJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/jual_analisa.js
|
||||
Desc. : JS - Laporan Analisa Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 9th, 2013.
|
||||
Last Modified : October 4th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoJualAnaJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Grup_InvID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Urut");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Grup_InvID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Urut");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/jual_margin.js
|
||||
Desc. : JS - Laporan Margin Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 12nd, 2012.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoJualMarginJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/jual_rekap.js
|
||||
Desc. : JS - Laporan Rekap Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 9th, 2013.
|
||||
Last Modified : October 4th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoJualRekapJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Grup_InvID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Grup_InvID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/kas_keluar.js
|
||||
Desc. : JS - Laporan Pengeluaran Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 18th, 2012.
|
||||
Last Modified : October 18th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoKasKeluarJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/kas_terima.js
|
||||
Desc. : JS - Laporan Penerimaan Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 18th, 2012.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoKasTerimaJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Tipe");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Tipe");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,160 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/label.js
|
||||
Desc. : JS - Cetak Label Harga Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 13th, 2014.
|
||||
Last Modified : October 5th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoLabelJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(q){//oke
|
||||
$('#butHapus').click(function(){this.proses_empty();}.bind(this));
|
||||
$('#butPrint').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
this.data_query('tabel-detail', 'empty', ((typeof(q)!=='undefined') ? q : ''));
|
||||
},
|
||||
|
||||
proses_empty: function(){//oke
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode_detail=empty']
|
||||
}).send();
|
||||
},
|
||||
|
||||
proses_print: function(prt){//oke
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
produk_brow: function(){//oke
|
||||
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, 900, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winBProduk')
|
||||
.find('#butWSimpan').click(function(){this.produk_simpan();}.bind(this)).end()
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_simpan: function(){//oke
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode_detail=simpan-produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
grup_brow: function(){//oke
|
||||
var _isi = new String('<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Grup" 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="divBrowGrup"> </div>');
|
||||
this.winBGrup = FoniaJS.showWindow('BGrup', 'Daftar Grup Barang', _isi, 900, null, function(){
|
||||
$('#winBGrup')
|
||||
.find('#Cari_Grup').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-grup');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-grup');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBGrup').find('#Cari_Grup').val('');
|
||||
this.data_query('brow-grup');
|
||||
}.bind(this));
|
||||
this.data_query('brow-grup');
|
||||
FoniaJS.setFocus('#Cari_Grup');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
grup_select: function(acell){//oke
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode_detail=simpan-grup','Grup_InvID='+acell[0]],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winBGrup);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){//oke
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-tx','mode_detail=update','ID='+acell[0]],
|
||||
onSuccess: function(a){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end()
|
||||
.find('#Nama_Produk').keyup(function(e){
|
||||
if (-1!==$.inArray(e.which, [13,9])) this.detail_simpan();
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Nama_Produk');
|
||||
}.bind(this), false);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){//oke
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Hapus item <strong>"'+acell[1]+'"</strong> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode_detail=delete','ID='+acell[0]]
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_simpan: function(){//oke
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode_detail','ID','Nama_Produk='+encodeURIComponent($('#Nama_Produk').val())],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode, kd_tx){//oke
|
||||
if (tipe=="tabel-detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-detail','mode_detail='+mode,'No_Label'+((typeof(kd_tx)!=='undefined')?'='+kd_tx:'')]
|
||||
}).send();
|
||||
} else if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
} else if (tipe=="brow-grup"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-grup','Cari_Grup'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Grup');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/mutasi_cabang.js
|
||||
Desc. : JS - Laporan Mutasi Stok Cabang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 16th, 2011.
|
||||
Last Modified : December 13th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoMutasiCabJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("Cab1ID");
|
||||
cetak.add_param("Cab2ID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("Cab1ID");
|
||||
dload.add_param("Cab2ID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/opname.js
|
||||
Desc. : JS - Laporan Opname Stok Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 8th, 2012.
|
||||
Last Modified : October 4th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoOpnameJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("KasirID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("KasirID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/rekap_harian.js
|
||||
Desc. : JS - Laporan Rekap Total Harian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : December 25th, 2013.
|
||||
Last Modified : December 14th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoRekapHarianJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/rekap_margin.js
|
||||
Desc. : JS - Laporan Rekap Margin
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 5th, 2013.
|
||||
Last Modified : December 14th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoRekapMarginJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/rekap_modal.js
|
||||
Desc. : JS - Laporan Rekap Modal
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 19th, 2013.
|
||||
Last Modified : December 13th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoRekapModalJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,61 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/stok_akhir.js
|
||||
Desc. : JS - Laporan Stok Akhir Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 24th, 2011.
|
||||
Last Modified : October 1st, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoStokAkhirJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("SupID");
|
||||
cetak.add_param("Grup_InvID");
|
||||
cetak.add_param("Tanggal");
|
||||
cetak.add_param("Urut");
|
||||
cetak.add_param("Harga");
|
||||
cetak.add_param("Min_Stok");
|
||||
cetak.add_param("Min_Qty");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("SupID");
|
||||
dload.add_param("Grup_InvID");
|
||||
dload.add_param("Tanggal");
|
||||
dload.add_param("Urut");
|
||||
dload.add_param("Harga");
|
||||
dload.add_param("Min_Stok");
|
||||
dload.add_param("Min_Qty");
|
||||
dload.download();
|
||||
},
|
||||
|
||||
oc_MinStok: function(){
|
||||
if ($('#Min_Stok').val()=='Y') {
|
||||
$('#Min_Qty').prop({disabled:false, readonly:false});
|
||||
FoniaJS.setFocus('#Min_Qty')
|
||||
} else {
|
||||
$('#Min_Qty').prop({disabled:true, readonly:true}).val(0);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,100 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/repo/stok_mutasi.js
|
||||
Desc. : JS - Laporan Mutasi Stok Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 16th, 2011.
|
||||
Last Modified : October 2nd, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RepoStokMutasiJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butCetak').click(function(){this.proses_print(true);}.bind(this));
|
||||
$('#butPreview').click(function(){this.proses_print();}.bind(this));
|
||||
$('#butExcel').click(function(){this.proses_dload();}.bind(this));
|
||||
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk'], {'selectFunc': RepoStokMutasiJS.Produk_Comp});
|
||||
$('#butBrow').click(function(){this.produk_brow();}.bind(this));
|
||||
$('#Nama_Produk').focus();
|
||||
},
|
||||
|
||||
proses_print: function(prt){
|
||||
if ($('#InvID').val()==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
$('#Nama_Produk').focus();
|
||||
return;
|
||||
}
|
||||
var cetak = new cPRINTER(this.PHP);
|
||||
cetak.add_param("data", "print");
|
||||
cetak.add_param("CabID");
|
||||
cetak.add_param("InvID");
|
||||
cetak.add_param("Tgl_From");
|
||||
cetak.add_param("Tgl_To");
|
||||
if (prt) cetak.doPrint(); else cetak.doPreview();
|
||||
},
|
||||
|
||||
proses_dload: function(){
|
||||
if ($('#InvID').val()==0) {
|
||||
FoniaJS.showError('Silakan masukkan Nama Barang !');
|
||||
$('#Nama_Produk').focus();
|
||||
return;
|
||||
}
|
||||
var dload = new cEXPORT(this.PHP);
|
||||
dload.add_param("data", "export");
|
||||
dload.add_param("CabID");
|
||||
dload.add_param("InvID");
|
||||
dload.add_param("Tgl_From");
|
||||
dload.add_param("Tgl_To");
|
||||
dload.download();
|
||||
},
|
||||
|
||||
produk_brow: function(){
|
||||
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, 900, '', function(){
|
||||
$('#winBProduk')
|
||||
.find('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butSearch').click(function(e){
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this)).end()
|
||||
.find('#butAll').click(function(){
|
||||
$('#winBProduk').find('#Cari_Produk').val('');
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
this.data_query('brow-produk');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
produk_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBProduk);
|
||||
$('#InvID').val(acell[0]);
|
||||
$('#Nama_Produk').val(acell[3]);
|
||||
$('#Tgl_From').focus();
|
||||
},
|
||||
|
||||
data_query: function(tipe){
|
||||
if (tipe=="brow-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-produk','Cari_Produk'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
Produk_Comp: function(item){
|
||||
$('#InvID').val(item.value);
|
||||
$('#Tgl_From').focus();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,80 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/about.js
|
||||
Desc. : JS - Informasi Aplikasi
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : November 23th, 2011.
|
||||
Last Modified : May 1st, 2022.
|
||||
|
||||
(c) 2011 - 2022, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var AboutJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#win'+this.KODE).find('#divBuildInfo').html('<p>Aplikasi dibuat dengan komponen :<br>- jQuery Version '+$().jquery+' <br>- Bootstrap Version '+$.fn.tooltip.Constructor.VERSION+' <br>- FoniaJS Version '+FoniaJS.version+' <br>- FoniaPHP Version '+FoniaJS.phpversion+'</p>');
|
||||
},
|
||||
|
||||
proses_checkdb: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=check_db'],
|
||||
onSuccess: function(txt){
|
||||
this.winCheck = FoniaJS.showWindow('CekDB', 'Cek, Perbaiki dan Optimalisasi Database', txt, 500, [{},{i:'butTutup'},{i:'butWProses',v:'Proses DB !',c:'success'}], function(){
|
||||
$('#winCekDB').find('#butWProses').click(function(){this.checkdb_run();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
proses_update: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=check_update'],
|
||||
onSuccess: function(txt){
|
||||
this.winUpdate = FoniaJS.showWindow('CekApp', 'Cek dan Update Aplikasi', txt, 500, [{},{i:'butTutup'},{i:'butWUpdate',v:'Proses Update !',c:'success'}], function(){
|
||||
$('#winCekApp').find('#butWUpdate').click(function(){this.update_run();}.bind(this));
|
||||
var tomb = $('#winCekApp').find('#butWUpdate');
|
||||
if ($('#file_online').val()==1){
|
||||
tomb.prop('disabled', false);
|
||||
} else {
|
||||
tomb.html('Telah Update!').prop('disabled', true);
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
checkdb_run: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=proses_db','DB_Cek','DB_Repair','DB_Opti'],
|
||||
onSuccess: function(txt){
|
||||
if ($('#DB_Hasil')) $('#DB_Hasil').removeClass('d-none').html(txt);
|
||||
FoniaJS.showInfo('Proses Database selesai', 2000);
|
||||
}
|
||||
}).send();
|
||||
},
|
||||
|
||||
update_run: function(){
|
||||
if ($('#file_online')){
|
||||
if ($('#file_online').val()==1){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=proses_update','file_web','file_sql','file_build'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.sukses==true) {
|
||||
FoniaJS.showInfo('Aplikasi telah di Update.<br>Silakan Log Out dari Aplikasi<br>Lalu refresh browser Anda!');
|
||||
} else {
|
||||
FoniaJS.showInfo('Aplikasi gagal di Update.');
|
||||
}
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/chpasswd.js
|
||||
Desc. : JS - Perubahan Password Operator
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : December 7th, 2008.
|
||||
Last Modified : April 25th, 2020.
|
||||
|
||||
(c) 2008 - 2020, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var SYSChpasswdJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butSave').click(function(){this.proses_save();}.bind(this));
|
||||
FoniaJS.setFocus('#LPass');
|
||||
},
|
||||
|
||||
proses_save: function(){
|
||||
if ($("#LPass").val()=="") {
|
||||
FoniaJS.showInfo("Silakan masukkan password lama Anda!");
|
||||
FoniaJS.setFocus("#LPass");
|
||||
return false;
|
||||
} else if ($("#BPass1").val()=="") {
|
||||
FoniaJS.showInfo("Silakan masukkan password baru 1 Anda!");
|
||||
FoniaJS.setFocus("#BPass1");
|
||||
return false;
|
||||
} else if ($("#BPass2").val()=="") {
|
||||
FoniaJS.showInfo("Silakan masukkan password baru 2 Anda!");
|
||||
FoniaJS.setFocus("#BPass2");
|
||||
return false;
|
||||
} else if ($("#BPass1").val()!=$("#BPass2").val()) {
|
||||
FoniaJS.showInfo("Password baru 1 dan 2 Anda tidak sama!");
|
||||
FoniaJS.setFocus("#BPass1");
|
||||
return false;
|
||||
}
|
||||
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=chpasswd','LPass','BPass1','BPass2'],
|
||||
onSuccess: function(ajson){
|
||||
if (ajson.status == true) {
|
||||
FoniaJS.showInfo(ajson.msg);
|
||||
FoniaJS.closeWindow('#win'+this.KODE);
|
||||
} else {
|
||||
FoniaJS.showError(ajson.msg);
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/config.js
|
||||
Desc. : JS - Konfigurasi Aplikasi
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 25th, 2010.
|
||||
Last Modified : September 30th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var ConfigJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butUbah').click(function(){this.proses_edit();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.proses_save();}.bind(this));
|
||||
this.data_query('view');
|
||||
},
|
||||
|
||||
proses_edit: function(){
|
||||
this.data_query('edit');
|
||||
},
|
||||
|
||||
proses_save: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=master','mode=save','REG_ID','REG_ADDRESS','REG_CITY','REG_POSTCODE','REG_PHONE','REG_FAX','REG_WEBSITE','REG_EMAIL','REG_OWNER','REG_NPWP'],
|
||||
onSuccess: function(txt){
|
||||
$('#divMaster').html(txt);
|
||||
this.update_event();
|
||||
}.bind(this)
|
||||
}).send()
|
||||
},
|
||||
|
||||
data_query: function(mode){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=master','mode='+mode,'REG_ID'],
|
||||
onSuccess: function(txt){
|
||||
$('#divMaster').html(txt);
|
||||
this.update_event();
|
||||
}.bind(this)
|
||||
}).send()
|
||||
},
|
||||
|
||||
update_event: function(){
|
||||
if ($.inArray($('#mode').val(), ['edit']) >= 0) {
|
||||
$("#butUbah").prop('disabled', true);
|
||||
$("#butSimpan").prop('disabled', false);
|
||||
} else {
|
||||
$("#butUbah").prop('disabled', false);
|
||||
$("#butSimpan").prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,146 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/menu_grup.js
|
||||
Desc. : JS - Manajemen Data Grup Login Menu
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 8th, 2013.
|
||||
Last Modified : January 1st, 2026.
|
||||
|
||||
(c) 2013 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var MenuGrupJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Grup').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Grup').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Grup');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=grup-detail','mode='+mode,'Grup_MenuID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Informasi Grup Menu', txt, 'lg', [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('add', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('edit', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm("Konfirmasi", "Yakin akan hapus "+acell[1]+"?", function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode=del','Grup_MenuID='+acell[0]],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('detail');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode','Grup_MenuID','Nama_Grup','Ket','Aktif'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('detail');
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses simpan data!');
|
||||
}
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
menu_show: function(acell){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=menu','Grup_MenuID='+acell[0]],
|
||||
onSuccess: function(txt){
|
||||
this.winMenu = FoniaJS.showWindow('Menu', 'Hak Akses Modul', txt, 'lg', [{i:'butWSelAll',v:'Pilih Semua',c:'info'},{i:'butWClrAll',v:'Hapus Semua',c:'info'},{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winMenu')
|
||||
.find('#butWSelAll').click(function(){this.menu_ceksemua();}.bind(this)).end()
|
||||
.find('#butWClrAll').click(function(){this.menu_hapussemua();}.bind(this)).end()
|
||||
.find('#butWSimpan').click(function(){this.menu_simpan();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
menu_cek: function(el){
|
||||
var t_modul = el.value, b_check = el.checked;
|
||||
$('#tabMenuList tbody input[type="checkbox"]').map(function(i, b){
|
||||
var t_menu = $(b);
|
||||
if (t_menu.hasClass(t_modul)) t_menu.prop('checked', b_check);
|
||||
});
|
||||
el.prop('checked', !b_check);
|
||||
},
|
||||
|
||||
menu_ceksemua: function(){
|
||||
$('#tabMenuList tbody input[type="checkbox"]').prop('checked', true);
|
||||
},
|
||||
|
||||
menu_hapussemua: function(){
|
||||
$('#tabMenuList tbody input[type="checkbox"]').prop('checked', false);
|
||||
},
|
||||
|
||||
menu_simpan: function(){
|
||||
var alist = $('#R_MENU').val().split(',');
|
||||
$('#tabMenuList tbody input[type="checkbox"]:checked').map(function(i, b){
|
||||
alist.push($(b).val());
|
||||
});
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save-menu','Grup_MenuID','Menu='+alist.join()],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses simpan data!');
|
||||
}
|
||||
FoniaJS.closeWindow(this.winMenu);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Grup']
|
||||
}).send()
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,189 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/operator.js
|
||||
Desc. : JS - Manajemen Data Pengguna
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 12th, 2008.
|
||||
Last Modified : January 1st, 2026.
|
||||
|
||||
(c) 2008 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var OperatorJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_User').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_User').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butFilter').click(function(){this.filter_show();}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_User');
|
||||
},
|
||||
|
||||
filter_show: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail_filter','Filter_Level'],
|
||||
onSuccess: function(txt){
|
||||
this.winFilter = FoniaJS.showWindow('FLevel', 'Filter Data Pengguna / Level', txt, 400, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winFLevel').find('#butWSimpan').click(function(){this.filter_simpan();}.bind(this));
|
||||
$('#winFLevel').find('#Fi_Level').focus();
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
filter_simpan: function(){
|
||||
$('#Filter_Level').val($('#Fi_Level').val());
|
||||
FoniaJS.closeWindow(this.winFilter);
|
||||
this.data_query('detail');
|
||||
},
|
||||
|
||||
detail_show: function(mode, UserID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=user-detail','mode='+mode,'UserID='+UserID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Informasi Pengguna', txt, 'lg', [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_check();}.bind(this));
|
||||
this.oc_Level();
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('add', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('edit', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm("Konfirmasi", "Yakin akan hapus ["+acell[1]+"] "+acell[2]+"?", function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode=del','UserID='+acell[0]],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('detail');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_check: function(){
|
||||
if ($('#Username').val().toUpperCase()==$('#UserLama').val().toUpperCase()) {
|
||||
this.detail_save();
|
||||
return;
|
||||
}
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=user-check','Username'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.ada==true) {
|
||||
FoniaJS.showInfo("Username telah ada dalam sistem !");
|
||||
} else {
|
||||
this.detail_save();
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode','UserID','Username','Nama','Posisi','Level','Password','Grup_MenuID','Aktif'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('detail');
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses simpan data!');
|
||||
}
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
menu_show: function(acell){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=menu','UserID='+acell[0]],
|
||||
onSuccess: function(txt){
|
||||
this.winMenu = FoniaJS.showWindow('Menu', 'Hak Akses Modul', txt, 'lg', [{i:'butWSelAll',v:'Pilih Semua',c:'info'},{i:'butWClrAll',v:'Hapus Semua',c:'info'},{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winMenu')
|
||||
.find('#butWSelAll').click(function(){this.menu_ceksemua();}.bind(this)).end()
|
||||
.find('#butWClrAll').click(function(){this.menu_hapussemua();}.bind(this)).end()
|
||||
.find('#butWSimpan').click(function(){this.menu_simpan();}.bind(this)).end()
|
||||
.find('#tabMenuList thead input[type="checkbox"]:disabled').prop('indeterminate', true);
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
menu_cek: function(el){
|
||||
var t_modul = el.value, b_check = el.checked;
|
||||
$('#tabMenuList tbody input[type="checkbox"]').map(function(i, b){
|
||||
var t_menu = $(b);
|
||||
if (t_menu.hasClass(t_modul)) t_menu.prop('checked', b_check);
|
||||
});
|
||||
el.prop('checked', !b_check);
|
||||
},
|
||||
|
||||
menu_ceksemua: function(){
|
||||
$('#tabMenuList tbody input[type="checkbox"]:not(:disabled)').prop('checked', true);
|
||||
},
|
||||
|
||||
menu_hapussemua: function(){
|
||||
$('#tabMenuList tbody input[type="checkbox"]:not(:disabled)').prop('checked', false);
|
||||
},
|
||||
|
||||
menu_simpan: function(){
|
||||
var alist = $('#R_MENU').val().split(',');
|
||||
$('#tabMenuList tbody input[type="checkbox"]:not(:disabled):checked').map(function(i, b){
|
||||
alist.push($(b).val());
|
||||
});
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save-menu','UserID','Menu='+alist.join()],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses simpan data!');
|
||||
}
|
||||
FoniaJS.closeWindow(this.winMenu);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Filter_Level','Cari_User']
|
||||
}).send()
|
||||
}
|
||||
},
|
||||
|
||||
oc_Level: function(){
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,75 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/printer.js
|
||||
Desc. : JS - Konfigurasi Printer POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 4th, 2013.
|
||||
Last Modified : December 7th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var PrinterJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butBrow').click(function(){this.cab_brow();}.bind(this));
|
||||
$('#butUbah').click(function(){this.proses_edit();}.bind(this));
|
||||
$('#butSimpan').click(function(){this.proses_save();}.bind(this));
|
||||
this.data_query('form-printer');
|
||||
},
|
||||
|
||||
cab_brow: function(){
|
||||
var _isi = new String('<div id="divBrowCab"> </div>');
|
||||
this.winBCab = FoniaJS.showWindow('BCab', 'Daftar Cabang', _isi, 'lg', '', function(){
|
||||
this.data_query('brow-cabang');
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
cab_select: function(acell){
|
||||
FoniaJS.closeWindow(this.winBCab);
|
||||
$('#REG_ID').val(acell[0]);
|
||||
this.data_query('form-printer', 'view');
|
||||
},
|
||||
|
||||
proses_edit: function(){
|
||||
this.data_query('form-printer', 'edit');
|
||||
},
|
||||
|
||||
proses_save: function(){
|
||||
this.data_query('form-printer', 'save');
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=='form-printer'){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=form-printer','mode='+mode,'REG_ID','PRINT_AUTO','PRINT_OPENCD','PRINT_AUTOCUT','PRINT_ROW','TITLE_END'],
|
||||
onSuccess: function(a){
|
||||
$('#divPrinter').html(a.html);
|
||||
$('#Nama_Cabang').val(a.Nama_Cabang);
|
||||
this.update_event();
|
||||
if (a.sukses) FoniaJS.showInfo('Konfigurasi printer sukses disimpan!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
} else if (tipe=='brow-cabang'){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=brow-cabang']
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
update_event: function(){
|
||||
if ($.inArray($('#mode').val(), ['edit']) >= 0) {
|
||||
$('#butUbah').prop('disabled', true);
|
||||
$('#butSimpan').prop('disabled', false);
|
||||
} else {
|
||||
$('#butUbah').prop('disabled', false);
|
||||
$('#butSimpan').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/js/sys/super.js
|
||||
Desc. : JS - Informasi Supervisi Operator
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 11st, 2012.
|
||||
Last Modified : March 19th, 2023.
|
||||
|
||||
(c) 2012 - 2023, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var SuperJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
AJ: null,
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
if ($('#divSuper').length == 1){
|
||||
SuperJS.AJ = setInterval(function(){
|
||||
SuperJS.data_query('detail');
|
||||
}, 1000);
|
||||
}
|
||||
},
|
||||
|
||||
detail_select: function(acell){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','USERID='+acell[0],'KODE='+acell[1],'REQ_SID='+acell[2],'REQ='+acell[7]],
|
||||
onSuccess: function(){
|
||||
this.data_query('detail');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail'],
|
||||
onSuccess: function(){
|
||||
if ($('#divSuper').length == 0) clearInterval(SuperJS.AJ);
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/karyawan.js
|
||||
Desc. : JS - Tabel Master Karyawan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 7th, 2015.
|
||||
Last Modified : October 8th, 2025.
|
||||
|
||||
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var KaryawanJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Karya').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Karya').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Karya');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=karya-detail','mode_detail='+mode,'KaryaID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Data Karyawan', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','KaryaID='+acell[0],'Cari_Karya'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','KaryaID','Nama_Karya','Tgl_Masuk','Tgl_Keluar','Aktif','Cari_Karya'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Karya']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/merek.js
|
||||
Desc. : JS - Tabel Master Merek Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 19th, 2010.
|
||||
Last Modified : October 18th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var MerekJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Merek').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Merek').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Merek');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=merek-detail','mode_detail='+mode,'MerekID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Merek', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','MerekID='+acell[0],'Cari_Merek'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','MerekID','Kode_Merek','Nama_Merek','Aktif','Cari_Merek'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Merek']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,293 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/produk.js
|
||||
Desc. : JS - Tabel Master Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 19th, 2010.
|
||||
Last Modified : January 10th, 2026.
|
||||
|
||||
(c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var ProdukJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
$('#butFilter').click(function(){this.filter_show();}.bind(this));
|
||||
this.data_query('tabel-produk');
|
||||
$('#Cari_Produk').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('tabel-produk');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('tabel-produk');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Produk').val('');
|
||||
this.data_query('tabel-produk');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Produk');
|
||||
},
|
||||
|
||||
filter_show: function(){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-filter','Filter_Produk'],
|
||||
onSuccess: function(txt){
|
||||
this.winFilter = FoniaJS.showWindow('Filter', 'Filter Produk Sesuai Grup', txt, 400, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winFilter').find('#butWSimpan').click(function(){this.filter_simpan();}.bind(this));
|
||||
}.bind(this));
|
||||
$('#Fi_Produk').focus();
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
filter_simpan: function(){
|
||||
$('#Filter_Produk').val($('#Fi_Produk').val());
|
||||
FoniaJS.closeWindow(this.winFilter);
|
||||
this.data_query('tabel-produk');
|
||||
},
|
||||
|
||||
produk_show: function(mode, ID){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-produk','mode='+mode,'InvID='+ID],
|
||||
onSuccess: function(ajson){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', ajson.html, 'xl', [{},{i:'butWBtl',v:'Batal',c:'danger'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail')
|
||||
.find('#butWSimpan').click(function(){this.produk_simpan();}.bind(this)).end()
|
||||
.find('#butWBtl').click(function(){this.produk_batal();}.bind(this));
|
||||
this.data_query('tabel-kemasan');
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_restore: function(acell){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=restore-detail','InvID='+acell[0]],
|
||||
onSuccess: function(ajson){
|
||||
this.winBRest = FoniaJS.showWindow('BRest', 'Informasi Backup Barang', ajson.html, 'xl', [], function(){
|
||||
this.data_query('restore-tabel');
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_restore_select: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan restore data Barang ke versi tanggal : <b>"'+acell[0]+'"</b> ?<br><br><span class="text-danger fw-bold">HARAP KONFIRMASI KEMBALI, TERIMA KASIH!</span>', function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=restore-proses','InvID','MD5Key='+acell[1]],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
FoniaJS.showInfo('Sukses restore Data Barang ini!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses restore!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
produk_restore_form: function(acell, div){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=restore-form','InvID','MD5Key='+acell[1]],
|
||||
onSuccess: function(adata){
|
||||
$(div).html(adata.html);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_tambah: function(){
|
||||
this.produk_show('add', 0);
|
||||
},
|
||||
|
||||
produk_ubah: function(acell){
|
||||
this.produk_show('edit', acell[0]);
|
||||
},
|
||||
|
||||
produk_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[1]+'"</b> ?', function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode=del','InvID='+acell[0]],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('tabel-produk');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
produk_simpan: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode','InvID','Grup_InvID','MerekID','Nama_Produk='+encodeURIComponent($('#Nama_Produk').val()),'StokID','NormalID','Harga_Beli','Harga_Tambah','Stok_Min','Stok_Max','Aktif'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('tabel-produk');
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses simpan data!');
|
||||
}
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
produk_batal: function(){
|
||||
if ($('#mode').val()=='add'){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan batalkan Penambahan Barang ?', function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode=cancel','InvID','mode_before=add'],
|
||||
onSuccess: function(){
|
||||
this.data_query('tabel-produk');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
return false;
|
||||
}
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan batalkan Perubahan Detail Barang ?', function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode=cancel','InvID'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
kemasan_batal: function(){
|
||||
var dt = $('#divKemasanTabel').DataTable(), tr, l_row;
|
||||
tr = $('#butBatalKemasan').closest('tr');
|
||||
l_row = dt.row(tr.prev('tr'));
|
||||
if (l_row.child.isShown()) l_row.nodes().to$().find('.fon-tabel-dt').click();
|
||||
if (l_row.data()[0]=='0') l_row.remove().draw(true);
|
||||
},
|
||||
|
||||
kemasan_add: function(){
|
||||
var dt = $('#divKemasanTabel').DataTable(), l_row;
|
||||
dt.order([0,'desc']);
|
||||
l_row = dt.row(':last');
|
||||
if (!dt.data().count() || l_row.data()[0]!=='0'){
|
||||
dt.row.add(['0','','SKU_BARU','',0,0,0,0,0,'<a class="table-icon fon-tabel-dt" tabindex="-1" title="Detail"><i class="bi-pencil"></i></a>']).draw(true);
|
||||
l_row = dt.row(':last');
|
||||
}
|
||||
if (!l_row.child.isShown()) l_row.nodes().to$().find('.fon-tabel-dt').click();
|
||||
},
|
||||
|
||||
kemasan_form: function(acell, div){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail-kemasan','InvID','InvKemasanID='+acell[0],'Nama_Satuan='+$('#StokID').find(':selected').text()],
|
||||
onSuccess: function(adata){
|
||||
$(div).html(adata.html);
|
||||
$(div)
|
||||
.find('#butBatalKemasan').click(function(e){
|
||||
this.kemasan_batal();
|
||||
}.bind(this)).end()
|
||||
.find('#butSimpanKemasan').click(function(e){
|
||||
this.kemasan_check();
|
||||
}.bind(this));
|
||||
this.calc_Modal();
|
||||
this.calc_Harga(1);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
kemasan_del: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[1]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-kemasan','mode','mode_detail=delete','InvID','InvKemasanID='+acell[0]],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
kemasan_save: function(){
|
||||
if ($('#Qty').val()==0){
|
||||
FoniaJS.showInfo('Mohon isi jumlah Qty / Kemasan !');
|
||||
return false;
|
||||
}
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-kemasan','mode','mode_detail=update','InvID','InvKemasanID','SatuanID','SatuanLamaID','Kode_Barcode','Qty','Harga_Jual'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Sukses menyimpan kemasan produk.');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
kemasan_check: function(){
|
||||
if ($('#SatuanID').val()==$('#SatuanLamaID').val()) {
|
||||
this.kemasan_save();
|
||||
return;
|
||||
}
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=check-kemasan','InvID','SatuanID'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.ada==true) {
|
||||
FoniaJS.showInfo("Nama kemasan telah ada dalam sistem!");
|
||||
} else {
|
||||
this.kemasan_save();
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="tabel-produk"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-produk','Cari_Produk','Filter_Produk']
|
||||
}).send();
|
||||
} else if (tipe=="tabel-kemasan"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tabel-kemasan','mode','InvID']
|
||||
}).send();
|
||||
} else if (tipe=="restore-tabel"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=restore-tabel','InvID']
|
||||
}).send();
|
||||
}
|
||||
},
|
||||
|
||||
hitung_HPP: function(){
|
||||
$('#Harga_Pokok').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Harga_Beli').val()) + FoniaJS.StrToFloat($('#Harga_Tambah').val()), 0));
|
||||
},
|
||||
|
||||
calc_Modal: function(){
|
||||
$('#Harga_Modal').val(FoniaJS.FloatToStr(FoniaJS.StrToFloat($('#Harga_Pokok').val()) * FoniaJS.StrToFloat($('#Qty').val())));
|
||||
this.calc_Harga(1);
|
||||
},
|
||||
|
||||
calc_Harga: function(tipe){
|
||||
var harga = FoniaJS.StrToFloat($('#Harga_Jual').val());
|
||||
var pjual = FoniaJS.StrToFloat($('#Persen_Jual').val());
|
||||
var hmodal = FoniaJS.StrToFloat($('#Harga_Modal').val());
|
||||
if (tipe==1){
|
||||
$('#Persen_Jual').val(FoniaJS.FloatToStr((harga - hmodal) / harga * 100, 2));
|
||||
} else {
|
||||
$('#Harga_Jual').val(FoniaJS.FloatToStr(hmodal / (100 - pjual) * 100));
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,106 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/produk_grup.js
|
||||
Desc. : JS - Tabel Master Grup Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : February 8th, 2011.
|
||||
Last Modified : October 5th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var ProdukGrupJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Grup').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Grup').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Grup');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=grup-detail','mode_detail='+mode,'Grup_InvID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Grup Barang', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_check();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','Grup_InvID='+acell[0],'Cari_Grup'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_check: function(){
|
||||
var _kode = $('#Kode_Grup').val();
|
||||
if (!_kode.match(/^[0-9]+$/)) {
|
||||
FoniaJS.showError('Tolong pastikan kembali Kode Grup adalah angka !');
|
||||
FoniaJS.setFocus('#Kode_Grup');
|
||||
return;
|
||||
}
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=kode-check','Grup_InvID','Kode_Grup'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.ada==true) {
|
||||
FoniaJS.showInfo('Kode Grup telah ada dalam sistem!');
|
||||
} else {
|
||||
this.detail_save();
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','Grup_InvID','Kode_Grup','Nama_Grup','Margin','Aktif','Cari_Grup'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Grup']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/rek_pos.js
|
||||
Desc. : JS - Tabel Master Jenis Pembayaran POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 9th, 2014.
|
||||
Last Modified : October 8th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var RekPOSJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Kartu').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Kartu').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Kartu');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=kartu-detail','mode_detail='+mode,'KartuID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Jenis Pembayaran POS', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','KartuID='+acell[0],'Cari_Kartu'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','KartuID','Kode_Kartu','Nama_Kartu','Aktif','Cari_Kartu'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Kartu']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/satuan.js
|
||||
Desc. : JS - Tabel Master Satuan Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 19th, 2010.
|
||||
Last Modified : October 5th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var SatuanJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Satuan').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Satuan').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Satuan');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=satuan-detail','mode_detail='+mode,'SatuanID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Satuan', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','SatuanID='+acell[0],'Cari_Satuan'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','SatuanID','Kode_Satuan','Nama_Satuan','Aktif','Cari_Satuan'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Satuan']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,96 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/supplier.js
|
||||
Desc. : JS - Tabel Master Supplier
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : December 7th, 2010.
|
||||
Last Modified : October 7th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var SupplierJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_Sup').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_Sup').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_Sup');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=sup-detail','mode='+mode,'SupID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Supplier', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('add', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('edit', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode=del','SupID='+acell[0]],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('detail');
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses hapus data!');
|
||||
}
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSON({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=save','mode','SupID','Kode_Sup','Nama_Sup','Alamat_Sup','Kota_Sup','Telp_Sup','Email_Sup','Kontak_Sup','No_NPWP','No_NITKU','Aktif'],
|
||||
onSuccess: function(adata){
|
||||
if (adata.status==true){
|
||||
this.data_query('detail');
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
}else{
|
||||
FoniaJS.showInfo('Ada masalah dalam proses simpan data!');
|
||||
}
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_Sup']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/js/tab/tx_kas.js
|
||||
Desc. : JS - Tabel Master Jenis Transaksi Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 7th, 2015.
|
||||
Last Modified : October 8th, 2025.
|
||||
|
||||
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
var TXKasJS = {
|
||||
PHP: '',
|
||||
KODE: '',
|
||||
|
||||
loading: function(){
|
||||
this.data_query('detail');
|
||||
$('#Cari_TX').keydown(function(e){
|
||||
var key = e.keyCode || e.which || 0;
|
||||
if (key==13 && e.target.value!='') this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butSearch').click(function(e){
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
$('#butAll').click(function(){
|
||||
$('#Cari_TX').val('');
|
||||
this.data_query('detail');
|
||||
}.bind(this));
|
||||
FoniaJS.setFocus('#Cari_TX');
|
||||
},
|
||||
|
||||
detail_show: function(mode, ID){
|
||||
new Request({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=tx-detail','mode_detail='+mode,'TXID='+ID],
|
||||
onSuccess: function(txt){
|
||||
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Jenis Transaksi Kas', txt, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){
|
||||
$('#winDetail').find('#butWSimpan').click(function(){this.detail_save();}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
detail_tambah: function(){
|
||||
this.detail_show('insert', 0);
|
||||
},
|
||||
|
||||
detail_ubah: function(acell){
|
||||
this.detail_show('update', acell[0]);
|
||||
},
|
||||
|
||||
detail_hapus: function(acell){
|
||||
FoniaJS.showConfirm('Konfirmasi', 'Yakin akan hapus <b>"'+acell[2]+'"</b> ?', function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail=delete','TXID='+acell[0],'Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses hapus data sukses!');
|
||||
}.bind(this)
|
||||
}).send();
|
||||
}.bind(this), 'danger');
|
||||
},
|
||||
|
||||
detail_save: function(){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','mode_detail','TXID','Grup_TX','Kode_TX','Nama_TX','Aktif','Cari_TX'],
|
||||
onSuccess: function(){
|
||||
FoniaJS.showInfo('Proses simpan data sukses!');
|
||||
FoniaJS.closeWindow(this.winDetail);
|
||||
}.bind(this)
|
||||
}).send();
|
||||
},
|
||||
|
||||
data_query: function(tipe, mode){
|
||||
if (tipe=="detail"){
|
||||
new Request.JSONF({
|
||||
url: this.PHP,
|
||||
sendParam: ['data=detail','Cari_TX']
|
||||
}).send();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/php/disp/config.php
|
||||
Desc. : PHP - Konfigurasi Display POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 4th, 2013.
|
||||
Last Modified : December 7th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode");
|
||||
$id_reg = Param::Get("REG_ID", $_SESSION['__WEB_APP']['REG_ID']);
|
||||
|
||||
if ( $data == "form-display" ) {
|
||||
if ( $mode == "save" ) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("disp_config");
|
||||
$sql->add_param("MON_ENABLE");
|
||||
$sql->add_param("Text_Run");
|
||||
$sql->add_param("Warna");
|
||||
$sql->add_param("Font");
|
||||
$sql->add_param("Promo_Idle");
|
||||
$sql->add_param("Promo_Durasi");
|
||||
$sql->add_param("POLE_ENABLE");
|
||||
$sql->add_param("POLE_PORT");
|
||||
$sql->add_param("POLE_START1");
|
||||
$sql->add_param("POLE_START2");
|
||||
$sql->add_param("POLE_END1");
|
||||
$sql->add_param("POLE_END2");
|
||||
$sql->add_where("REG_ID");
|
||||
$sql->UpdateDB();
|
||||
|
||||
$ajson['sukses'] = true;
|
||||
$mode = "view";
|
||||
}
|
||||
|
||||
$para = [];
|
||||
if ($id_reg > 0) {
|
||||
$db->Query("SELECT * FROM disp_config WHERE REG_ID='".$id_reg."' LIMIT 1");
|
||||
if ($db->Next()) $para = $db->AllRow();
|
||||
$db->Query("SELECT CABANGID FROM inv_config WHERE REG_ID='".$para['REG_ID']."' LIMIT 1");
|
||||
if ($db->Next()) $para = array_merge($para, $db->AllRow());
|
||||
$db->Query("SELECT Nama_Cab FROM para_cabang WHERE CabID='".$para['CABANGID']."' LIMIT 1");
|
||||
if ($db->Next()) $para = array_merge($para, $db->AllRow());
|
||||
}
|
||||
|
||||
$benable = ($mode=="edit") ? true : false;
|
||||
$form = new Form($db);
|
||||
$tmon_ena = $form->switch("_", "MON_ENABLE", $para['MON_ENABLE'], $benable, false, [1,0]);
|
||||
$ttext_run = $form->textarea("_", "Text_Run", $para['Text_Run'], $benable, false, 2, "tulisan banner");
|
||||
$twarna = $form->color("_", "Warna", $para['Warna'], $benable, false);
|
||||
$tfont = $form->textbox("_", "Font", $para['Font'], $benable, false, "number");
|
||||
$tpro_idle = $form->textbox("_", "Promo_Idle", $para['Promo_Idle'], $benable, false, "number");
|
||||
$tpro_dur = $form->textbox("_", "Promo_Durasi", $para['Promo_Durasi'], $benable, false, "number");
|
||||
$tpole_ena = $form->switch("_", "POLE_ENABLE", $para['POLE_ENABLE'], $benable, false, [1,0]);
|
||||
$tpole_port = $form->option("_", "POLE_PORT", $para['POLE_PORT'], $benable, false, [$para['POLE_PORT']=>$para['POLE_PORT']]);
|
||||
$tpole_end1 = $form->textbox("_", "POLE_END1", $para['POLE_END1'], $benable, false, "text", "baris 1 farewell", 20);
|
||||
$tpole_end2 = $form->textbox("_", "POLE_END2", $para['POLE_END2'], $benable, false, "text", "baris 2 farewell", 20);
|
||||
$tpole_start1 = $form->textbox("_", "POLE_START1", $para['POLE_START1'], $benable, false, "text", "baris 1 welcome", 20);
|
||||
$tpole_start2 = $form->textbox("_", "POLE_START2", $para['POLE_START2'], $benable, false, "text", "baris 2 welcome", 20);
|
||||
|
||||
$ajson['html'] = '
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="monitor-tab" data-bs-toggle="tab" data-bs-target="#monitor" type="button" role="tab" aria-controls="monitor" aria-selected="true">Monitor Display</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="pole-tab" data-bs-toggle="tab" data-bs-target="#pole" type="button" role="tab" aria-controls="pole" aria-selected="false">Pole Display</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="monitor" role="tabpanel" aria-labelledby="monitor-tab">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="MON_ENABLE">Status Display Monitor</label>
|
||||
<div class="col col-form-label">'.$tmon_ena.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Text_Run">Tulisan Banner</label>
|
||||
<div class="col">'.$ttext_run.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Warna">Warna Tulisan</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$twarna.Form_Info("Warna tulisan banner.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Font">Ukuran Font</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tfont.Form_Info("Ukuran font tampilan banner.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Promo_Idle">Waktu Jedah Promo</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tpro_idle.Form_Info("Waktu tunggu tampil promo setelah transaksi POS terakhir.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Promo_Durasi">Waktu Durasi Promo</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tpro_dur.Form_Info("Waktu durasi penggantian tulisan promo (bagian bawah)").'</div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="pole" role="tabpanel" aria-labelledby="pole-tab">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="POLE_ENABLE">Status Pole Display</label>
|
||||
<div class="col col-form-label">'.$tpole_ena.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="POLE_PORT">Port Pole Display</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tpole_port.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="POLE_START1">Baris 1 Welcome</label>
|
||||
<div class="col"><div class="input-group">'.$tpole_start1.Form_Info("Maximum 20 huruf.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="POLE_START2">Baris 2 Welcome</label>
|
||||
<div class="col"><div class="input-group">'.$tpole_start2.Form_Info("Maximum 20 huruf.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="POLE_END1">Baris 1 Farewell</label>
|
||||
<div class="col"><div class="input-group">'.$tpole_end1.Form_Info("Maximum 20 huruf.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="POLE_END2">Baris 2 Farewell</label>
|
||||
<div class="col"><div class="input-group">'.$tpole_end2.Form_Info("Maximum 20 huruf.").'</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >';
|
||||
$ajson['Nama_Cabang'] = $para['Nama_Cab'];
|
||||
|
||||
} else if ( $data == "brow-cabang" ) {
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT C.*,G.REG_ID FROM (SELECT * FROM para_cabang WHERE Aktif=1) C LEFT JOIN inv_config G ON (G.CABANGID=C.CabID)");
|
||||
$obj->add_field("REG_ID", "ID", "hid");
|
||||
$obj->add_field("Kode_Cab", "Kode", "c");
|
||||
$obj->add_field("Nama_Cab", "Nama Cabang", "awr");
|
||||
$obj->set_field_order("Kode_Cab", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "DISPConfigJS.cab_select");
|
||||
$obj->set_func_navi("DISPConfigJS.data_query('brow-cabang')");
|
||||
$ajson[] = $obj->json_table("divBrowCab");
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '<div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Nama_Cabang" type="text" disabled readonly><button id="butBrow" class="btn btn-info" type="button" onclick="DISPConfigJS.cabang_brow();"><i class="bi-search"></i></button></div></div></div><div class="card"><div class="card-body"><div id="divDisplay"> </div><input type="hidden" id="REG_ID" value="'.$id_reg.'"></div></div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/php/disp/iklan.php
|
||||
Desc. : PHP - Konfigurasi Display Iklan POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 15th, 2015.
|
||||
Last Modified : December 8th, 2025.
|
||||
|
||||
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_promo = Param::Get("PromoID", 0);
|
||||
|
||||
if ( $data == "promo-detail" ) {
|
||||
$atabel = ['PromoID'=>0,'CabID'=>0,'Tanggal'=>tgl_ymd(),'Aktif'=>1];
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("SELECT * FROM disp_promo WHERE PromoID='".$id_promo."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$ttanggal = $form->datebox("_", "Tanggal", $atabel['Tanggal'], true, false);
|
||||
$tinfo = $form->textarea("_", "Info", $atabel['Info'], true, false, 3, "keterangan iklan");
|
||||
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, false, [1=>"Aktif",0=>"Tidak"]);
|
||||
$ajson['html'] = '
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-8">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tanggal">Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$ttanggal.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Info">Keterangan</label>
|
||||
<div class="col">'.$tinfo.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
|
||||
<div class="col col-form-label">'.$taktif.'</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-4 text-center">
|
||||
<img class="img-fluid img-thumbnail mx-auto mb-2 d-block" id="imgPhoto" src="">
|
||||
<label class="input-group-btn"><span class="btn rounded-pill btn-info me-2"><i class="bi-cloud-upload me-1"></i>Gambar<input type="file" name="FileGambar" id="FileGambar" style="display:none;"></span></label><br><small class="text-muted">Ukuran file max <strong>20MB</strong> ( <i>png / jpg / gif</i> )</small>
|
||||
|
||||
</div>
|
||||
<input type="hidden" id="PromoID" value="'.$atabel['PromoID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("disp_promo");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param_date("Tanggal");
|
||||
$sql->add_param("Info");
|
||||
$sql->add_param("Aktif");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("PromoID");
|
||||
|
||||
if ($mode_detail=="insert") {
|
||||
$sql->add_param("PromoID");
|
||||
$sql->add_param("Tipe", 2);
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail=="update") {
|
||||
$sql->UpdateDB();
|
||||
} else if ($mode_detail=="delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$tcari = trim(Param::Get("Cari_Iklan"));
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(DATE_FORMAT(Tanggal,'%d-%m-%Y'),Info) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT I.*,IF(ISNULL(C.Nama_Cab),'SEMUA CABANG',C.Nama_Cab) Nama_Cab FROM (SELECT * FROM disp_promo WHERE Tipe=2".$tsql.") I LEFT JOIN para_cabang C ON (C.CabID=I.CabID)");
|
||||
$obj->add_field("PromoID", "ID", "hid");
|
||||
$obj->add_field("Tanggal", "Tanggal", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Cab", "Cabang", "l");
|
||||
$obj->add_field("Info", "Keterangan", "awr");
|
||||
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
|
||||
$obj->set_field_order("Tanggal", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "DISPIklanJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "DISPIklanJS.detail_hapus");
|
||||
$obj->set_func_navi("DISPIklanJS.data_query('detail')");
|
||||
$obj->set_func_btn("DISPIklanJS.detail_tambah", "+ Iklan");
|
||||
$ajson[] = $obj->json_table("divDetail");
|
||||
|
||||
} else if ( $data == "upload-gambar" ) {
|
||||
$ajson['result'] = 0;
|
||||
|
||||
if (isset($_FILES['Gambar1'])) {
|
||||
$file_ok = false;
|
||||
$file_name = $_FILES['Gambar1']['name'];
|
||||
$file_size = $_FILES['Gambar1']['size'];
|
||||
if ($file_size < 20480000) {
|
||||
$file_ext = strtolower(pathinfo("gambar/".$file_name, PATHINFO_EXTENSION));
|
||||
if (in_array($file_ext, ["png","jpg","jpeg","gif"])) {
|
||||
$file_ok = true;
|
||||
} else {
|
||||
$ajson['message'] = "File tidak dapat diterima !";
|
||||
}
|
||||
} else {
|
||||
$ajson['message'] = "Ukuran file diatas 20MB !";
|
||||
}
|
||||
if ($file_ok) {
|
||||
$file_name = $_FILES['Gambar1']['tmp_name'];
|
||||
$finfo = new finfo(FILEINFO_MIME);
|
||||
$type = $finfo->file($file_name);
|
||||
$mime = substr($type, 0, strpos($type, ';'));
|
||||
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("UPDATE disp_promo SET Image=\"".addslashes(file_get_contents($file_name))."\",Mime='".$mime."' WHERE PromoID='".$id_promo."'");
|
||||
} else {
|
||||
$db->Query("INSERT INTO disp_promo (Image,Mime) VALUES(\"".addslashes(file_get_contents($file_name))."\",'".$mime."')");
|
||||
$id_promo = $db->LastInsertID();
|
||||
}
|
||||
$ajson['result'] = 1;
|
||||
$ajson['PromoID'] = $id_promo;
|
||||
}
|
||||
} else {
|
||||
$ajson = ['result' => 0, 'message' => 'File tidak ditemukan atau masalah internal !'];
|
||||
}
|
||||
|
||||
} else if ( $data == "image") {
|
||||
$gambar = base64_decode("/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKAP/2Q==");
|
||||
$mime = "image/jpg";
|
||||
|
||||
$db->Query("SELECT Image,Mime FROM disp_promo WHERE PromoID='".$id_promo."' AND Image IS NOT NULL");
|
||||
if ($db->Next()) {
|
||||
$gambar = $db->Row("Image");
|
||||
$mime = $db->Row("Mime");
|
||||
}
|
||||
|
||||
header("Content-type: ".$mime);
|
||||
echo $gambar;
|
||||
die();
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-header custom-style">Konfigurasi Display Iklan POS</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Iklan" 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="divDetail"> </div></div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/php/disp/promo.php
|
||||
Desc. : PHP - Konfigurasi Display Promo POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 15th, 2015.
|
||||
Last Modified : December 8th, 2025.
|
||||
|
||||
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_promo = Param::Get("PromoID", 0);
|
||||
|
||||
if ( $data == "promo-detail" ) {
|
||||
$atabel = ['PromoID'=>0,'Tanggal'=>tgl_ymd(),'Warna'=>"#FFFFFF",'Font'=>40,'Aktif'=>1];
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("SELECT * FROM disp_promo WHERE PromoID='".$id_promo."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$ttanggal = $form->datebox("_", "Tanggal", $atabel['Tanggal'], true, false);
|
||||
$tinfo = $form->textarea("_", "Info", $atabel['Info'], true, false, 2, "info promo");
|
||||
$twarna = $form->color("_", "Warna", $atabel['Warna'], true, false);
|
||||
$tfont = $form->textbox("_", "Font", $atabel['Font'], true, false, "number");
|
||||
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, false, [1=>"Aktif",0=>"Tidak"]);
|
||||
$ajson['html'] = '
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-8">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tanggal">Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$ttanggal.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Info">Isi Informasi</label>
|
||||
<div class="col">'.$tinfo.'<small class="text-muted">[br] = Ganti Baris, [i]..[/i] = Italic, [b]..[/b] = Bold</small></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Warna">Warna Tulisan</label>
|
||||
<div class="col-sm-6 col-lg-5"><div class="input-group">'.$twarna.Form_Info("Warna tulisan promo.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Font">Ukuran Font</label>
|
||||
<div class="col-sm-6 col-lg-5"><div class="input-group">'.$tfont.Form_Info("Ukuran font promo.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
|
||||
<div class="col col-form-label">'.$taktif.'</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-4 text-center">
|
||||
<img class="img-fluid img-thumbnail mx-auto mb-2 d-block" id="imgPhoto" src="">
|
||||
<label class="input-group-btn"><span class="btn rounded-pill btn-info me-2"><i class="bi-cloud-upload me-1"></i>Gambar<input type="file" name="FileGambar" id="FileGambar" style="display:none;"></span></label><br><small class="text-muted">Ukuran file max <strong>20MB</strong> ( <i>png / jpg / gif</i> )</small>
|
||||
|
||||
</div>
|
||||
<input type="hidden" id="PromoID" value="'.$atabel['PromoID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("disp_promo");
|
||||
$sql->add_param_date("Tanggal");
|
||||
$sql->add_param("Info");
|
||||
$sql->add_param("Warna");
|
||||
$sql->add_param("Font");
|
||||
$sql->add_param("Aktif");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("PromoID");
|
||||
|
||||
if ($mode_detail=="insert") {
|
||||
$sql->add_param("PromoID");
|
||||
$sql->add_param("Tipe", 1);
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail=="update") {
|
||||
$sql->UpdateDB();
|
||||
} else if ($mode_detail=="delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$tcari = trim(Param::Get("Cari_Promo"));
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(DATE_FORMAT(Tanggal,'%d-%m-%Y'),Info) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM disp_promo WHERE Tipe=1".$tsql);
|
||||
$obj->add_field("PromoID", "ID", "hid");
|
||||
$obj->add_field("Tanggal", "Tanggal", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Info", "Isi Informasi / Promo", "awr");
|
||||
$obj->add_field("Warna", "Warna", "c");
|
||||
$obj->add_field("Font", "Font", "c");
|
||||
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
|
||||
$obj->set_field_order("Tanggal", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "DISPPromoJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "DISPPromoJS.detail_hapus");
|
||||
$obj->set_func_navi("DISPPromoJS.data_query('detail')");
|
||||
$obj->set_func_btn("DISPPromoJS.detail_tambah", "+ Promo");
|
||||
$ajson[] = $obj->json_table("divDetail");
|
||||
|
||||
} else if ( $data == "upload-gambar" ) {
|
||||
$ajson['result'] = 0;
|
||||
|
||||
if (isset($_FILES['Gambar1'])) {
|
||||
$file_ok = false;
|
||||
$file_name = $_FILES['Gambar1']['name'];
|
||||
$file_size = $_FILES['Gambar1']['size'];
|
||||
if ($file_size < 20480000) {
|
||||
$file_ext = strtolower(pathinfo("gambar/".$file_name, PATHINFO_EXTENSION));
|
||||
if (in_array($file_ext, ["png","jpg","jpeg","gif"])) {
|
||||
$file_ok = true;
|
||||
} else {
|
||||
$ajson['message'] = "File tidak dapat diterima !";
|
||||
}
|
||||
} else {
|
||||
$ajson['message'] = "Ukuran file diatas 20MB !";
|
||||
}
|
||||
if ($file_ok) {
|
||||
$file_name = $_FILES['Gambar1']['tmp_name'];
|
||||
$finfo = new finfo(FILEINFO_MIME);
|
||||
$type = $finfo->file($file_name);
|
||||
$mime = substr($type, 0, strpos($type, ';'));
|
||||
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("UPDATE disp_promo SET Image=\"".addslashes(file_get_contents($file_name))."\",Mime='".$mime."' WHERE PromoID='".$id_promo."'");
|
||||
} else {
|
||||
$db->Query("INSERT INTO disp_promo (Image,Mime) VALUES(\"".addslashes(file_get_contents($file_name))."\",'".$mime."')");
|
||||
$id_promo = $db->LastInsertID();
|
||||
}
|
||||
$ajson['result'] = 1;
|
||||
$ajson['PromoID'] = $id_promo;
|
||||
}
|
||||
} else {
|
||||
$ajson = ['result' => 0, 'message' => 'File tidak ditemukan atau masalah internal !'];
|
||||
}
|
||||
|
||||
} else if ( $data == "image") {
|
||||
$gambar = base64_decode("/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKAP/2Q==");
|
||||
$mime = "image/jpg";
|
||||
|
||||
$db->Query("SELECT Image,Mime FROM disp_promo WHERE PromoID='".$id_promo."' AND Image IS NOT NULL");
|
||||
if ($db->Next()) {
|
||||
$gambar = $db->Row("Image");
|
||||
$mime = $db->Row("Mime");
|
||||
}
|
||||
|
||||
header("Content-type: ".$mime);
|
||||
echo $gambar;
|
||||
die();
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-header custom-style">Konfigurasi Display Promo POS</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Promo" 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="divDetail"> </div></div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,601 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/func.iss.php
|
||||
Desc. : PHP - Fungsi - Fungsi ISS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : February 10th, 2012.
|
||||
Last Modified : January 16th, 2019.
|
||||
|
||||
(c) 2012 - 2019, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../vendor/autoload.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
|
||||
$fdb = new MySQL();
|
||||
|
||||
/************************* PELUNASAN BELI & JUAL *************************/
|
||||
|
||||
function Update_Lunas_Sup($id_sup = 0) {
|
||||
global $fdb;
|
||||
if ($id_sup == 0) return false;
|
||||
$fdb->Query("UPDATE para_supplier S,(SELECT SupID,COUNT(*) Item FROM inv_beli WHERE Lunas=0 AND SupID='".$id_sup."') B SET S.Lunas=B.Item WHERE S.SupID=B.SupID AND S.SupID='".$id_sup."'");
|
||||
}
|
||||
|
||||
/************************* BARANG / PRODUK *************************/
|
||||
|
||||
function genEAN8($pref = "00", $numb = 1) {
|
||||
$code = $pref . str_pad($numb, 5, '0', STR_PAD_LEFT);
|
||||
$bflag = true;
|
||||
$sum = 0;
|
||||
for ($i = strlen($code) - 1; $i >= 0; $i--) {
|
||||
$sum += (int)$code[$i] * ($bflag?3:1);
|
||||
$bflag = !$bflag;
|
||||
}
|
||||
$code .= (10 - ($sum % 10)) % 10;
|
||||
return $code;
|
||||
}
|
||||
|
||||
function SKU_Baru($id_grup = 0) {
|
||||
global $fdb;
|
||||
$tno = "00"; $ino = 0;
|
||||
$fdb->Query("SELECT Kode_Grup FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");;
|
||||
if ($fdb->Next()) $tno = isi_nol($fdb->Row("Kode_Grup", "00"), 2);
|
||||
$fdb->Query("SELECT MAX(MID(Kode_SKU,3,5)) SKU FROM inv_produk_kemasan WHERE LEFT(Kode_SKU,2)='".$tno."'");
|
||||
if ($fdb->Next()) $ino = intval($fdb->Row("SKU", 0));
|
||||
return genEAN8($tno, ++$ino);
|
||||
}
|
||||
|
||||
/************************* POS *************************/
|
||||
|
||||
function Nomor_POS_Baru($tgl = "", $save = false) {
|
||||
global $fdb;
|
||||
$tno = $_SESSION['__APP_INV']['KD_POS'] . date("y") . abjad(date("n"));
|
||||
if ($tgl <> "") {
|
||||
$tmp = explode("-", $tgl);
|
||||
$tno = $_SESSION['__APP_INV']['KD_POS'] . substr($tmp[2],2,2) . abjad(intval($tmp[1]));
|
||||
}
|
||||
$tno .= $_SESSION['__WEB_APP']['SERVER_ID'];
|
||||
$ino = 0;
|
||||
$fdb->Query("SELECT MAX(RIGHT(No_Jual,5)) Nomor FROM inv_jual WHERE LEFT(No_Jual,".strlen($tno).")='".$tno."'");
|
||||
if ($fdb->Next()) $ino = intval($fdb->Row("Nomor", 0));
|
||||
$tno .= isi_nol(++$ino, 5);
|
||||
if ($save == true) $fdb->Query("INSERT INTO inv_jual SET No_Jual='".$tno."'");
|
||||
return $tno;
|
||||
}
|
||||
|
||||
function Nomor_Baru($tipe = "B", $tgl = "", $save = false) {
|
||||
global $fdb;
|
||||
$atipe = ['O'=>["No_Opname","inv_opname"],'M'=>["No_Mutasi","inv_mutasi"],'B'=>["No_Beli","inv_beli"],'R'=>["No_Beli","inv_beli"],'P'=>["No_PO","inv_po"]];
|
||||
$tno = $tipe . date("y") . abjad(date("n"));
|
||||
if ($tgl <> "") {
|
||||
$tmp = explode("-", $tgl);
|
||||
$tno = $tipe . substr($tmp[2],2,2) . abjad(intval($tmp[1]));
|
||||
}
|
||||
$tno .= $_SESSION['__WEB_APP']['SERVER_ID'];
|
||||
$ino = 0;
|
||||
$fdb->Query("SELECT MAX(RIGHT(".$atipe[$tipe][0].",4)) Nomor FROM ".$atipe[$tipe][1]." WHERE LEFT(".$atipe[$tipe][0].",".strlen($tno).")='".$tno."'");
|
||||
if ($fdb->Next()) $ino = intval($fdb->Row("Nomor", 0));
|
||||
$tno .= isi_nol(++$ino, 4);
|
||||
if ($save == true) $fdb->Query("INSERT INTO ".$atipe[$tipe][1]." SET ".$atipe[$tipe][0]."='".$tno."'");
|
||||
return $tno;
|
||||
}
|
||||
|
||||
function Detail_Copy($no_ref = "", $bunix = false, $ismutasi = false) {
|
||||
global $fdb;
|
||||
if ($no_ref == "") return;
|
||||
Detail_Cancel($no_ref);
|
||||
$tsql = ($ismutasi == false) ? "" : " AND Qty>0";
|
||||
$fdb->Query("INSERT INTO tmp_inv_detail (No_Ref,ID,NotaID,CabID,Tgl_Ref,InvID,SatuanID,Qty,Stok,Harga_Beli,Harga_Jual,Disk_Rupiah,Disk_Persen1,Disk_Persen2,Disk_Persen3,Disk_Persen4,Disk_Persen5,Total_Diskon,Promo,UserID,Unix) SELECT No_Ref,ID,NotaID,CabID,Tgl_Ref,InvID,SatuanID,Qty,Stok,Harga_Beli,Harga_Jual,Disk_Rupiah,Disk_Persen1,Disk_Persen2,Disk_Persen3,Disk_Persen4,Disk_Persen5,Total_Diskon,Promo,UserID,'".(($bunix)?user_unix():0)."' FROM inv_detail WHERE No_Ref='".$no_ref."'".$tsql);
|
||||
}
|
||||
|
||||
function Detail_Save($no_ref = "", $id_nota = 0, $id_cab = 0, $stgl = "", $is_baru = false, $no_lama = "", $ismutasi = false, $id_cab2 = 0) {
|
||||
global $fdb;
|
||||
if ($no_ref == "") return;
|
||||
$fdb->Query("DELETE FROM inv_detail WHERE No_Ref='".$no_ref."'");
|
||||
if ($is_baru) {
|
||||
Detail_Cancel($no_ref);
|
||||
$fdb->Query("UPDATE tmp_inv_detail SET No_Ref='".$no_ref."' WHERE No_Ref='".$no_lama."' AND Unix='".user_unix()."'");
|
||||
}
|
||||
$qtgl = ($stgl == "") ? "0000-00-00" : tgl_sql2str($stgl);
|
||||
$fdb->Query("INSERT INTO inv_detail (No_Ref,ID,NotaID,CabID,Tgl_Ref,InvID,SatuanID,Qty,Stok,Harga_Beli,Harga_Jual,Disk_Rupiah,Disk_Persen1,Disk_Persen2,Disk_Persen3,Disk_Persen4,Disk_Persen5,Total_Diskon,Promo,UserID) SELECT No_Ref,ID,'".$id_nota."','".$id_cab."','".$qtgl."',InvID,SatuanID,Qty,Stok,Harga_Beli,Harga_Jual,Disk_Rupiah,Disk_Persen1,Disk_Persen2,Disk_Persen3,Disk_Persen4,Disk_Persen5,Total_Diskon,Promo,UserID FROM tmp_inv_detail WHERE No_Ref='".$no_ref."'");
|
||||
if ($ismutasi == true) $fdb->Query("INSERT INTO inv_detail (No_Ref,NotaID,CabID,Tgl_Ref,InvID,SatuanID,Qty,Stok,Harga_Beli,Harga_Jual,Disk_Rupiah,Disk_Persen1,Disk_Persen2,Disk_Persen3,Disk_Persen4,Disk_Persen5,Total_Diskon,Promo,UserID) SELECT No_Ref,'".$id_nota."','".$id_cab2."','".$qtgl."',InvID,SatuanID,-Qty,-Stok,Harga_Beli,Harga_Jual,Disk_Rupiah,Disk_Persen1,Disk_Persen2,Disk_Persen3,Disk_Persen4,Disk_Persen5,Total_Diskon,Promo,UserID FROM tmp_inv_detail WHERE No_Ref='".$no_ref."'");
|
||||
Detail_Cancel($no_ref);
|
||||
}
|
||||
|
||||
function Detail_Cancel($no_ref = "") {
|
||||
global $fdb;
|
||||
if ($no_ref == "") return;
|
||||
$fdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$no_ref."'");
|
||||
$fdb->Query("DELETE FROM tmp_inv_detail_lain WHERE No_Ref='".$no_ref."'");
|
||||
}
|
||||
|
||||
function Produk_Update($no_ref = "", $supid = 0) {
|
||||
global $fdb;
|
||||
$tdb = new MySQL();
|
||||
if ($no_ref == "" && $supid == 0) return;
|
||||
$fdb->Query("SELECT *,CEIL((Harga_Beli-(Total_Diskon/Qty))/(Stok/Qty)) HPP FROM inv_detail WHERE No_Ref='".$no_ref."'");
|
||||
while ($fdb->Next()) {
|
||||
if ($fdb->RowFloat("Harga_Beli",0)>0) $tdb->Query("UPDATE inv_produk SET Harga_Beli='".$fdb->Row("HPP")."',Harga_Pokok=Harga_Beli+Harga_Tambah WHERE InvID='".$fdb->Row("InvID")."'");
|
||||
$tdb->Query("INSERT IGNORE INTO inv_produk_sup SET InvID='".$fdb->Row("InvID")."',SupID='".$supid."',Aktif=1");
|
||||
$tdb->Query("UPDATE inv_produk_sup SET Aktif=0 WHERE InvID='".$fdb->Row("InvID")."' AND SupID<>'".$supid."'");
|
||||
}
|
||||
unset($tdb);
|
||||
}
|
||||
|
||||
/************************* TRANSAKSI PO *************************/
|
||||
|
||||
function PO_Detail_Copy($no_po = "", $bunix = false) {
|
||||
global $fdb;
|
||||
if ($no_po == "") return;
|
||||
PO_Detail_Cancel($no_po);
|
||||
$fdb->Query("INSERT INTO tmp_inv_po_detail (No_PO,ID,InvID,SatuanID,Qty,Harga_Beli,Harga_HPP,Invoice,DateStamp,UserID,Unix) SELECT No_PO,ID,InvID,SatuanID,Qty,Harga_Beli,Harga_HPP,Invoice,DateStamp,UserID,'".(($bunix)?user_unix():0)."' FROM inv_po_detail WHERE No_PO='".$no_po."'");
|
||||
}
|
||||
|
||||
function PO_Detail_Save($no_po = "", $is_baru = false, $no_lama = "") {
|
||||
global $fdb;
|
||||
if ($no_po == "") return;
|
||||
$fdb->Query("DELETE FROM inv_po_detail WHERE No_PO='".$no_po."'");
|
||||
if ($is_baru) {
|
||||
PO_Detail_Cancel($no_po);
|
||||
$fdb->Query("UPDATE tmp_inv_po_detail SET No_PO='".$no_po."' WHERE No_PO='".$no_lama."' AND Unix='".user_unix()."'");
|
||||
}
|
||||
$fdb->Query("INSERT INTO inv_po_detail (No_PO,ID,InvID,SatuanID,Qty,Harga_Beli,Harga_HPP,Invoice,DateStamp,UserID) SELECT No_PO,ID,InvID,SatuanID,Qty,Harga_Beli,Harga_HPP,Invoice,DateStamp,UserID FROM tmp_inv_po_detail WHERE No_PO='".$no_po."' AND Qty>0");
|
||||
PO_Detail_Cancel($no_po);
|
||||
}
|
||||
|
||||
function PO_Detail_Cancel($no_po = "") {
|
||||
global $fdb;
|
||||
if ($no_po == "") return;
|
||||
$fdb->Query("DELETE FROM tmp_inv_po_detail WHERE No_PO='".$no_po."'");
|
||||
}
|
||||
|
||||
/************************* TRANSAKSI PENDING *************************/
|
||||
|
||||
function Pending_Edit($nomor = "") {
|
||||
global $fdb;
|
||||
$fdb->Query("UPDATE tmp_inv_detail SET Unix='".user_unix()."' WHERE No_Ref='".$nomor."'");
|
||||
}
|
||||
|
||||
function Pending_Save($no_lama = "", $no_baru = "") {
|
||||
global $fdb;
|
||||
$fdb->Query("UPDATE tmp_inv_detail SET No_Ref='".$no_baru."' WHERE No_Ref='".$no_lama."' AND Unix='".user_unix()."'");
|
||||
}
|
||||
|
||||
function Pending_Delete($nomor = "") {
|
||||
global $fdb;
|
||||
$fdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$nomor."'");
|
||||
}
|
||||
|
||||
/************************* TRANSAKSI KAS *************************/
|
||||
|
||||
function Nomor_Kas_Baru($tipe = "K", $tgl = "", $save = false) {
|
||||
global $fdb;
|
||||
$atipe = array('K'=>array("No_Kas","gel_kas"),'G'=>array("No_Gaji","gel_gaji"));
|
||||
$tno = $tipe . date("y") . abjad(date("n"));
|
||||
if ($tgl <> "") {
|
||||
$tmp = explode("-", $tgl);
|
||||
$tno = $tipe . substr($tmp[2],2,2) . abjad(intval($tmp[1]));
|
||||
}
|
||||
$tno .= $_SESSION['__WEB_APP']['SERVER_ID'];
|
||||
$ino = 0;
|
||||
$fdb->Query("SELECT MAX(RIGHT(".$atipe[$tipe][0].",4)) Nomor FROM ".$atipe[$tipe][1]." WHERE LEFT(".$atipe[$tipe][0].",".strlen($tno).")='".$tno."'");
|
||||
if ($fdb->Next()) $ino = $fdb->RowFloat("Nomor", 0);
|
||||
$tno .= isi_nol($ino+1, 4);
|
||||
if ($save == true) $fdb->Query("INSERT INTO ".$atipe[$tipe][1]." SET ".$atipe[$tipe][0]."='".$tno."'");
|
||||
return $tno;
|
||||
}
|
||||
|
||||
/************************* PROMO *************************/
|
||||
|
||||
function Promo_Baru() {
|
||||
global $fdb;
|
||||
$ino = 1;
|
||||
$fdb->Query("SELECT MAX(PromoID)+1 Nomor FROM inv_promo");
|
||||
if ($fdb->Next()) $ino = $fdb->RowFloat("Nomor", 1);
|
||||
return $ino;
|
||||
}
|
||||
|
||||
function Promo_Hapus($no_nota="", $tgl_nota="") {
|
||||
global $fdb;
|
||||
$tdb = new MySQL();
|
||||
if ($no_nota=="") return false;
|
||||
$tgl_nota = ($tgl_nota=="") ? tgl_ymd() : tgl_sql2str($tgl_nota);//YYYY-MM-DD
|
||||
|
||||
$fdb->Query("SELECT * FROM inv_detail WHERE No_Ref='".$no_nota."' AND Promo IN (1,2,3)");
|
||||
while ($fdb->Next()) {
|
||||
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses-'".abs($fdb->Row("Qty"))."' WHERE Promo_InvID='".$fdb->Row("InvID")."' AND Promo_SatuanID='".$fdb->Row("SatuanID")."' AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo='".$fdb->Row("Promo")."' AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."'");
|
||||
}
|
||||
unset($tdb);
|
||||
}
|
||||
|
||||
function Promo_Barang($no_nota="", $tgl_nota="") {
|
||||
global $fdb;
|
||||
$tdb = new MySQL();
|
||||
if ($no_nota=="") return false;
|
||||
$tgl_nota = ($tgl_nota=="") ? tgl_ymd() : tgl_sql2str($tgl_nota);//YYYY-MM-DD
|
||||
|
||||
$apromo = [];
|
||||
$fdb->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND Promo IN (1,2)");
|
||||
while ($fdb->Next()) {
|
||||
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses-'".abs($fdb->Row("Qty"))."' WHERE Promo_InvID='".$fdb->Row("InvID")."' AND Promo_SatuanID='".$fdb->Row("SatuanID")."' AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo='".$fdb->Row("Promo")."' AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."'");
|
||||
if ($fdb->Row("Promo")==1) $tdb->Query("UPDATE tmp_inv_detail SET Disk_Rupiah=0,Total_Diskon=0,Promo=0 WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND ID='".$fdb->Row("ID")."'");
|
||||
if ($fdb->Row("Promo")==2) $tdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND ID='".$fdb->Row("ID")."'");
|
||||
}
|
||||
|
||||
$fdb->Query("SELECT *,(Jumlah_Promo-Jumlah_Proses) Jumlah_Sisa FROM inv_promo WHERE Aktif=1 AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo IN (1,2) AND (Jumlah_Promo-Jumlah_Proses)>0 AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."' AND CONCAT(InvID,':',SatuanID) IN (SELECT CONCAT(InvID,':',SatuanID) FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."')");
|
||||
if ($fdb->RecordCount()==0) return false;
|
||||
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
|
||||
|
||||
foreach($apromo as $_key => $val) {
|
||||
if ($val['Tipe_Promo']==1) {//1 potongan diskon
|
||||
$adetail = []; $aitem = [];
|
||||
$fdb->Query("SELECT COUNT(*) Item,SUM(-Qty) Qty,ID FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' ORDER BY ID");
|
||||
if ($fdb->Next()) $adetail = $fdb->AllRow();
|
||||
$fdb->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' AND ID='".$adetail['ID']."'");
|
||||
if ($fdb->Next()) $aitem = $fdb->AllRow();
|
||||
|
||||
$bpromo = false;
|
||||
if ($val['Pilih_Qty']==1 && $val['Qty_Min']<=$adetail['Qty']) {//minimum & masuk limit
|
||||
$bpromo = true;
|
||||
$qty_promo = ($adetail['Qty']<=$val['Jumlah_Sisa']) ? $adetail['Qty'] : $val['Jumlah_Sisa'];
|
||||
} else if ($val['Pilih_Qty']==2 && $val['Qty_Kali']<=$adetail['Qty']) {//kelipatan
|
||||
$bpromo = true;
|
||||
$qty_promo = floor($adetail['Qty']/$val['Qty_Kali']) * $val['Qty_Kali'];
|
||||
$qty_promo = ($qty_promo<=$val['Jumlah_Sisa']) ? $qty_promo : $val['Jumlah_Sisa'];
|
||||
}
|
||||
if ($bpromo == true) {
|
||||
if ($adetail['Item']>1) {//hapus duplikasi
|
||||
$tdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' AND ID<>'".$adetail['ID']."'");
|
||||
}
|
||||
$istok = $aitem['Stok'] / $aitem['Qty'];
|
||||
if ($qty_promo==$adetail['Qty']) {
|
||||
$aitem['Qty'] = $qty_promo * -1;
|
||||
$aitem['Stok'] = $qty_promo * $istok * -1;
|
||||
$aitem['Disk_Rupiah'] = $val['Promo_Disc'];
|
||||
$aitem['Total_Diskon'] = $qty_promo * $val['Promo_Disc'];
|
||||
$aitem['Promo'] = 1;
|
||||
fastUpdate("tmp_inv_detail", $aitem, ["No_Ref","Unix","ID"]);
|
||||
} else {
|
||||
$adisc = $aitem;
|
||||
$aitem['Qty'] = ($adetail['Qty']-$qty_promo) * -1;
|
||||
$aitem['Stok'] = ($adetail['Qty']-$qty_promo) * $istok * -1;
|
||||
fastUpdate("tmp_inv_detail", $aitem, ["No_Ref","Unix","ID"]);
|
||||
|
||||
$adisc['Qty'] = $qty_promo * -1;
|
||||
$adisc['Stok'] = $qty_promo * $istok * -1;
|
||||
$adisc['Disk_Rupiah'] = $val['Promo_Disc'];
|
||||
$adisc['Total_Diskon'] = $qty_promo * $val['Promo_Disc'];
|
||||
$adisc['Promo'] = 1;
|
||||
unset($adisc['ID']);
|
||||
fastInsert("tmp_inv_detail", $adisc);
|
||||
}
|
||||
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses+".$qty_promo." WHERE PromoID='".$val['PromoID']."'");
|
||||
}
|
||||
} else {//2 promo barang
|
||||
$adetail = []; $adisc = [];
|
||||
$fdb->Query("SELECT COUNT(*) Item,SUM(-Qty) Qty,ID FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' ORDER BY ID");
|
||||
if ($fdb->Next()) $adetail = $fdb->AllRow();
|
||||
$fdb->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' AND ID='".$adetail['ID']."'");
|
||||
if ($fdb->Next()) $adisc = $fdb->AllRow();
|
||||
|
||||
$bpromo = false;
|
||||
if ($val['Pilih_Qty']==1 && $val['Qty_Min']<=$adetail['Qty']) {//minimum & masuk limit
|
||||
$bpromo = true;
|
||||
$qty_promo = ($val['Promo_Qty']<=$val['Jumlah_Sisa']) ? $val['Promo_Qty'] : $val['Jumlah_Sisa'];
|
||||
} else if ($val['Pilih_Qty']==2 && $val['Qty_Kali']<=$adetail['Qty']) {//kelipatan
|
||||
$bpromo = true;
|
||||
$qty_promo = floor($adetail['Qty']/$val['Qty_Kali']) * $val['Promo_Qty'];
|
||||
$qty_promo = ($qty_promo<=$val['Jumlah_Sisa']) ? $qty_promo : $val['Jumlah_Sisa'];
|
||||
}
|
||||
if ($bpromo == true && $qty_promo>0) {
|
||||
$fdb->Query("SELECT P.InvID,P.SatuanID,P.Qty,P.Harga_Pokok,P.Harga_Jual FROM vi_inv_produk P WHERE P.InvID='".$val['Promo_InvID']."' AND P.SatuanID='".$val['Promo_SatuanID']."' LIMIT 1");
|
||||
if ($fdb->Next()) {
|
||||
$adisc['InvID'] = $val['Promo_InvID'];
|
||||
$adisc['SatuanID'] = $val['Promo_SatuanID'];
|
||||
$adisc['Qty'] = $qty_promo * -1;
|
||||
$adisc['Stok'] = $qty_promo * $fdb->Row("Qty", 1) * -1;
|
||||
$adisc['Harga_Beli'] = $fdb->Row("Harga_Pokok", 0);
|
||||
$adisc['Harga_Jual'] = $fdb->Row("Harga_Jual", 0);
|
||||
$adisc['Disk_Rupiah'] = $adisc['Harga_Jual'];
|
||||
$adisc['Total_Diskon'] = $qty_promo * $adisc['Harga_Jual'];
|
||||
$adisc['Promo'] = 2;
|
||||
unset($adisc['ID']);
|
||||
fastInsert("tmp_inv_detail", $adisc);
|
||||
}
|
||||
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses+".$qty_promo." WHERE PromoID='".$val['PromoID']."'");
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($tdb);
|
||||
}
|
||||
|
||||
function Promo_Total($no_nota="", $tgl_nota="") {
|
||||
global $fdb;
|
||||
$tdb = new MySQL();
|
||||
if ($no_nota=="") return false;
|
||||
$tgl_nota = ($tgl_nota=="") ? tgl_ymd() : tgl_sql2str($tgl_nota);//YYYY-MM-DD
|
||||
|
||||
$apromo = [];
|
||||
$fdb->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND Promo IN (3,4)");
|
||||
while ($fdb->Next()) {
|
||||
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses-'".abs($fdb->Row("Qty"))."' WHERE Promo_InvID='".$fdb->Row("InvID")."' AND Promo_SatuanID='".$fdb->Row("SatuanID")."' AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo='".$fdb->Row("Promo")."' AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."'");
|
||||
if ($fdb->Row("Promo")==3) $tdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND ID='".$fdb->Row("ID")."'");
|
||||
}
|
||||
|
||||
$fdb->Query("SELECT *,(Jumlah_Promo-Jumlah_Proses) Jumlah_Sisa FROM inv_promo WHERE Aktif=1 AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo IN (3,4) AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."' ORDER BY Jual_Min DESC");
|
||||
if ($fdb->RecordCount()==0) return false;
|
||||
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
|
||||
|
||||
$tot_potong = 0;
|
||||
foreach($apromo as $_key => $val) {
|
||||
$tot_jual = 0;
|
||||
$tdb->Query("SELECT SUM((-D.Qty*D.Harga_Jual)+D.Total_Diskon) Total FROM tmp_inv_detail D LEFT JOIN (SELECT P.InvID,P.Grup_InvID FROM inv_produk P WHERE P.Grup_InvID IN (".$val['Jual_Grup'].")) P ON (P.InvID=D.InvID) WHERE D.No_Ref='".$no_nota."' AND D.Unix='".user_unix()."' AND P.Grup_InvID IN (".$val['Jual_Grup'].")");
|
||||
if ($tdb->Next()) $tot_jual = $tdb->RowFloat("Total", 0);
|
||||
if ($tot_jual < $val['Jual_Min']) continue;
|
||||
|
||||
if ($val['Tipe_Promo']==4) {//4 potongan diskon
|
||||
$tot_potong += $val['Promo_Jual'];
|
||||
} else {//3 promo barang
|
||||
$qty_promo = ($val['Promo_Qty']<=$val['Jumlah_Sisa']) ? $val['Promo_Qty'] : $val['Jumlah_Sisa'];
|
||||
if ($qty_promo == 0) continue;
|
||||
|
||||
$adisc = [];
|
||||
$fdb->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' LIMIT 1");
|
||||
if ($fdb->Next()) $adisc = $fdb->AllRow();
|
||||
|
||||
$fdb->Query("SELECT P.InvID,P.SatuanID,P.Qty,P.Harga_Pokok,P.Harga_Jual FROM vi_inv_produk P WHERE P.InvID='".$val['Promo_InvID']."' AND P.SatuanID='".$val['Promo_SatuanID']."' LIMIT 1");
|
||||
if ($fdb->Next()) {
|
||||
$adisc['InvID'] = $val['Promo_InvID'];
|
||||
$adisc['SatuanID'] = $val['Promo_SatuanID'];
|
||||
$adisc['Qty'] = $qty_promo * -1;
|
||||
$adisc['Stok'] = $qty_promo * $fdb->Row("Qty", 1) * -1;
|
||||
$adisc['Harga_Beli'] = $fdb->Row("Harga_Pokok", 0);
|
||||
$adisc['Harga_Jual'] = $fdb->Row("Harga_Jual", 0);
|
||||
$adisc['Disk_Rupiah'] = $fdb->Row("Harga_Jual", 0);
|
||||
$adisc['Total_Diskon'] = $qty_promo * $fdb->Row("Harga_Jual", 0);
|
||||
$adisc['Promo'] = 3;
|
||||
unset($adisc['ID']);
|
||||
$tdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND InvID='".$val['Promo_InvID']."' AND SatuanID='".$val['Promo_SatuanID']."' AND Qty='".($qty_promo * -1)."' AND Promo IN (0,3)");
|
||||
fastInsert("tmp_inv_detail", $adisc);
|
||||
}
|
||||
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses+".$qty_promo." WHERE PromoID='".$val['PromoID']."'");
|
||||
}
|
||||
//break;//todo: pastikan jika beda group barang di pisahkan!!
|
||||
}
|
||||
unset($tdb);
|
||||
return $tot_potong;
|
||||
}
|
||||
|
||||
function Promo_Hitung($no_nota="", $tgl_nota="") {
|
||||
global $fdb;
|
||||
$tdb = new MySQL();
|
||||
if ($no_nota=="") return false;
|
||||
$tgl_nota = ($tgl_nota=="") ? tgl_ymd() : tgl_sql2str($tgl_nota);//YYYY-MM-DD
|
||||
$tot_promo = 0;
|
||||
|
||||
$apromo = [];
|
||||
$fdb->Query("SELECT *,(Jumlah_Promo-Jumlah_Proses) Jumlah_Sisa FROM inv_promo WHERE Aktif=1 AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo=1 AND (Jumlah_Promo-Jumlah_Proses)>0 AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."' AND CONCAT(InvID,':',SatuanID) IN (SELECT CONCAT(InvID,':',SatuanID) FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND Promo NOT IN (2,3))");
|
||||
if ($fdb->RecordCount()>0) {
|
||||
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
|
||||
|
||||
foreach($apromo as $_key => $val) {
|
||||
$adetail = []; $aitem = [];
|
||||
$fdb->Query("SELECT COUNT(*) Item,SUM(-Qty) Qty,ID FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' ORDER BY ID");
|
||||
if ($fdb->Next()) $adetail = $fdb->AllRow();
|
||||
$fdb->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$no_nota."' AND Unix='".user_unix()."' AND InvID='".$val['InvID']."' AND SatuanID='".$val['SatuanID']."' AND ID='".$adetail['ID']."'");
|
||||
if ($fdb->Next()) $aitem = $fdb->AllRow();
|
||||
|
||||
$bpromo = false;
|
||||
if ($val['Pilih_Qty']==1 && $val['Qty_Min']<=$adetail['Qty']) {//minimum & masuk limit
|
||||
$bpromo = true;
|
||||
$qty_promo = ($adetail['Qty']<=$val['Jumlah_Sisa']) ? $adetail['Qty'] : $val['Jumlah_Sisa'];
|
||||
} else if ($val['Pilih_Qty']==2 && $val['Qty_Kali']<=$adetail['Qty']) {//kelipatan
|
||||
$bpromo = true;
|
||||
$qty_promo = floor($adetail['Qty']/$val['Qty_Kali']) * $val['Qty_Kali'];
|
||||
$qty_promo = ($qty_promo<=$val['Jumlah_Sisa']) ? $qty_promo : $val['Jumlah_Sisa'];
|
||||
}
|
||||
$tot_promo += ($bpromo == true) ? ($qty_promo * $val['Promo_Disc']) : 0;
|
||||
}
|
||||
}
|
||||
|
||||
$apromo = [];
|
||||
$fdb->Query("SELECT *,(Jumlah_Promo-Jumlah_Proses) Jumlah_Sisa FROM inv_promo WHERE Aktif=1 AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo=4 AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."' ORDER BY Jual_Min DESC");
|
||||
if ($fdb->RecordCount()>0) {
|
||||
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
|
||||
|
||||
$tot_potong = 0;
|
||||
foreach($apromo as $_key => $val) {
|
||||
$tot_jual = 0;
|
||||
$tdb->Query("SELECT SUM((-D.Qty*D.Harga_Jual)+D.Total_Diskon) Total FROM tmp_inv_detail D LEFT JOIN (SELECT P.InvID,P.Grup_InvID FROM inv_produk P WHERE P.Grup_InvID IN (".$val['Jual_Grup'].")) P ON (P.InvID=D.InvID) WHERE D.No_Ref='".$no_nota."' AND D.Unix='".user_unix()."' AND P.Grup_InvID IN (".$val['Jual_Grup'].")");
|
||||
if ($tdb->Next()) $tot_jual = $tdb->RowFloat("Total", 0);
|
||||
if ($tot_jual < $val['Jual_Min']) continue;
|
||||
$tot_promo += $val['Promo_Jual'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
unset($tdb);
|
||||
return $tot_promo;
|
||||
}
|
||||
|
||||
function Promo_Nota_Hapus($no_nota="") {
|
||||
global $fdb;
|
||||
if ($no_nota=="") return false;
|
||||
|
||||
$ajual = [];
|
||||
$fdb->Query("SELECT * FROM inv_jual WHERE No_Jual='".$no_nota."' LIMIT 1");
|
||||
if ($fdb->Next()) $ajual = $fdb->AllRow();
|
||||
if (($ajual['PromoNotaID'] ?? 0) > 0) {
|
||||
$fdb->Query("UPDATE inv_promo_nota SET Jumlah_Proses=Jumlah_Proses-1 WHERE PromoNotaID='".$ajual['PromoNotaID']."' LIMIT 1");
|
||||
}
|
||||
}
|
||||
|
||||
function Promo_Nota_Proses($no_nota="", $tgl_nota="") {
|
||||
global $fdb;
|
||||
if ($no_nota=="") return false;
|
||||
$tgl_nota = ($tgl_nota=="") ? tgl_ymd() : tgl_sql2str($tgl_nota);//YYYY-MM-DD
|
||||
|
||||
$apromo = [];
|
||||
$fdb->Query("SELECT *,(Jumlah_Promo-Jumlah_Proses) Jumlah_Sisa FROM inv_promo_nota WHERE Aktif=1 AND CabID IN (0,'".$_SESSION['__APP_INV']['CABANGID']."') AND Tipe_Promo=1 AND (Jumlah_Promo-Jumlah_Proses)>0 AND Tgl_Mulai<='".$tgl_nota."' AND Tgl_Akhir>='".$tgl_nota."' ORDER BY Jual_Min ASC LIMIT 1");
|
||||
if ($fdb->Next()) $apromo = $fdb->AllRow();
|
||||
|
||||
if (count($apromo) > 0) {
|
||||
$ajual = [];
|
||||
$fdb->Query("SELECT * FROM inv_jual WHERE No_Jual='".$no_nota."' LIMIT 1");
|
||||
if ($fdb->Next()) $ajual = $fdb->AllRow();
|
||||
if ($apromo['Jual_Min'] <= $ajual['Total_Jual']) {
|
||||
$bpromo = true;
|
||||
if ($apromo['Jual_Grup'] <> "") {
|
||||
$tot_jual = 0;
|
||||
$fdb->Query("SELECT SUM((-Qty*Harga_Jual)+Total_Diskon) Total FROM inv_detail WHERE No_Ref='".$no_nota."' AND InvID IN (SELECT InvID FROM inv_produk WHERE Grup_InvID IN (".($apromo['Jual_Grup']??"0")."))");
|
||||
if ($fdb->Next()) $tot_jual = $fdb->RowFloat("Total", 0);
|
||||
if ($tot_jual < $val['Jual_Min']) $bpromo = false;
|
||||
}
|
||||
if ($bpromo == true) {
|
||||
$fdb->Query("UPDATE inv_jual SET PromoNotaID='".$apromo['PromoNotaID']."' WHERE No_Jual='".$no_nota."' LIMIT 1");
|
||||
$fdb->Query("UPDATE inv_promo_nota SET Jumlah_Proses=Jumlah_Proses+1 WHERE PromoNotaID='".$apromo['PromoNotaID']."' LIMIT 1");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/************************* LAPORAN PRODUK PER AREA *************************/
|
||||
|
||||
function RepoProduk_Baru($tipe = "A", $tgl = "") {
|
||||
global $fdb;
|
||||
$atipe = array('A'=>array("No_Area","rep_produk"));
|
||||
if ($tgl == "") {
|
||||
$tno = $tipe . date("y") . abjad(date("n"));
|
||||
} else {
|
||||
$tmp = explode("-", $tgl);
|
||||
$tno = $tipe . substr($tmp[2],2,2) . abjad(intval($tmp[1]));
|
||||
}
|
||||
$tno .= user_id(2);
|
||||
$ino = 0;
|
||||
$fdb->Query("SELECT MAX(RIGHT(".$atipe[$tipe][0].",4)) Nomor FROM ".$atipe[$tipe][1]." WHERE LEFT(".$atipe[$tipe][0].",".strlen($tno).")='".$tno."'");
|
||||
if ($fdb->Next()) $ino = $fdb->Row("Nomor", 0);
|
||||
$tno .= isi_nol($ino+1, 4);
|
||||
return $tno;
|
||||
}
|
||||
|
||||
function RepoProduk_Detail_Copy($no_ref = "") {
|
||||
global $fdb;
|
||||
if ($no_ref == "") return;
|
||||
RepoProduk_Detail_Cancel($no_ref);
|
||||
$fdb->Query("INSERT INTO tmp_rep_produk_detail SELECT No_Area,ID,InvID,SatuanID,UserID,'".user_unix()."' FROM rep_produk_detail WHERE No_Area='".$no_ref."'");
|
||||
}
|
||||
|
||||
function RepoProduk_Detail_Save($no_ref = "", $is_baru = false, $no_lama = "") {
|
||||
global $fdb;
|
||||
if ($no_ref == "") return;
|
||||
$fdb->Query("DELETE FROM rep_produk_detail WHERE No_Area='".$no_ref."'");
|
||||
if ($is_baru) {
|
||||
RepoProduk_Detail_Cancel($no_ref);
|
||||
$fdb->Query("UPDATE tmp_rep_produk_detail SET No_Area='".$no_ref."' WHERE No_Area='".$no_lama."' AND Unix='".user_unix()."'");
|
||||
}
|
||||
$fdb->Query("INSERT INTO rep_produk_detail SELECT No_Area,ID,InvID,SatuanID,UserID FROM tmp_rep_produk_detail WHERE No_Area='".$no_ref."'");
|
||||
RepoProduk_Detail_Cancel($no_ref);
|
||||
}
|
||||
|
||||
function RepoProduk_Detail_Cancel($no_ref = "") {
|
||||
global $fdb;
|
||||
if ($no_ref == "") return;
|
||||
$fdb->Query("DELETE FROM tmp_rep_produk_detail WHERE No_Area='".$no_ref."'");
|
||||
}
|
||||
|
||||
/************************* FORMAT TAMPILAN DATA *************************/
|
||||
|
||||
function Report_Header($tlapor="", $tperiod="") {
|
||||
$thasil = '<div style="text-align:center;font-size:12pt;"><b>'.strtoupper($_SESSION['__WEB_APP']['REG_NAME']);
|
||||
$thasil .= (($tlapor=="") ? "" : '<br>'.$tlapor) . '</b>';
|
||||
$thasil .= ($tperiod=="") ? "" : '<br><span style="font-size:11pt;">'.$tperiod.'</span>';
|
||||
$thasil .= '</div><br>';
|
||||
echo $thasil;
|
||||
}
|
||||
|
||||
function Report_Stamp($ctk_ke=1, $bnama=false) {
|
||||
return $_SESSION['__WEB_APP']['APP_NAME']."v".$_SESSION['__WEB_APP']['APP_VER'].date("\@ymd.His")."-".user_id(3).(($bnama==true)?"/".strtoupper(user_user()):"").(($ctk_ke>0)?"#".isi_nol($ctk_ke,2):"");
|
||||
}
|
||||
|
||||
function Format_Stok($total=0, $kali=1, $sat_norm="", $sat_stok="") {
|
||||
if ($kali > 0) {
|
||||
$norm = floor($total / $kali);
|
||||
$sisa = $total - ($norm * $kali);
|
||||
} else {
|
||||
$norm = 0;
|
||||
$sisa = $total;
|
||||
}
|
||||
$stok = uang($norm,0)." ".$sat_norm;
|
||||
if ($sat_norm<>$sat_stok) $stok .= ", ".uang($sisa,0)." ".$sat_stok;
|
||||
return $stok;
|
||||
}
|
||||
|
||||
/************************* DATA MANIPULATION FUNCTION *************************/
|
||||
|
||||
function fastQuery($qry = "", $defval = "") {
|
||||
global $fdb;
|
||||
if ($qry=="") return false;
|
||||
$fdb->Query($qry);
|
||||
if (!$fdb->Next()) {
|
||||
if ($defval!=="") return $defval;
|
||||
return true;
|
||||
}
|
||||
$tmp_value = array_values($fdb->AllRow());
|
||||
$tmp_value = $tmp_value[0] ? $tmp_value[0] : "";
|
||||
if (trim($tmp_value)=="" && $defval!=="") return $defval;
|
||||
return $tmp_value;
|
||||
}
|
||||
|
||||
function fastQueryArray($qry = "", $defval = "") {
|
||||
global $fdb;
|
||||
$ahasil = array();
|
||||
if ($qry=="") return $ahasil;
|
||||
$fdb->Query($qry);
|
||||
if ($fdb->RecordCount()==0) {
|
||||
if ($defval!=="") $ahasil[] = $defval;
|
||||
return $ahasil;
|
||||
}
|
||||
while ($fdb->Next()) {
|
||||
$tmp_value = array_values($fdb->AllRow());
|
||||
$ahasil[] = (trim($tmp_value[0])=="" && $defval!=="") ? $defval : $tmp_value[0];
|
||||
}
|
||||
return $ahasil;
|
||||
}
|
||||
|
||||
function fastInsert($nama_tabel = "", $adata = []) {//up:2014-09-29
|
||||
global $fdb;
|
||||
if ($nama_tabel=="") return false;
|
||||
$txt = "";
|
||||
foreach ($adata as $_key => $_val) {
|
||||
$txt .= "," . $_key . "='" . $_val . "'";
|
||||
}
|
||||
$fdb->Query("INSERT IGNORE INTO ".$nama_tabel." SET ".substr($txt,1));
|
||||
return true;
|
||||
}
|
||||
|
||||
function fastUpdate($nama_tabel = "", $adata = [], $awhere = []) {
|
||||
global $fdb;
|
||||
if ($nama_tabel=="") return false;
|
||||
$txt = ""; $whr = "";
|
||||
foreach ($adata as $_key => $_val) {
|
||||
if (in_array($_key, $awhere)) continue;
|
||||
$txt .= "," . $_key . "='" . $_val . "'";
|
||||
}
|
||||
foreach ($awhere as $_key => $_val) {
|
||||
$whr .= " AND " . $_val . "='" . $adata[$_val] . "'";
|
||||
}
|
||||
$fdb->Query("UPDATE ".$nama_tabel." SET ".substr($txt,1)." WHERE ".substr($whr,4));
|
||||
return true;
|
||||
}
|
||||
|
||||
function Form_Info($pesan="") {
|
||||
return '<button class="btn btn-outline-secondary shadow-none text-info" title="'.$pesan.'"><i class="bi-lightbulb"></i></button>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/gel/keluar.php
|
||||
Desc. : PHP - Transaksi Pengeluaran Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 23rd, 2013.
|
||||
Last Modified : September 29th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$nomor = Param::Get("No_Kas", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("gel_kas");
|
||||
$sql->add_param_date("Tgl_Kas");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("TXID");
|
||||
$sql->add_param("Jumlah");
|
||||
$sql->add_param("Ket");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Kas");
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$nomor = Nomor_Kas_Baru("K", Param::Get("Tgl_Kas"), false);
|
||||
$sql->add_param("No_Kas", $nomor);
|
||||
$sql->add_param("Tipe_Kas", "O");
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT A.*,C.Kode_Cab FROM (SELECT * FROM gel_kas WHERE Tipe_Kas='O') A LEFT JOIN para_cabang C ON (C.CabID=A.CabID)");
|
||||
$obj->add_field("No_Kas", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_Kas", "Tanggal", "c", "sqltgl");
|
||||
$obj->add_field("Kode_Cab", "Cab", "c");
|
||||
$obj->add_field("Ket", "Keterangan", "awr");
|
||||
$obj->add_field("Jumlah", "Jumlah", "r", "rupiah");
|
||||
$obj->set_field_order("No_Kas", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "KasKeluarJS.tx_ubah");
|
||||
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "KasKeluarJS.tx_hapus");
|
||||
$obj->set_func_navi("KasKeluarJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ($data == "detail-tx") {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Kas'=>$nomor, 'CabID'=>$id_cab, 'TXID'=>0, 'Jumlah'=>0];
|
||||
|
||||
if ($mode_detail == "insert") {
|
||||
$atabel['No_Kas'] = "GO-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Kas'] = tgl_ymd();
|
||||
} else {
|
||||
$db->Query("SELECT * FROM gel_kas WHERE Tipe_Kas='O' AND No_Kas='".$nomor."'");
|
||||
if (!$db->Next()) {
|
||||
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
|
||||
} else $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Kas", $atabel['No_Kas'], false, false, "text");
|
||||
$ttgl = $form->datebox("_", "Tgl_Kas", $atabel['Tgl_Kas'], true, false);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$ttx = $form->option_db("_", "TXID", $atabel['TXID'], true, false, "para_tx_kas", ["TXID","Nama_TX"], "Grup_TX='O' AND Aktif=1 ORDER BY Nama_TX", [0," "]);
|
||||
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], true, false, "double");
|
||||
$tket = $form->textarea("_", "Ket", $atabel['Ket'], true, false, 2);
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Kas">Nomor Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$tnota.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Kas">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttgl.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="TXID">Jenis Transaksi</label>
|
||||
<div class="col">'.$ttx.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Ket">Keterangan</label>
|
||||
<div class="col">'.$tket.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Jumlah">Jumlah</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$tjumlah.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pengeluaran Kas</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2 d-none" id="butCari" type="button"><i class="bi-search me-2"></i>Cari</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/gel/terima.php
|
||||
Desc. : PHP - Transaksi Penerimaan Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 23rd, 2013.
|
||||
Last Modified : September 29th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$nomor = Param::Get("No_Kas", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("gel_kas");
|
||||
$sql->add_param_date("Tgl_Kas");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("TXID");
|
||||
$sql->add_param("Jumlah");
|
||||
$sql->add_param("Ket");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Kas");
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$nomor = Nomor_Kas_Baru("K", Param::Get("Tgl_Kas"), false);
|
||||
$sql->add_param("No_Kas", $nomor);
|
||||
$sql->add_param("Tipe_Kas", "I");
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT A.*,C.Kode_Cab FROM (SELECT * FROM gel_kas WHERE Tipe_Kas='I') A LEFT JOIN para_cabang C ON (C.CabID=A.CabID)");
|
||||
$obj->add_field("No_Kas", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_Kas", "Tanggal", "c", "sqltgl");
|
||||
$obj->add_field("Kode_Cab", "Cab", "c");
|
||||
$obj->add_field("Ket", "Keterangan", "awr");
|
||||
$obj->add_field("Jumlah", "Jumlah", "r", "rupiah");
|
||||
$obj->set_field_order("No_Kas", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "KasTerimaJS.tx_ubah");
|
||||
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "KasTerimaJS.tx_hapus");
|
||||
$obj->set_func_navi("KasTerimaJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ($data == "detail-tx") {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Kas'=>$nomor, 'CabID'=>$id_cab, 'TXID'=>0, 'Jumlah'=>0];
|
||||
|
||||
if ($mode_detail == "insert") {
|
||||
$atabel['No_Kas'] = "GI-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Kas'] = tgl_ymd();
|
||||
} else {
|
||||
$db->Query("SELECT * FROM gel_kas WHERE Tipe_Kas='I' AND No_Kas='".$nomor."'");
|
||||
if (!$db->Next()) {
|
||||
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
|
||||
} else $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Kas", $atabel['No_Kas'], false, false, "text");
|
||||
$ttgl = $form->datebox("_", "Tgl_Kas", $atabel['Tgl_Kas'], true, false);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$ttx = $form->option_db("_", "TXID", $atabel['TXID'], true, false, "para_tx_kas", ["TXID","Nama_TX"], "Grup_TX='I' AND Aktif=1 ORDER BY Nama_TX", [0," "]);
|
||||
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], true, false, "double");
|
||||
$tket = $form->textarea("_", "Ket", $atabel['Ket'], true, false, 2);
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Kas">Nomor Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$tnota.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Kas">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttgl.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="TXID">Jenis Transaksi</label>
|
||||
<div class="col">'.$ttx.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Ket">Keterangan</label>
|
||||
<div class="col">'.$tket.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Jumlah">Jumlah</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$tjumlah.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Penerimaan Kas</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2 d-none" id="butCari" type="button"><i class="bi-search me-2"></i>Cari</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/php/index.php
|
||||
Desc. : PHP - Halaman Utama Desktop
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 24th, 2010.
|
||||
Last Modified : December 14th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../vendor/autoload.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Register;
|
||||
|
||||
function random_color($trans = "0.6") {
|
||||
$col_r = mt_rand( 0, 255 );
|
||||
$col_g = mt_rand( 0, 255 );
|
||||
$col_b = mt_rand( 0, 255 );
|
||||
return "rgba(".$col_r.",".$col_g.",".$col_b.",".$trans.")";
|
||||
}
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
|
||||
if ( $data == "chart-sale" ) {
|
||||
$ajson['tipe'] = "chart";
|
||||
$adata['datasets'] = [['data'=>[], 'label'=>"Penjualan", 'borderColor'=>[], 'backgroundColor'=>[]]];
|
||||
$adata['labels'] = ["Belum Ada Penjualan"];
|
||||
|
||||
$db->Query("SELECT P.Nama_Produk,D.Qty FROM (SELECT InvID,SUM(-Qty) Qty FROM inv_detail WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND NotaID=5 AND InvID>1 AND Tgl_Ref>='".tgl_sql2str(tgl_operasi(tgl_dmy(),-7))."' GROUP BY InvID ORDER BY SUM(-Qty) DESC LIMIT 10) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID)");
|
||||
if ($db->RecordCount()>0) {
|
||||
$adata['labels'] = [];
|
||||
}
|
||||
while ($db->Next()) {
|
||||
$adata['labels'][] = $db->Row("Nama_Produk");
|
||||
$adata['datasets'][0]['data'][] = $db->RowFloat("Qty");
|
||||
$adata['datasets'][0]['borderColor'][] = random_color();
|
||||
$adata['datasets'][0]['backgroundColor'][] = random_color();
|
||||
}
|
||||
|
||||
$ajson['chart'] = ['type' => "bar",
|
||||
'data' => $adata,
|
||||
'options' => [
|
||||
'responsive' => true,
|
||||
'maintainAspectRatio' => false,
|
||||
'plugins' => [
|
||||
'legend' => ['display' => false],
|
||||
'title' => ['display' => true, 'font' => ['size' => 20, 'weight' => 'normal'], 'text' => '10 Barang Terlaris'],
|
||||
'subtitle' => ['display' => true, 'position' => "top", 'text' => '(dalam sepekan terakhir)']
|
||||
],
|
||||
'scales' => ['y' => ['beginAtZero' => true, 'title' => ['display' => true, 'font' => ['size' => 14], 'text' => "Qty Penjualan"]], 'x' => ['display' => false]],
|
||||
'layout' => ['padding' => ['top' => 10]]
|
||||
]
|
||||
];
|
||||
|
||||
} else if ( $data == "chart-omzet" ) {
|
||||
$ajson['tipe'] = "chart";
|
||||
$adata['datasets'] = [['data'=>[], 'label'=>"Jumlah (JT)", 'borderColor'=>random_color(), 'backgroundColor'=>random_color(), 'pointStyle'=>'circle', 'pointRadius'=>10, 'pointHoverRadius'=>15]];
|
||||
$adata['labels'] = ["Belum Ada Penjualan"];
|
||||
|
||||
$db->Query("SELECT Tgl_Jual,DAY(Tgl_Jual) Tgl,SUM(Total_Jual) Total FROM inv_jual WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND Tgl_Jual<='".tgl_ymd()."' GROUP BY Tgl_Jual ORDER BY Tgl_Jual DESC LIMIT 10");
|
||||
if ($db->RecordCount()>0) {
|
||||
$adata['labels'] = [];
|
||||
}
|
||||
while ($db->Next()) {
|
||||
$adata['labels'][] = substr(tgl_hari(tgl_sql2str($db->Row("Tgl_Jual"))),0,3) ." (". $db->Row("Tgl") . ")";
|
||||
$adata['datasets'][0]['data'][] = round($db->RowFloat("Total")/1000000,2);
|
||||
}
|
||||
|
||||
$ajson['chart'] = ['type' => "line",
|
||||
'data' => $adata,
|
||||
'options' => [
|
||||
'responsive' => true,
|
||||
'maintainAspectRatio' => false,
|
||||
'plugins' => [
|
||||
'legend' => ['display' => false],
|
||||
'title' => ['display' => true, 'font' => ['size' => 20, 'weight' => 'normal'], 'text' => 'Penjualan 10 Hari Terakhir'],
|
||||
'subtitle' => ['display' => true, 'position' => "top", 'text' => '(dalam jutaan)']
|
||||
],
|
||||
'scales' => ['y' => ['min' => 0, 'ticks' => ['stepSize' => 0.1], 'title' => ['display' => true, 'font' => ['size' => 14], 'text' => "Jumlah Penjualan"]]],
|
||||
'layout' => ['padding' => ['top' => 10]]
|
||||
]
|
||||
];
|
||||
|
||||
} else if ( $data == "tabel-stok" ) {
|
||||
$ajson['tipe'] = "tabel";
|
||||
$ajson['html'] = '<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline"><thead><tr><th class="c">SKU</th><th class="l">Nama Barang</th><th class="r">Stok</th></tr></thead><tbody>';
|
||||
|
||||
$db->Query("SELECT S.*,P.Kode_SKU,P.Nama_Produk FROM (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' GROUP BY InvID) S LEFT JOIN vi_inv_produk P ON (P.InvID=S.InvID AND P.Qty=1) WHERE P.Kode_SKU IS NOT NULL ORDER BY S.Stok LIMIT 20");
|
||||
while ($db->Next()) {
|
||||
$ajson['html'] .= sprintf('<tr><td class="c">%s</td><td class="l">%s</td><td class="r">%s</td></tr>', $db->Row("Kode_SKU"), $db->Row("Nama_Produk"), rupiah($db->Row("Stok",0)));
|
||||
}
|
||||
|
||||
$ajson['html'] .= '</tbody></table>';
|
||||
|
||||
} else if ( $data == "default" ) {
|
||||
$ajson['content'] = '
|
||||
<div class="card">
|
||||
<div class="card-body" style="height:500px;">
|
||||
<div class="row h-100">
|
||||
<div class="col">
|
||||
<div class="h-50">
|
||||
<canvas id="ChartA"></canvas>
|
||||
</div>
|
||||
<div class="h-50">
|
||||
<canvas id="ChartB"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col h-100 overflow-scroll">
|
||||
<div id="tabelStok"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,499 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli.php
|
||||
Desc. : PHP - Transaksi Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
function Beli_Data1($nomor="", $baru=false) {
|
||||
global $db;
|
||||
$aparam = ['No_Beli'=>$nomor];
|
||||
if (trim($nomor)=="") {
|
||||
if ($baru) $aparam['No_Beli'] = "BELI".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
|
||||
$aparam['Tgl_Beli'] = tgl_ymd();
|
||||
$aparam['Tgl_Faktur'] = tgl_ymd();
|
||||
$aparam['SupID'] = 0;
|
||||
$aparam['CabID'] = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$aparam['Total_Beli'] = 0;
|
||||
$aparam['Total_Hutang']= 0;
|
||||
$aparam['Total_Bulat'] = 0;
|
||||
} else {
|
||||
$tabel_beli = (strpos($nomor,"BELI")===false) ? "inv_beli" : "inv_beli_pend";
|
||||
$db->Query("SELECT * FROM ".$tabel_beli." WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $aparam = $db->AllRow();
|
||||
}
|
||||
return $aparam;
|
||||
}
|
||||
|
||||
function Beli_Pending_Nomor1() {
|
||||
global $db;
|
||||
$tno = "BELI".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#";
|
||||
$ino = 0;
|
||||
$db->Query("SELECT MAX(RIGHT(No_Beli,2)) Nomor FROM inv_beli_pend WHERE LEFT(No_Beli,".strlen($tno).")='".$tno."'");
|
||||
if ($db->Next()) $ino = intval($db->Row("Nomor", 0));
|
||||
$tno .= isi_nol(++$ino, 2);
|
||||
return $tno;
|
||||
}
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$nomor = Param::Get("No_Beli", "");
|
||||
$is_pend = (strpos($nomor,"BELI")===false) ? false : true;
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Beli'=>$nomor];
|
||||
|
||||
if ($mode == "pending-edit") {
|
||||
Pending_Edit($nomor);
|
||||
$atabel = Beli_Data1($nomor);
|
||||
$mode = "edit";
|
||||
} else if ($mode == "pending-save") {
|
||||
$b_baru = false;
|
||||
if (substr($nomor,-3)=="#00") {
|
||||
$b_baru = true;
|
||||
$no_lama = $nomor;
|
||||
$nomor = Beli_Pending_Nomor1();
|
||||
Pending_Save($no_lama, $nomor);
|
||||
}
|
||||
$apending = [];
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli,SUM(Total_Diskon) Diskon FROM tmp_inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $apending = $db->AllRow();
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli_pend");
|
||||
$sql->add_param("No_Beli", $nomor);
|
||||
$sql->add_param_date("Tgl_Beli");
|
||||
$sql->add_param_date("Tgl_Faktur");
|
||||
$sql->add_param("No_Faktur");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $apending['Beli']);
|
||||
$sql->add_param("Total_Diskon", $apending['Diskon']);
|
||||
$sql->add_param("Total_Bulat");
|
||||
$sql->add_param("Total_Hutang");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
if ($b_baru) $sql->InsertDB();
|
||||
else $sql->UpdateDB();
|
||||
$atabel = Beli_Data1();
|
||||
} else if ($mode == "pending-delete") {
|
||||
Pending_Delete($nomor);
|
||||
$db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$nomor."'");
|
||||
$atabel = Beli_Data1();
|
||||
} else if ($mode == "add") {
|
||||
$atabel = Beli_Data1("", true);
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor, true);
|
||||
$atabel = Beli_Data1($nomor);
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
if ($is_pend) {
|
||||
$nomor = Nomor_Baru("B", Param::Get("Tgl_Beli"), true);
|
||||
if (substr($no_lama,-3)!="#00") $db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$no_lama."'");
|
||||
}
|
||||
Detail_Save($nomor, 3, $id_cab, Param::Get("Tgl_Beli"), $is_pend, $no_lama);
|
||||
|
||||
$abeli = [];
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli, SUM(Total_Diskon) Diskon FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $abeli = $db->AllRow();
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli");
|
||||
$sql->add_param_date("Tgl_Beli");
|
||||
$sql->add_param_date("Tgl_Faktur");
|
||||
$sql->add_param("No_Faktur");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $abeli['Beli']);
|
||||
$sql->add_param("Total_Diskon", $abeli['Diskon']);
|
||||
$sql->add_param("Total_Bulat");
|
||||
$sql->add_param("Total_Hutang");
|
||||
$sql->add_param("Data_Beli", 1);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
$sql->UpdateDB();
|
||||
|
||||
Produk_Update($nomor, Param::Get("SupID"));
|
||||
Update_Lunas_Sup(Param::Get("SupID"));
|
||||
$atabel = Beli_Data1($nomor);
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
if (substr($nomor,-3)=="#00" || substr($nomor,0,4)!="BELI") Detail_Cancel($nomor);
|
||||
$atabel = Beli_Data1();
|
||||
} else {
|
||||
$atabel = Beli_Data1($nomor);
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], !$enable, true, "text", "nomor transaksi");
|
||||
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $enable, true, "text", "nomor faktur");
|
||||
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, true);
|
||||
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", $atabel['Tgl_Faktur'], $enable, true);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0," "]);
|
||||
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "]);
|
||||
$ajson['html'] = '
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Beli">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliJS.tx_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Beli">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Faktur">Tanggal Faktur</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttglfaktur.'</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Nomor Faktur</label>
|
||||
<div class="col">'.$tfaktur.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="Total_Beli" value="'.$atabel['Total_Beli'].'" >
|
||||
<input type="hidden" id="Total_Hutang" value="'.$atabel['Total_Hutang'].'" >
|
||||
<input type="hidden" id="Total_Bulat" value="'.$atabel['Total_Bulat'].'" >
|
||||
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
if ($is_pend == false) {
|
||||
$db->Query("DELETE FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
} else {
|
||||
$db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
}
|
||||
$ajson['status'] = true;
|
||||
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$iqty = doubleval(Param::Get("Qty", 0)); $istok = $iqty;
|
||||
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
|
||||
if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty;
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("tmp_inv_detail");
|
||||
$sql->add_param("No_Ref", $nomor);
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty", $iqty);
|
||||
$sql->add_param("Stok", $istok);
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Disk_Rupiah");
|
||||
$sql->add_param("Disk_Persen1");
|
||||
$sql->add_param("Disk_Persen2");
|
||||
$sql->add_param("Disk_Persen3");
|
||||
$sql->add_param("Disk_Persen4");
|
||||
$sql->add_param("Disk_Persen5");
|
||||
$sql->add_param("Total_Diskon", "(Harga_Beli-((Harga_Beli-Disk_Rupiah)*((100.0-Disk_Persen1)/100)*((100.0-Disk_Persen2)/100)*((100.0-Disk_Persen3)/100)*((100.0-Disk_Persen4)/100)*((100.0-Disk_Persen5)/100)))*Qty", true);
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Ref", $nomor);
|
||||
|
||||
$_id = Param::Get("ID", 0);
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->InsertDB();
|
||||
$_id = $sql->LastInsertID();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$qview = ""; $qtabel = "inv_detail";
|
||||
if ($is_pend) $qtabel = "tmp_inv_detail";
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
if ($mode=="add") $qview = " AND Unix=".user_unix();
|
||||
$qtabel = "tmp_inv_detail";
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT D.*,P.Kode_SKU,P.Nama_Lengkap,P.Nama_Satuan,P.Harga_Jual,(D.Qty*D.Harga_Beli)-D.Total_Diskon Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
|
||||
$obj->set_query_footer("SELECT SUM((D.Qty*D.Harga_Beli)-D.Total_Diskon) Total,SUM(D.Total_Diskon) Total_Diskon FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D");
|
||||
$obj->add_field("ID", "No", "c");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Qty", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("ID", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "BeliJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "BeliJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("BeliJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
|
||||
$obj->set_func_btn("BeliJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_btn("BeliJS.total_show", "Total");
|
||||
$obj->set_func_navi("BeliJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
$ntotal = 0;
|
||||
$db->Query("SELECT SUM((D.Qty*D.Harga_Beli)-D.Total_Diskon) Jumlah FROM ".$qtabel." D WHERE D.No_Ref='".$nomor."' ".$qview);
|
||||
if ($db->Next()) $ntotal = floatval($db->Row("Jumlah", 0));
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Total_Beli", 'value'=>$ntotal];
|
||||
|
||||
if (in_array($mode_detail, ["insert","update"])) {//WARNING: harga jual dibawah limit margin!!
|
||||
$hbeli = 0;
|
||||
$db->Query("SELECT CEIL((Harga_Beli-(Total_Diskon/Qty))/(Stok/Qty)) Pokok FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$_id."'");
|
||||
if ($db->Next()) $hbeli = $db->Row("Pokok", 0);
|
||||
$db->Query("SELECT P.*,G.Margin FROM (SELECT Grup_InvID,Nama_Produk,CEIL(Harga_Jual/Qty) Harga_Jual FROM vi_inv_produk WHERE InvID='".Param::Get("InvID")."' AND Harga_Jual>0 ORDER BY Harga_Jual ASC LIMIT 1) P LEFT JOIN inv_produk_grup G ON (P.Grup_InvID=G.Grup_InvID)");
|
||||
if ($db->Next()) {
|
||||
if ($db->Row("Margin",0)>0) $hbeli += ($hbeli*($db->Row("Margin")/100));
|
||||
if ($hbeli > $db->Row("Harga_Jual",0)) $ajson[] = ['type'=>"msg", 'mode'=>"error", 'wait'=>3000, 'value'=>"Produk \"".$db->Row("Nama_Produk")."\" Harga Beli telah melewati Margin / Harga Jual!"];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : " CONCAT(B.No_Beli,B.No_Faktur,S.Nama_Sup,DATE_FORMAT(B.Tgl_Faktur,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT *,Total_Diskon+Total_Bulat Diskon FROM inv_beli WHERE Data_Beli=1) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)", "B.*,S.Nama_Sup", $tsql);
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah");
|
||||
$obj->add_field("Diskon", "Diskon", "r", "rupiah");
|
||||
$obj->add_field("Total_Hutang", "Jumlah", "r", "rupiah");
|
||||
$obj->set_field_order("No_Beli", "D");
|
||||
$obj->add_row_btn("save", "Detail", "BeliJS.tx_select");
|
||||
$obj->set_func_navi("BeliJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-pending" ) {
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT *,Total_Diskon+Total_Bulat Diskon FROM inv_beli_pend WHERE UserID='".user_id()."') B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)");
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_Beli", "Tgl. Pending", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah");
|
||||
$obj->add_field("Diskon", "Diskon", "r", "rupiah");
|
||||
$obj->add_field("Total_Hutang", "Jumlah", "r", "rupiah");
|
||||
$obj->set_field_order("No_Beli", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliJS.pending_select");
|
||||
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "BeliJS.pending_delete", "UserID", user_id());
|
||||
$obj->set_func_navi("BeliJS.data_query('brow-pending')");
|
||||
$ajson[] = $obj->json_table("divBrowPending");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": "";
|
||||
$tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND S.SupID='".Param::Get("SupID")."'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P LEFT JOIN inv_produk_sup S ON (P.InvID=S.InvID)", "P.*", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("SatuanID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliJS.produk_select");
|
||||
$obj->set_func_navi("BeliJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',K.Harga_Jual) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")), 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik nama produk");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
|
||||
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double");
|
||||
$tdisrp = $form->textbox("_", "Disk_Rupiah", $atabel['Disk_Rupiah'], true, true, "double");
|
||||
$tdis1 = $form->textbox("_", "Disk_Persen1", $atabel['Disk_Persen1'], true, true, "double");
|
||||
$tdis2 = $form->textbox("_", "Disk_Persen2", $atabel['Disk_Persen2'], true, true, "double");
|
||||
$tdis3 = $form->textbox("_", "Disk_Persen3", $atabel['Disk_Persen3'], true, true, "double");
|
||||
$tdis4 = $form->textbox("_", "Disk_Persen4", $atabel['Disk_Persen4'], true, true, "double");
|
||||
$tdis5 = $form->textbox("_", "Disk_Persen5", $atabel['Disk_Persen5'], true, true, "double");
|
||||
$ttot_dis = $form->textbox("_", "Total_Diskon", 0, false, false, "double");
|
||||
$tjual = $form->textbox("_", "Harga_Jual", 0, false, false, "double");
|
||||
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Produk">Nama Barang</label>
|
||||
<div class="col">'.$tnama.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Qty">Qty</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty.$tsat.'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Beli">Harga (@)</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tbeli.'</div>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group"><span class="input-group-text">Harga Jual @</span>'.$tjual.'</div></div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Disk_Rupiah">Diskon Rupiah</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tdisrp.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Diskon Persen</label>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">1</span>'.$tdis1.'<span class="input-group-text">%</span></div></div>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">4</span>'.$tdis4.'<span class="input-group-text">%</span></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label"> </label>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">2</span>'.$tdis2.'<span class="input-group-text">%</span></div></div>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">5</span>'.$tdis5.'<span class="input-group-text">%</span></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label"> </label>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">3</span>'.$tdis3.'<span class="input-group-text">%</span></div></div>
|
||||
<div class="col-sm-4 col-lg-3">'.Form_Info("Silakan masukkan -10 pada Diskon 5, jika ada PPN.").'</div>
|
||||
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Diskon</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot_dis.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Total</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
|
||||
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
|
||||
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "detail-item" ) {
|
||||
$ajson['data'] = "kosong";
|
||||
$db->Query("SELECT D.* FROM inv_detail D LEFT JOIN inv_beli B ON (D.No_Ref=B.No_Beli) WHERE B.Data_Beli=1 AND D.InvID='".Param::Get("InvID")."' ORDER BY D.Tgl_Ref DESC LIMIT 1");
|
||||
if ($db->Next()) $ajson = $db->AllRow();
|
||||
if (Param::Get("SatuanID",0) <> $ajson['SatuanID']) {
|
||||
$_bagi = 1;
|
||||
$db->Query("SELECT A.Qty/B.Qty Bagi FROM (SELECT InvID,Qty FROM inv_produk_kemasan WHERE InvID=".Param::Get("InvID")." AND SatuanID=".$ajson['SatuanID']."' LIMIT 1) A LEFT JOIN (SELECT InvID,Qty FROM inv_produk_kemasan WHERE InvID=".Param::Get("InvID")." AND SatuanID='".Param::Get("SatuanID",0)."' LIMIT 1) B ON (A.InvID=B.InvID)");
|
||||
if ($db->Next()) $_bagi = $db->Row("Bagi", 1);
|
||||
$ajson['Harga_Beli'] /= $_bagi;
|
||||
$ajson['Disk_Rupiah'] /= $_bagi;
|
||||
}
|
||||
|
||||
} else if ($data == "detail-total") {
|
||||
$form = new Form($db);
|
||||
$tbulat = $form->textbox("_", "popTotal_Bulat", 0, true, false, "double");
|
||||
$thutang = $form->textbox("_", "popTotal_Hutang", 0, true, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="popTotal_Bulat">Diskon Akhir<br>Pembulatan (+/-)</label>
|
||||
<div class="col">'.$tbulat.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="popTotal_Hutang">Total Hutang</label>
|
||||
<div class="col">'.$thutang.'</div>
|
||||
</div>
|
||||
';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pembelian</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
|
||||
<button class="btn btn-info mb-1 ms-2" id="butPendingBrow" type="button"><i class="bi-cloud me-2"></i>Pending</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butPendingSimpan" type="button"><i class="bi-cloud-upload me-2"></i>Simpan Pending</button>
|
||||
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,253 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli_lunas.php
|
||||
Desc. : PHP - Transaksi Pembayaran Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 7th, 2011.
|
||||
Last Modified : October 8th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$nomor = Param::Get("No_Beli", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['SupID'=>0, 'Nama_Sup'=>"", 'Alamat_Sup'=>""];
|
||||
|
||||
$form = new Form($db);
|
||||
$tsup = $form->textauto("_", "Nama_Sup", ['value'=>$atabel['SupID'],'text'=>$atabel['Nama_Sup']], true, false, "ketik nama supplier");
|
||||
$tsupal = $form->textbox("_", "Alamat_Sup", $atabel['Alamat_Sup'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Sup">Nama Supplier</label>
|
||||
<div class="col"><div class="input-group">'.$tsup.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliLunasJS.sup_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Alamat Supplier</label>
|
||||
<div class="col">'.$tsupal.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="SupID" value="0" >
|
||||
<input type="hidden" id="Mode_Tampil" value="0" >
|
||||
';
|
||||
|
||||
} else if ( $data == "tabel-nota" ) {
|
||||
$tsql = (Param::Get("Mode_Tampil", 0)==1) ? "" : " AND Lunas=0";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT *,Total_Hutang-Total_Bayar-Total_Potong Sisa_Bayar,IF(Data_Beli=1,'B','R') Tipe FROM inv_beli WHERE SupID='".$id_sup."'".$tsql);
|
||||
$obj->set_query_footer("SELECT SUM(Total_Hutang) Total_Hutang FROM inv_beli WHERE SupID='".$id_sup."'".$tsql);
|
||||
$obj->add_field("Tipe", "Tipe", "hid");
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("No_Faktur", "No. Faktur", "l");
|
||||
$obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Total_Hutang", "Jumlah Faktur", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Total_Bayar", "Bayar", "r", "rupiah");
|
||||
$obj->add_field("Sisa_Bayar", "Sisa", "r", "rupiah", "rupiah");
|
||||
if (Param::Get("Mode_Tampil", 0)==1) $obj->add_field("Lunas", "Lunas", "c", "checkbox");
|
||||
$obj->set_field_order("No_Beli", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliLunasJS.nota_select");
|
||||
$obj->set_func_navi("BeliLunasJS.data_query('tabel-nota')");
|
||||
$ajson[] = $obj->json_table("divTXNota");
|
||||
|
||||
} else if ( $data == "tabel-bayar" ) {
|
||||
$lunas = Param::Get("Lunas", 0);
|
||||
|
||||
if (in_array($mode_detail, ["insert","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli_lunas");
|
||||
$sql->add_param("No_Beli");
|
||||
$sql->add_param_date("Tgl_Bayar");
|
||||
$sql->add_param("Total_Bayar");
|
||||
$sql->add_param("Total_Potong");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
|
||||
if ($mode_detail == "insert") {
|
||||
$abeli = ['CabID'=>0, 'SupID'=>0];
|
||||
$db->Query("SELECT CabID,SupID FROM inv_beli WHERE No_Beli='".$nomor."' LIMIT 1");
|
||||
if ($db->Next()) $abeli = $db->AllRow();
|
||||
$sql->add_param("CabID", $abeli['CabID']);
|
||||
$sql->add_param("SupID", $abeli['SupID']);
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail == "delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
|
||||
$anota = ['Bayar'=>0, 'Potong'=>0, 'Total_Sisa'=>0, 'Lunas'=>0];
|
||||
$db->Query("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_beli_lunas WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $anota = $db->AllRow();
|
||||
$db->Query("UPDATE inv_beli SET Total_Bayar='".$anota['Bayar']."',Total_Potong='".$anota['Potong']."',Lunas=IF(Total_Hutang-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str(Param::Get("Tgl_Bayar"))."','0000-00-00') WHERE No_Beli='".$nomor."'");
|
||||
|
||||
$db->Query("SELECT Lunas,Total_Hutang-Total_Bayar-Total_Potong Total_Sisa FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $anota = $db->AllRow();
|
||||
$lunas = $anota['Lunas'];
|
||||
$ajson[] = array('type'=>"form", 'id'=>"Total_Sisa", 'value'=>$anota['Total_Sisa']);
|
||||
$ajson[] = array('type'=>"form", 'id'=>"Lunas", 'value'=>$anota['Lunas']);
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM inv_beli_lunas WHERE No_Beli='".$nomor."' ORDER BY ID");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("Tgl_Bayar", "Tgl. Bayar", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Total_Bayar", "Jumlah Bayar", "r", "rupiah");
|
||||
$obj->add_field("Total_Potong", "Pemotongan", "r", "rupiah");
|
||||
$obj->set_field_order("Tgl_Bayar", "A");
|
||||
if ($_SESSION['__WEB_USER']['Level']==0 && ($lunas==0 || ($lunas==1 && Param::Get('Mode_Tampil',0)==1))) {
|
||||
$obj->add_row_btn("trash", "Hapus", "BeliLunasJS.bayar_hapus", "No_Beli", $nomor);
|
||||
}
|
||||
if ($lunas == 0) {
|
||||
$obj->set_func_btn("BeliLunasJS.bayar_show", '<i class="bi-wallet me-1"></i> Pembayaran');
|
||||
}
|
||||
$obj->set_func_navi("BeliLunasJS.data_query('tabel-bayar')");
|
||||
$ajson[] = $obj->json_table("divDetailBayar");
|
||||
|
||||
} else if ( $data == "brow-sup" ) {
|
||||
$tcari = trim(Param::Get("Cari_Sup"));
|
||||
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM para_supplier WHERE Aktif=1".$tsql);
|
||||
$obj->add_field("SupID", "ID", "hid");
|
||||
$obj->add_field("Kode_Sup", "Kode", "l");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Telp_Sup", "Telp", "l");
|
||||
$obj->add_field("Alamat_Sup", "Alamat", "hid");
|
||||
$obj->set_field_order("Kode_Sup", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliLunasJS.sup_select");
|
||||
$obj->set_func_navi("BeliLunasJS.data_query('brow-sup')");
|
||||
$ajson[] = $obj->json_table("divBrowSup");
|
||||
|
||||
} else if ( $data == "auto-sup" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
if (is_string($tcari) && strlen($tcari) < 64) {
|
||||
$db->Query("SELECT * FROM para_supplier WHERE Aktif=1 AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%' ORDER BY Kode_Sup LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("SupID"), 'text'=>$db->Row("Nama_Sup"), 'data'=>$db->Row("Alamat_Sup")];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-nota") {
|
||||
$atabel = ['No_Beli'=>$nomor]; $tipe = Param::Get("Tipe_Nota", "B");
|
||||
$db->Query("SELECT *,Total_Hutang-Total_Bayar-Total_Potong Sisa_Bayar FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], false, false, "text");
|
||||
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], false, false, "text");
|
||||
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], false, false);
|
||||
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", $atabel['Tgl_Faktur'], false, false);
|
||||
$tjumlah = $form->textbox("_", "Total_Hutang", $atabel['Total_Hutang'], false, false, "double");
|
||||
$tbayar = $form->textbox("_", "Total_Bayar2", $atabel['Total_Bayar'], false, false, "double");
|
||||
$tsisa = $form->textbox("_", "Total_Sisa", $atabel['Sisa_Bayar'], false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<div class="col text-center fs-5 pb-1">Informasi Faktur / Retur</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">No. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tnota.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah '.(($tipe=="B")?"Faktur":"Retur").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tjumlah.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">'.(($tipe=="B")?"No. Faktur":"Catatan").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tfaktur.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah Bayar</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglnota.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Sisa Hutang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tsisa.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. Faktur</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglfaktur.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="Total_Sisa" value="'.$atabel['Sisa_Bayar'].'" >
|
||||
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
|
||||
<input type="hidden" id="Tipe_Nota" value="'.$tipe.'" >
|
||||
';
|
||||
|
||||
} else if ($data == "detail-bayar") {
|
||||
$form = new Form($db);
|
||||
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
|
||||
$ttotal = $form->textbox("_", "Temp_Total", Param::Get("Total_Sisa",0), false, false, "double");
|
||||
$tsisa = $form->textbox("_", "Temp_Sisa", 0, false, false, "double");
|
||||
$tbayar = $form->textbox("_", "Total_Bayar", Param::Get("Total_Sisa",0), true, false, "double", null, null, null, "BeliLunasJS.Hitung_Detail();");
|
||||
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double", null, null, null, "BeliLunasJS.Hitung_Detail();");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$ttglbyr.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Total Faktur</label>
|
||||
<div class="col">'.$ttotal.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Bayar</label>
|
||||
<div class="col">'.$tbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Potong">Potongan</label>
|
||||
<div class="col">'.$tpotong.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Sisa Tagihan</label>
|
||||
<div class="col">'.$tsisa.'</div>
|
||||
</div>
|
||||
';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pembayaran Hutang</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butMode" type="button"><i class="bi-list me-2"></i>Normal</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divTXNota"> </div>
|
||||
<div id="divDetailNota" class="d-none"> </div>
|
||||
<div id="divDetailBayar" class="d-none"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli_lunas_sup.php
|
||||
Desc. : PHP - Transaksi Pelunasan Pembelian / Supplier
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 7th, 2011.
|
||||
Last Modified : December 11th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
|
||||
if ( $data == "master" ) {
|
||||
if ($mode == "cancel") {
|
||||
$db->Query("DELETE FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."'");
|
||||
}
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$form = new Form($db);
|
||||
$tsup = $form->textauto("_", "Nama_Sup", ['value'=>0,'text'=>""], true, false, "ketik nama supplier");
|
||||
$tsupal = $form->textbox("_", "Alamat_Sup", "", false, false, "text");
|
||||
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
|
||||
$tdisp = $form->textbox("_", "Disp_Bayar", 0, false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Sup">Nama Supplier</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tsup.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliLunasSupJS.sup_brow();"><i class="bi-search"></i></button></div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
|
||||
<div class="col-sm-4 col-lg-2">'.$ttglbyr.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Alamat Supplier</label>
|
||||
<div class="col">'.$tsupal.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Total Pembayaran</label>
|
||||
<div class="col">'.$tdisp.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="SupID" value="0" >';
|
||||
|
||||
} else if ( $data == "tabel-nota" ) {
|
||||
if ($mode_detail == "update") {
|
||||
$no_beli = Param::Get("No_Beli");
|
||||
$bayar = Param::Get("Jumlah_Bayar", 0);
|
||||
$potong = Param::Get("Jumlah_Potong", 0);
|
||||
$abeli = ['CabID'=>0, 'SupID'=>$id_sup];
|
||||
$db->Query("SELECT * FROM inv_beli WHERE No_Beli='".$no_beli."' LIMIT 1");
|
||||
if ($db->Next()) $abeli = $db->AllRow();
|
||||
|
||||
$db->Query("REPLACE INTO tmp_inv_beli_lunas (No_Beli,CabID,SupID,Jumlah_Bayar,Jumlah_Potong,UserID,Unix) VALUES ('".$no_beli."','".$abeli['CabID']."','".$abeli['SupID']."','".$bayar."','".$potong."','".user_id()."','".user_unix()."')");
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT B.*,L.Bayar,L.Potong,B.Sisa_Faktur-IF(ISNULL(L.Bayar2),0,L.Bayar2) Jumlah_Sisa FROM (SELECT *,Total_Bayar+Total_Potong Total_Bayar2,Total_Hutang-Total_Bayar-Total_Potong Sisa_Faktur FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0) B LEFT JOIN (SELECT No_Beli,Jumlah_Potong Potong,Jumlah_Bayar Bayar,(Jumlah_Bayar+Jumlah_Potong) Bayar2 FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."') L ON (B.No_Beli=L.No_Beli)");
|
||||
$obj->set_query_footer("SELECT SUM(B.Sisa_Faktur) Sisa_Faktur,SUM(L.Bayar) Bayar,SUM(L.Potong) Potong,SUM(B.Sisa_Faktur-IF(ISNULL(L.Bayar2),0,L.Bayar2)) Jumlah_Sisa FROM (SELECT No_Beli,Total_Hutang-Total_Bayar-Total_Potong Sisa_Faktur FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0) B LEFT JOIN (SELECT No_Beli,Jumlah_Bayar Bayar,Jumlah_Potong Potong,(Jumlah_Bayar+Jumlah_Potong) Bayar2 FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."') L ON (B.No_Beli=L.No_Beli)");
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("No_Faktur", "No. Faktur", "l");
|
||||
$obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Total_Hutang", "Hutang", "hid", "rupiah");
|
||||
$obj->add_field("Total_Bayar2", "Bayar", "hid", "rupiah");
|
||||
$obj->add_field("Sisa_Faktur", "Sub. Total", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Bayar", "Pembayaran", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Potong", "Pemotongan", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Jumlah_Sisa", "Sisa Hutang", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("No_Beli", "A");
|
||||
$obj->add_row_btn("wallet", "Bayar", "BeliLunasSupJS.bayar_tampil");
|
||||
$obj->set_func_navi("BeliLunasSupJS.data_query('tabel-nota')");
|
||||
$ajson[] = $obj->json_table("divTXNota");
|
||||
|
||||
$tot_bayar = 0;
|
||||
$db->Query("SELECT SUM(Jumlah_Bayar) Bayar FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."' AND No_Beli IN (SELECT No_Beli FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0)");
|
||||
if ($db->Next()) $tot_bayar = $db->Row("Bayar", 0);
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Disp_Bayar", 'value'=>rupiah($tot_bayar)];
|
||||
|
||||
} else if ( $data == "brow-sup" ) {
|
||||
$tcari = trim(Param::Get("Cari_Sup"));
|
||||
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM para_supplier WHERE Lunas>0".$tsql);
|
||||
$obj->add_field("SupID", "ID", "hid");
|
||||
$obj->add_field("Kode_Sup", "Kode", "l");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Telp_Sup", "Telp", "l");
|
||||
$obj->add_field("Alamat_Sup", "Alamat", "hid");
|
||||
$obj->set_field_order("Kode_Sup", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliLunasSupJS.sup_select");
|
||||
$obj->set_func_navi("BeliLunasSupJS.data_query('brow-sup')");
|
||||
$ajson[] = $obj->json_table("divBrowSup");
|
||||
|
||||
} else if ( $data == "auto-sup" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
if (is_string($tcari) && strlen($tcari) < 64) {
|
||||
$db->Query("SELECT * FROM para_supplier WHERE Lunas>0 AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%' ORDER BY Kode_Sup LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("SupID"), 'text'=>$db->Row("Nama_Sup"), 'data'=>$db->Row("Alamat_Sup")];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-bayar") {
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", "", false, false, "text");
|
||||
$tfaktur = $form->textbox("_", "No_Faktur", "", false, false, "text");
|
||||
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", "", false, false);
|
||||
$tsbayar = $form->textbox("_", "SBayar", 0, false, false, "double");
|
||||
$tjfaktur = $form->textbox("_", "Jumlah_Faktur", 0, false, false, "double");
|
||||
$tjbayar = $form->textbox("_", "Jumlah_Bayar", 0, true, false, "double");
|
||||
$tjpotong = $form->textbox("_", "Jumlah_Potong", 0, true, false, "double");
|
||||
$tsisa = $form->textbox("_", "Sisa_Bayar", 0, false, false, "double");
|
||||
$tsfaktur = $form->textbox("_", "Faktur", 0, false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">No. Transaksi</label>
|
||||
<div class="col">'.$tnota.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">No. Faktur</label>
|
||||
<div class="col">'.$tfaktur.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Tanggal Faktur</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$ttglfaktur.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Nilai Faktur</label>
|
||||
<div class="col">'.$tsfaktur.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Pembayaran Sebelumnya</label>
|
||||
<div class="col">'.$tsbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Sub. Total</label>
|
||||
<div class="col">'.$tjfaktur.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Jumlah_Bayar">Pembayaran Sekarang</label>
|
||||
<div class="col">'.$tjbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Jumlah_Potong">Pemotongan Sekarang</label>
|
||||
<div class="col">'.$tjpotong.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Sisa Faktur</label>
|
||||
<div class="col">'.$tsisa.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="mode_detail" value="update" >';
|
||||
|
||||
} else if ( $data == "proses-bayar" ) {
|
||||
$tgl_bayar = tgl_sql2str(Param::Get("Tgl_Bayar"));
|
||||
|
||||
$alist = [];
|
||||
$db->Query("SELECT No_Beli,CabID,SupID,Jumlah_Bayar,Jumlah_Potong FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."' AND No_Beli IN (SELECT No_Beli FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0)");
|
||||
while ($db->Next()) $alist[] = $db->AllRow();
|
||||
|
||||
foreach ($alist as $_key => $_val) {
|
||||
$db->Query("INSERT INTO inv_beli_lunas SET No_Beli='".$_val['No_Beli']."',CabID='".$_val['CabID']."',SupID='".$_val['SupID']."',Tgl_Bayar='".$tgl_bayar."',Total_Bayar='".$_val['Jumlah_Bayar']."',Total_Potong='".$_val['Jumlah_Potong']."',UserID='".user_id()."'");
|
||||
$db->Query("UPDATE inv_beli B,(SELECT No_Beli,MAX(Tgl_Bayar) Tgl_Lunas,SUM(Total_Bayar) Total_Bayar,SUM(Total_Potong) Total_Potong FROM inv_beli_lunas WHERE No_Beli='".$_val['No_Beli']."') L SET B.Total_Bayar=L.Total_Bayar,B.Total_Potong=L.Total_Potong,B.Lunas=IF(B.Total_Hutang-B.Total_Bayar-B.Total_Potong=0,1,0),B.Tgl_Lunas=IF(B.Lunas=1,L.Tgl_Lunas,'0000-00-00') WHERE B.No_Beli=L.No_Beli AND B.No_Beli='".$_val['No_Beli']."'");
|
||||
$db->Query("DELETE FROM tmp_inv_beli_lunas WHERE No_Beli='".$_val['No_Beli']."'");
|
||||
}
|
||||
Update_Lunas_Sup($id_sup);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pembayaran Hutang / Supplier</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divTXNota"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,316 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli_retur.php
|
||||
Desc. : PHP - Transaksi Retur Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 10th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$nomor = Param::Get("No_Beli", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Beli'=>$nomor, 'CabID'=>$id_cab];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel['No_Beli'] = "TR-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Beli'] = tgl_ymd();
|
||||
$nomor = "";
|
||||
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor);
|
||||
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
|
||||
if ($b_baru) $nomor = Nomor_Baru("R", Param::Get("Tgl_Beli"), true);
|
||||
Detail_Save($nomor, 4, $id_cab, Param::Get("Tgl_Beli"), $b_baru, $no_lama);
|
||||
|
||||
$tot_retur = 0;
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Retur_Beli FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $tot_retur = $db->RowFloat("Retur_Beli", 0);
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli");
|
||||
$sql->add_param_date("Tgl_Beli");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $tot_retur);
|
||||
$sql->add_param("Total_Hutang", $tot_retur);
|
||||
$sql->add_param("No_Faktur");
|
||||
$sql->add_param("Tgl_Faktur", "Tgl_Beli", true);
|
||||
$sql->add_param("Data_Beli", 0);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
$sql->UpdateDB();
|
||||
|
||||
Update_Lunas_Sup(Param::Get("SupID"));
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
Detail_Cancel($nomor);
|
||||
$mode = "view";
|
||||
$nomor = ""; $atabel['No_Beli'] = "";
|
||||
}
|
||||
|
||||
if ($nomor <> "" && $mode <> "cancel") {
|
||||
$db->Query("SELECT * FROM inv_beli WHERE Data_Beli=0 AND No_Beli='".$nomor."'");
|
||||
if (!$db->Next()) {
|
||||
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
|
||||
} else $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], !$enable, false, "text", "nomor transaksi");
|
||||
$ttgl = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, false);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "]);
|
||||
$tcatat = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $enable, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Beli">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliReturJS.tx_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Beli">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttgl.'</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Catatan</label>
|
||||
<div class="col">'.$tcatat.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
$ajson['status'] = true;
|
||||
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$iqty = doubleval(Param::Get("Qty", 0)) * -1; $istok = $iqty;
|
||||
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
|
||||
if ($db->Next()) $istok = $db->RowFloat("Qty", 1) * $iqty;
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("tmp_inv_detail");
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty", $iqty);
|
||||
$sql->add_param("Stok", $istok);
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Harga_Jual", Param::Get("Harga_Beli", 0));
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Ref", $nomor);
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->add_param("No_Ref", $nomor);
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$qview = ""; $qtabel = "inv_detail";
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
if ($mode=="add") $qview = " AND Unix=".user_unix();
|
||||
$qtabel = "tmp_inv_detail";
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT D.*,P.Kode_SKU,P.Nama_Produk,P.Nama_Satuan FROM (SELECT *,-Qty Qty2,(-Qty*Harga_Beli) Total FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
|
||||
$obj->set_query_footer("SELECT SUM(D.Total) Total FROM (SELECT (-Qty*Harga_Beli) Total FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Qty2", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah2");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah2", "rupiah2");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "BeliReturJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "BeliReturJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("BeliReturJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Barang');
|
||||
$obj->set_func_btn("BeliReturJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("BeliReturJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? " LIMIT 100" : " WHERE CONCAT(B.No_Beli,S.Nama_Sup,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT * FROM inv_beli WHERE Data_Beli=0) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)".$tsql);
|
||||
$obj->add_field("No_Beli", "No. Transaksi", "c");
|
||||
$obj->add_field("Tgl_Beli", "Tgl. Transaksi", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Hutang", "Total", "r", "rupiah2");
|
||||
$obj->set_field_order("No_Beli", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliReturJS.tx_select");
|
||||
$obj->set_func_navi("BeliReturJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->json_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": "";
|
||||
$tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND S.SupID='".Param::Get("SupID")."'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P LEFT JOIN inv_produk_sup S ON (P.InvID=S.InvID)", "P.*", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("SatuanID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliReturJS.produk_select");
|
||||
$obj->set_func_navi("BeliReturJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',K.Harga_Jual) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")), 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID"), 'SatuanID'=>Param::Get("SatuanID")];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT Kode_SKU,Kode_Barcode,Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik sku / barcode / nama barang");
|
||||
$tkode = $form->textbox("_", "Kode_Barang", $atabel['Kode_SKU']." / ".$atabel['Kode_Barcode'], false, false, "text");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
|
||||
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</label>
|
||||
<div class="col">'.$tkode.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label>
|
||||
<div class="col">'.$tnama.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty.$tsat.'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Beli">Harga (@)</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tbeli.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
|
||||
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
|
||||
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Retur Pembelian</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/cekharga.php
|
||||
Desc. : PHP - Informasi Barang & Harga Jual
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 22nd, 2014.
|
||||
Last Modified : January 4th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = $_SESSION['__APP_INV']['CABANGID'];
|
||||
|
||||
if ($data == "auto-produk") {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/K.Qty,2)) Sisa_Stok,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")).' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "scan-produk") {
|
||||
$tcari = Param::Get("Cari_Produk");
|
||||
$ahasil = [];
|
||||
$bcode = 0;
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.InvID,K.Kode_SKU,K.Kode_Barcode,P.Nama_Produk,S.Nama_Satuan,CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8) Harga_Jual FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$ahasil = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.InvID,K.Kode_SKU,K.Kode_Barcode,P.Nama_Produk,S.Nama_Satuan,CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8) Harga_Jual FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$ahasil = $db->AllRow();
|
||||
}
|
||||
}
|
||||
|
||||
$ahasil['Nama_Supplier'] = "BELUM ADA";
|
||||
if (count($ahasil) > 0) {
|
||||
$db->Query("SELECT S.Nama_Sup Nama FROM para_supplier S WHERE S.SupID=(SELECT SupID FROM inv_produk_sup WHERE InvID='".$ahasil['InvID']."' LIMIT 1)");
|
||||
if ($db->Next()) $ahasil['Nama_Supplier'] = $db->Row("Nama");
|
||||
}
|
||||
$ajson['InvID'] = $ahasil['InvID'];
|
||||
$ajson['Kode_Barang'] = $ahasil['Kode_SKU']." / ".$ahasil['Kode_Barcode'];
|
||||
$ajson['Nama_Barang'] = $ahasil['Nama_Produk'];
|
||||
$ajson['Nama_Satuan'] = $ahasil['Nama_Satuan'];
|
||||
$ajson['Harga_Jual'] = $ahasil['Harga_Jual'];
|
||||
$ajson['Nama_Supplier'] = $ahasil['Nama_Supplier'];
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Nama_Produk", "Produk", "hid");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "hid");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "CekHargaJS.produk_select");
|
||||
$obj->set_func_navi("CekHargaJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "cek_supplier") {
|
||||
$n_sup = "BELUM ADA";
|
||||
$db->Query("SELECT S.Nama_Sup Nama FROM para_supplier S WHERE S.SupID=(SELECT SupID FROM inv_produk_sup WHERE InvID='".Param::Get("InvID",0)."' LIMIT 1)");
|
||||
if ($db->Next()) $n_sup = $db->Row("Nama");
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Nama_Supplier", 'value'=>$n_sup];
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$tbrg = $form->textauto("_", "Nama_Produk", null, true, true, "Scan Barcode / Ketik Nama Barang");
|
||||
$tkode = $form->textbox("_", "Kode_Barang", "KODE_SKU / KODE_BARCODE", false, false, "text");
|
||||
$tnama = $form->textbox("_", "Nama_Barang", "NAMA_BARANG", false, false, "text");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", "SATUAN", false, false, "text");
|
||||
$tharga = $form->textbox("_", "Harga_Jual", "", false, false, "text");
|
||||
$tsup = $form->textbox("_", "Nama_Supplier", "", false, false, "text");
|
||||
if (isMobile()) {
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col"><div id="qr-reader"></div></div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col"><div class="input-group">'.$tkode.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
|
||||
';
|
||||
} else {
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kunci Pencarian</div><div class="col"><div class="input-group">'.$tbrg.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col">'.$tkode.'</div></div>
|
||||
';
|
||||
}
|
||||
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Nama Barang</div><div class="col">'.$tnama.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Satuan</div><div class="col">'.$tsat.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Harga Jual @</div><div class="col">'.$tharga.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Supplier</div><div class="col">'.$tsup.'</div></div>
|
||||
<input type="hidden" id="InvID" value="0" />';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/mutasi.php
|
||||
Desc. : PHP - Transaksi Mutasi Stok Cabang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : February 28th, 2011.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab_dari = Param::Get("Dari_CabID", 0);
|
||||
$id_cab_ke = Param::Get("Ke_CabID", 0);
|
||||
$nomor = Param::Get("No_Mutasi", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Mutasi'=>$nomor];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel['No_Mutasi'] = "MU-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Mutasi'] = tgl_ymd();
|
||||
$atabel['Dari_CabID'] = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$atabel['Ke_CabID'] = 0;
|
||||
$nomor = "";
|
||||
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor, false, true);
|
||||
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
|
||||
if ($b_baru) $nomor = Nomor_Baru("M", Param::Get("Tgl_Mutasi"), true);
|
||||
Detail_Save($nomor, 2, $id_cab_ke, Param::Get("Tgl_Mutasi"), $b_baru, $no_lama, true, $id_cab_dari);
|
||||
|
||||
$tot_mutasi = 0;
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli FROM inv_detail WHERE No_Ref='".$nomor."' AND Qty>0");
|
||||
if ($db->Next()) $tot_mutasi = $db->RowFloat("Beli", 0);
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_mutasi");
|
||||
$sql->add_param_date("Tgl_Mutasi");
|
||||
$sql->add_param("Dari_CabID");
|
||||
$sql->add_param("Ke_CabID");
|
||||
$sql->add_param("Total_Mutasi", $tot_mutasi);
|
||||
$sql->add_param("Catatan");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Mutasi", $nomor);
|
||||
$sql->UpdateDB();
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
Detail_Cancel($nomor);
|
||||
$mode = "view";
|
||||
$nomor = ""; $atabel['No_Mutasi'] = "";
|
||||
}
|
||||
|
||||
if ($nomor <> "" && $mode <> "cancel") {
|
||||
$db->Query("SELECT * FROM inv_mutasi WHERE No_Mutasi='".$nomor."'");
|
||||
if (!$db->Next()) {
|
||||
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
|
||||
} else $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Mutasi", $atabel['No_Mutasi'], !$enable, false, "text", "nomor transaksi");
|
||||
$ttgl = $form->datebox("_", "Tgl_Mutasi", $atabel['Tgl_Mutasi'], $enable, false);
|
||||
$tcab1 = $form->option_db("_", "Dari_CabID", $atabel['Dari_CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tcab2 = $form->option_db("_", "Ke_CabID", $atabel['Ke_CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tcatat = $form->textbox("_", "Catatan", $atabel['Catatan'], $enable, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="No_Mutasi">Nomor Transaksi</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="MutasiJS.tx_brow();"><i class="bi-search"></i></button></div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Dari_CabID">Dari Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab1.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Mutasi">Tanggal Transaksi</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttgl.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Ke_CabID">Ke Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab2.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Catatan">Catatan</label>
|
||||
<div class="col">'.$tcatat.'</div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_mutasi WHERE No_Mutasi='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
$ajson['status'] = true;
|
||||
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$iqty = doubleval(Param::Get("Qty", 0)); $istok = $iqty;
|
||||
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
|
||||
if ($db->Next()) $istok = $db->RowFloat("Qty", 1) * $iqty;
|
||||
$harga_beli = Param::Get("Harga_Beli", 0);
|
||||
|
||||
$sql = new SQL($db); // cabang tujuan + qty positip
|
||||
$sql->set_table("tmp_inv_detail");
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty", $iqty);
|
||||
$sql->add_param("Stok", $istok);
|
||||
$sql->add_param("Harga_Beli", $harga_beli);
|
||||
$sql->add_param("Harga_Jual", $harga_beli);
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Ref", $nomor);
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->add_param("No_Ref", $nomor);
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$qview = "AND Qty>0"; $qtabel = "inv_detail";
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
if ($mode=="add") $qview = " AND Unix=".user_unix();
|
||||
$qtabel = "tmp_inv_detail";
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT D.*,P.Kode_SKU,P.Nama_Produk,P.Nama_Satuan,P.StokID,(D.Qty*D.Harga_Beli) Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
|
||||
$obj->set_query_footer("SELECT COUNT(*) Harga_Beli,SUM(Qty*Harga_Beli) Total FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview);
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("StokID", "StokID", "hid");
|
||||
$obj->add_field("Harga_Beli", "HPP", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "l");
|
||||
$obj->add_field("Qty", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah", "items");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "MutasiJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "MutasiJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("MutasiJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Barang');
|
||||
$obj->set_func_btn("MutasiJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("MutasiJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_Mutasi,DATE_FORMAT(Tgl_Mutasi,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_mutasi".$tsql.") M LEFT JOIN para_cabang C1 ON (C1.CabID=M.Dari_CabID) LEFT JOIN para_cabang C2 ON (C2.CabID=M.Ke_CabID)", "M.*,C1.Nama_Cab Cab1,C2.Nama_Cab Cab2", "");
|
||||
$obj->add_field("No_Mutasi", "No. Transaksi", "c");
|
||||
$obj->add_field("Tgl_Mutasi", "Tgl. Transaksi", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Cab1", "Dari Cab", "c");
|
||||
$obj->add_field("Cab2", "Ke Cab", "c");
|
||||
$obj->add_field("Total_Mutasi", "Total", "r", "rupiah");
|
||||
$obj->set_field_order("No_Mutasi", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "MutasiJS.tx_select");
|
||||
$obj->set_func_navi("MutasiJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT InvID,SatuanID,SUM(Stok) Stok FROM inv_detail WHERE CabID='".$id_cab_dari."' GROUP BY InvID) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)", "D.InvID,P.StokID,D.Stok,P.Kode_SKU,P.Nama_Produk,P.Harga_Pokok", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("StokID", "StokID", "hid");
|
||||
$obj->add_field("Harga_Pokok", "HPP", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "l");
|
||||
$obj->add_field("Stok", "Stok", "r");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "MutasiJS.produk_select");
|
||||
$obj->set_func_navi("MutasiJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/K.Qty,2)) Sisa_Stok,K.Kode_SKU,S.Nama_Satuan,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE CabID='".$id_cab_dari."' GROUP BY InvID) X ON (K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID"), 'SatuanID'=>Param::Get("SatuanID"), 'HPP'=>Param::Get("HPP")];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT Kode_SKU,Kode_Barcode,Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik sku / barcode / nama barang");
|
||||
$tkode = $form->textbox("_", "Kode_Barang", $atabel['Kode_SKU']." / ".$atabel['Kode_Barcode'], false, false, "text");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, false, "double");
|
||||
$tharga = $form->textbox("_", "Harga_Beli", $atabel['HPP'], false, false, "double");
|
||||
$tjumlah = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</label>
|
||||
<div class="col">'.$tkode.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label>
|
||||
<div class="col">'.$tnama.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
|
||||
<div class="col-sm-5 col-lg-4">'.$tqty.'</div>
|
||||
<div class="col">'.$tsat.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Harga @</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$tharga.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$tjumlah.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
|
||||
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
|
||||
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Mutasi Stok Cabang</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,304 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/opname.php
|
||||
Desc. : PHP - Transaksi Opname Stok Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 24th, 2010.
|
||||
Last Modified : September 29th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$nomor = Param::Get("No_Opname", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Opname'=>$nomor, 'CabID'=>0];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel['No_Opname'] = "TO-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Opname'] = tgl_ymd();
|
||||
$atabel['CabID'] = $id_cab;
|
||||
$nomor = "";
|
||||
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor);
|
||||
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
|
||||
if ($b_baru) $nomor = Nomor_Baru("O", Param::Get("Tgl_Opname"), true);
|
||||
Detail_Save($nomor, 1, $id_cab, Param::Get("Tgl_Opname"), $b_baru, $no_lama);
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_opname");
|
||||
$sql->add_param_date("Tgl_Opname");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("Catatan");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Opname", $nomor);
|
||||
$sql->UpdateDB();
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
Detail_Cancel($nomor);
|
||||
$mode = "view";
|
||||
$nomor = ""; $atabel['No_Opname'] = "";
|
||||
}
|
||||
|
||||
if ($nomor <> "" && $mode <> "cancel") {
|
||||
$db->Query("SELECT * FROM inv_opname WHERE No_Opname='".$nomor."'");
|
||||
if (!$db->Next()) {
|
||||
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
|
||||
} else $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Opname", $atabel['No_Opname'], !$enable, false, "text", "nomor transaksi");
|
||||
$ttgl = $form->datebox("_", "Tgl_Opname", $atabel['Tgl_Opname'], $enable, false);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tcatat = $form->textbox("_", "Catatan", $atabel['Catatan'], $enable, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Opname">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="OpnameJS.tx_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Opname">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttgl.'</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Catatan">Catatan</label>
|
||||
<div class="col">'.$tcatat.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_opname WHERE No_Opname='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
$ajson['status'] = true;
|
||||
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$iqty = doubleval(Param::Get("Qty", 0)); $istok = $iqty;
|
||||
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
|
||||
if ($db->Next()) $istok = $db->RowFloat("Qty", 1) * $iqty;
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("tmp_inv_detail");
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty", $iqty);
|
||||
$sql->add_param("Stok", $istok);
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Harga_Jual", Param::Get("Harga_Beli", 0));
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Ref", $nomor);
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->add_param("No_Ref", $nomor);
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$qview = ""; $qtabel = "inv_detail";
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
if ($mode=="add") $qview = " AND Unix=".user_unix();
|
||||
$qtabel = "tmp_inv_detail";
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT D.*,P.Kode_SKU,P.Nama_Produk,P.Nama_Satuan FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Qty", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "l");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "OpnameJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "OpnameJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("OpnameJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Barang');
|
||||
$obj->set_func_btn("OpnameJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("OpnameJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_Opname,DATE_FORMAT(Tgl_Opname,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_opname".$tsql.") O LEFT JOIN para_cabang C ON (C.CabID=O.CabID)", "O.*,C.Kode_Cab", "");
|
||||
$obj->add_field("No_Opname", "No. Transaksi", "c");
|
||||
$obj->add_field("Tgl_Opname", "Tgl. Transaksi", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Kode_Cab", "Cab", "c");
|
||||
$obj->add_field("Catatan", "Catatan", "awr");
|
||||
$obj->set_field_order("No_Opname", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "OpnameJS.tx_select");
|
||||
$obj->set_func_navi("OpnameJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$ttgl = Param::Get("Tgl_Opname");
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT InvID,SatuanID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$ttgl."' AND CabID='".$id_cab."' GROUP BY InvID) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)", "D.InvID,P.StokID,D.Stok,P.Kode_SKU,P.Nama_Produk,P.Harga_Pokok", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("StokID", "StokID", "hid");
|
||||
$obj->add_field("Harga_Pokok", "HPP", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "l");
|
||||
$obj->add_field("Stok", "Stok", "r");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "OpnameJS.produk_select");
|
||||
$obj->set_func_navi("OpnameJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ttgl = Param::Get("Tgl_Opname");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/K.Qty,2)) Sisa_Stok,K.Kode_SKU,S.Nama_Satuan,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_sql2str($ttgl)."' AND CabID='".$id_cab."' GROUP BY InvID) X ON (K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID"), 'SatuanID'=>Param::Get("SatuanID"), 'HPP'=>Param::Get("HPP")];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT Kode_SKU,Kode_Barcode,Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik sku / barcode / nama barang");
|
||||
$tkode = $form->textbox("_", "Kode_Barang", $atabel['Kode_SKU']." / ".$atabel['Kode_Barcode'], false, false, "text");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
|
||||
$tstok = $form->textbox("_", "Stok_Sistem", 0, false, false, "double");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</label>
|
||||
<div class="col">'.$tkode.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label>
|
||||
<div class="col">'.$tnama.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Satuan</label>
|
||||
<div class="col">'.$tsat.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Stok Sistem</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$tstok.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty Koreksi (+/-)</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$tqty.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
|
||||
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
|
||||
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
|
||||
<input type="hidden" id="Harga_Beli" value="'.$atabel['HPP'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "cek_stok") {
|
||||
$id_inv = Param::Get("InvID", 0);
|
||||
$stok = 0;
|
||||
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_sql2str(Param::Get("Tgl_Opname"))."' AND CabID='".$id_cab."' AND InvID='".$id_inv."'");
|
||||
if ($db->Next()) $stok = $db->RowFloat("Stok", 2);
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Stok_Sistem", 'value'=>rupiah2($stok)];
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Penyesuaian Stok</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/opname_barang.php
|
||||
Desc. : PHP - Transaksi Penyesuaian Stok Per Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 22nd, 2014.
|
||||
Last Modified : September 21st, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = $_SESSION['__APP_INV']['CABANGID'];
|
||||
|
||||
if ($data == "auto-produk") {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/K.Qty,2)) Sisa_Stok,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")).' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "scan-produk") {
|
||||
$tcari = Param::Get("Cari_Produk");
|
||||
$ahasil = [];
|
||||
$bcode = 0;
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.InvID,K.Kode_SKU,K.Kode_Barcode,P.Nama_Produk,S.Nama_Satuan FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$ahasil = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.InvID,K.Kode_SKU,K.Kode_Barcode,P.Nama_Produk,S.Nama_Satuan FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$ahasil = $db->AllRow();
|
||||
}
|
||||
}
|
||||
|
||||
if (count($ahasil) > 0) {
|
||||
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_ymd()."' AND CabID='".$id_cab."' AND InvID='".$ahasil['InvID']."'");
|
||||
if ($db->Next()) $ahasil['Stok_Sistem'] = $db->RowFloat("Stok", 2);
|
||||
}
|
||||
$ajson['InvID'] = $ahasil['InvID'];
|
||||
$ajson['Kode_Barang'] = $ahasil['Kode_SKU']." / ".$ahasil['Kode_Barcode'];
|
||||
$ajson['Nama_Barang'] = $ahasil['Nama_Produk'];
|
||||
$ajson['Nama_Satuan'] = $ahasil['Nama_Satuan'];
|
||||
$ajson['Stok_Sistem'] = $ahasil['Stok_Sistem'];
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Nama_Produk", "Produk", "hid");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "hid");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "OpnameBarangJS.produk_select");
|
||||
$obj->set_func_navi("OpnameBarangJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "cek_stok") {
|
||||
$id_inv = Param::Get("InvID", 0);
|
||||
$stok = 0;
|
||||
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_ymd()."' AND CabID='".$id_cab."' AND InvID='".$id_inv."'");
|
||||
if ($db->Next()) $stok = $db->RowFloat("Stok", 2);
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Stok_Sistem", 'value'=>rupiah2($stok)];
|
||||
|
||||
} else if ( $data == "simpan-opname") {
|
||||
$nomor = ""; $id_inv = Param::Get("InvID", 0); $stok = Param::Get("Stok_Fisik", 0) * 1;
|
||||
$db->Query("SELECT * FROM inv_opname WHERE Tgl_Opname=CURDATE() AND CabID='".$id_cab."' AND UserID='".user_id()."' ORDER BY No_Opname DESC LIMIT 1");
|
||||
if ($db->Next()) $nomor = $db->Row("No_Opname");
|
||||
if ($nomor == "") {
|
||||
$nomor = Nomor_Baru("O", tgl_dmy(), true);
|
||||
$db->Query("UPDATE inv_opname SET Tgl_Opname=CURDATE(), CabID='".$id_cab."', Catatan='OPNAME USER : ".user_id()." - ".user_nama()."', UserID='".user_id()."' WHERE No_Opname='".$nomor."' LIMIT 1");
|
||||
}
|
||||
|
||||
$aproduk = [];
|
||||
$db->Query("SELECT * FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
|
||||
if($db->Next()) $aproduk = $db->AllRow();
|
||||
|
||||
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_ymd()."' AND CabID='".$id_cab."' AND InvID='".$id_inv."'");
|
||||
if ($db->Next()) $stok -= $db->RowFloat("Stok", 0);
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_detail");
|
||||
$sql->add_param("No_Ref", $nomor);
|
||||
$sql->add_param("Tgl_Ref", "CURDATE()", true);
|
||||
$sql->add_param("NotaID", 1);
|
||||
$sql->add_param("CabID", $id_cab);
|
||||
$sql->add_param("InvID", $aproduk['InvID']);
|
||||
$sql->add_param("SatuanID", $aproduk['StokID']);
|
||||
$sql->add_param("Qty", $stok);
|
||||
$sql->add_param("Stok", $stok);
|
||||
$sql->add_param("Harga_Beli", $aproduk['Harga_Pokok']);
|
||||
$sql->add_param("Harga_Jual", $aproduk['Harga_Pokok']);
|
||||
$sql->add_param_userid();
|
||||
$sql->InsertDB();
|
||||
$ajson['Status'] = true;
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$tbrg = $form->textauto("_", "Nama_Produk", null, true, true, "Scan Barcode / Ketik Nama Barang");
|
||||
$tkode = $form->textbox("_", "Kode_Barang", "KODE_SKU / KODE_BARCODE", false, false, "text");
|
||||
$tnama = $form->textbox("_", "Nama_Barang", "NAMA_BARANG", false, false, "text");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", "SATUAN", false, false, "text");
|
||||
$tssis = $form->textbox("_", "Stok_Sistem", "0", false, false, "double");
|
||||
$tsfis = $form->textbox("_", "Stok_Fisik", "0", true, false, "double");
|
||||
if (isMobile()) {
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col"><div id="qr-reader"></div></div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col"><div class="input-group">'.$tkode.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
|
||||
';
|
||||
} else {
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kunci Pencarian</div><div class="col"><div class="input-group">'.$tbrg.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col">'.$tkode.'</div></div>
|
||||
';
|
||||
}
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Nama Barang</div><div class="col">'.$tnama.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Satuan</div><div class="col">'.$tsat.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Stok Sistem</div><div class="col-sm-8 col-lg-6">'.$tssis.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Stok Fisik</div><div class="col-sm-8 col-lg-6">'.$tsfis.'</div></div>
|
||||
<input type="hidden" id="InvID" value="0" />';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,339 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/po.php
|
||||
Desc. : PHP - Transaksi Pembuatan Purchase Order
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
function PO_Data1($nomor="", $baru=false) {
|
||||
global $db;
|
||||
$aparam = ['No_PO'=>$nomor];
|
||||
if (trim($nomor)=="") {
|
||||
if ($baru) $aparam['No_PO'] = "PO".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
|
||||
$aparam['Tgl_PO'] = tgl_ymd();
|
||||
$aparam['SupID'] = 0;
|
||||
$aparam['CabID'] = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$aparam['Total_Beli'] = 0;
|
||||
} else {
|
||||
$db->Query("SELECT * FROM inv_po WHERE No_PO='".$nomor."'");
|
||||
if ($db->Next()) $aparam = $db->AllRow();
|
||||
}
|
||||
return $aparam;
|
||||
}
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$nomor = Param::Get("No_PO", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_PO'=>$nomor];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel = PO_Data1("", true);
|
||||
} else if ($mode == "edit") {
|
||||
PO_Detail_Copy($nomor, true);
|
||||
$atabel = PO_Data1($nomor);
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"PO")===false) ? false : true;
|
||||
if ($b_baru) {
|
||||
$nomor = Nomor_Baru("P", Param::Get("Tgl_PO"), true);
|
||||
}
|
||||
PO_Detail_Save($nomor, $b_baru, $no_lama);
|
||||
|
||||
$apo = [];
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli FROM inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
if ($db->Next()) $apo = $db->AllRow();
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_po");
|
||||
$sql->add_param_date("Tgl_PO");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $apo['Beli']);
|
||||
$sql->add_param("Total_Tagihan", $apo['Diskon']);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_PO", $nomor);
|
||||
$sql->UpdateDB();
|
||||
//PO_Update($nomor);
|
||||
|
||||
$atabel = PO_Data1($nomor);
|
||||
$mode = "view";//todo: print jika langsung cetak
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
PO_Detail_Cancel($nomor);
|
||||
$atabel = PO_Data1();
|
||||
} else {
|
||||
$atabel = PO_Data1($nomor);
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_PO", $atabel['No_PO'], !$enable, true, "text", "nomor transaksi");
|
||||
$ttglnota = $form->datebox("_", "Tgl_PO", $atabel['Tgl_PO'], $enable, true);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0," "]);
|
||||
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "], null, "POJS.oc_SupID(this);");
|
||||
$ajson['html'] = '
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_PO">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="POJS.tx_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_PO">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-6">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="Total_Beli" value="'.$atabel['Total_Beli'].'" >
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_po WHERE No_PO='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
$ajson['status'] = true;
|
||||
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("tmp_inv_po_detail");
|
||||
$sql->add_param("No_PO", $nomor);
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty");
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Harga_HPP");
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_PO", $nomor);
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
} else if ($mode_detail == "sup-baru") {
|
||||
$tot_qty = 0;
|
||||
$db->Query("SELECT SUM(Qty) Qty FROM tmp_inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
if ($db->Next()) $tot_qty = $db->Row("Qty", 0);
|
||||
if ($tot_qty > 0) {
|
||||
$ajson[] = array('type'=>"msg", 'wait'=>1500, 'mode'=>"error", 'value'=>"Sudah ada Qty Barang yang telah memiliki Nilai !");
|
||||
} else {
|
||||
$db->Query("DELETE FROM tmp_inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
$db->Query("INSERT INTO tmp_inv_po_detail (No_PO,InvID,SatuanID,Qty,Harga_Beli,Harga_HPP,Invoice,DateStamp,UserID,Unix) SELECT '".$nomor."',P.InvID,K.SatuanID,0,P.Harga_Pokok*K.Qty,P.Harga_Pokok*K.Qty,0,NOW(),'".user_id()."','".user_unix()."' FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk_sup WHERE Aktif=1 AND SupID='".$id_sup."')) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) WHERE P.Aktif=1");
|
||||
}
|
||||
}
|
||||
|
||||
$qview = ""; $qtabel = "inv_po_detail";
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
if ($mode=="add") $qview = " AND Unix=".user_unix();
|
||||
$qtabel = "tmp_inv_po_detail";
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM ".$qtabel." WHERE No_PO='".$nomor."' ".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE InvID IN (SELECT InvID FROM ".$qtabel." WHERE No_PO='".$nomor."') GROUP BY InvID) S ON (S.InvID=D.InvID)", "D.*,P.Kode_SKU,P.Nama_Lengkap,P.Nama_Satuan,P.Harga_Pokok,(D.Qty*D.Harga_Beli) Total,S.Stok,IF(IFNULL(S.Stok,0)>0,1,0) KOSONG", "");
|
||||
$obj->set_query_footer("SELECT SUM(D.Qty*D.Harga_Beli) Total FROM (SELECT * FROM ".$qtabel." WHERE No_PO='".$nomor."' ".$qview.") D");
|
||||
$obj->add_field("ID", "No", "c");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Stok", "Stok", "r", "rupiah2");
|
||||
$obj->add_field("Qty", "PO", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_row_color("KOSONG", "0", "ryellow");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "POJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "POJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("POJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
|
||||
$obj->set_func_btn("POJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("POJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->db_table("divDetailTabel");
|
||||
|
||||
$ntotal = 0;
|
||||
$db->Query("SELECT SUM(D.Qty*D.Harga_Beli) Jumlah FROM ".$qtabel." D WHERE D.No_PO='".$nomor."' ".$qview);
|
||||
if ($db->Next()) $ntotal = floatval($db->Row("Jumlah", 0));
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Total_Beli", 'value'=>$ntotal];
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : "CONCAT(P.No_PO,S.Nama_Sup,DATE_FORMAT(P.Tgl_PO,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_po) P LEFT JOIN para_supplier S ON (P.SupID=S.SupID)", "P.*,S.Nama_Sup", $tsql);
|
||||
$obj->add_field("No_PO", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_PO", "Tgl. Trans", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Beli", "Jumlah PO", "r", "rupiah");
|
||||
$obj->set_field_order("No_PO", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "POJS.tx_select");
|
||||
$obj->set_func_navi("POJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": "";
|
||||
$tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND P.InvID IN (SELECT InvID FROM inv_produk_sup WHERE SupID='".Param::Get("SupID")."')";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Aktif=1 AND InvID NOT IN (SELECT InvID FROM tmp_inv_po_detail WHERE No_PO='".$nomor."')".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("SatuanID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Pokok", "Harga Pokok", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "POJS.produk_select");
|
||||
$obj->set_func_navi("POJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',P.Harga_Pokok*K.Qty) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")), 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_po_detail WHERE No_PO='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik nama produk");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
|
||||
$tstok = $form->textbox("_", "Stok", $atabel['Stok'], false, false, "double");
|
||||
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double");
|
||||
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
$tsat1 = $form->textbox("_", "Nama_Satuan1", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$tsat2 = $form->textbox("_", "Nama_Satuan2", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Produk">Nama Barang</label>
|
||||
<div class="col">'.$tnama.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Qty">Qty</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty.$tsat1.'</div></div>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group float-end"><span class="input-group-text">Stok</span>'.$tstok.$tsat2.'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Beli">Harga (@)</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tbeli.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Total</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
|
||||
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
|
||||
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
|
||||
<input type="hidden" id="Harga_HPP" value="'.$atabel['Harga_HPP'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "detail-item" ) {
|
||||
$ajson['data'] = "kosong";
|
||||
$db->Query("SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE InvID='".Param::Get("InvID")."'");
|
||||
if ($db->Next()) $ajson = $db->AllRow();
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pembuatan Purchase Order</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
|
||||
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
|
||||
<button class="btn btn-light border mb-1 ms-2" id="butShare" type="button"><i class="bi-share me-2"></i>Share</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
|
||||
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divTXMaster"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,552 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/pos/pos.php
|
||||
Desc. : PHP - Transaksi Penjualan / Kasir POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 5th, 2012.
|
||||
Last Modified : January 21st, 2026.
|
||||
|
||||
(c) 2012 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
function master_show($tmode = "", $apara = []) {
|
||||
global $db;
|
||||
$form = new Form($db);
|
||||
$tno_jual = $form->textbox("_", "No_Jual", $apara['No_Jual'], false);
|
||||
$tinfo = '<div class="card bg-light"><img class="img-fluid p-1" src="'.$_SESSION['__WEB_APP']['WEB_PATH'].'assets/images/logo60.png" style="opacity:.75;"></div>';
|
||||
echo '
|
||||
<div class="row mb-3">
|
||||
<div class="col"><div class="border border-success rounded px-2 display-6 text-end" id="Total_Disp">'.$apara['Kembali'].'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col">'.$tinfo.'</div></div>
|
||||
<div class="row mb-1">
|
||||
<div class="col">
|
||||
<div class="input-group">'.$tno_jual.'
|
||||
<button class="btn btn-info shadow-none" type="button" id="posPEND"><i class="bi-search"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1 mt-4"><div class="col d-grid gap-2">
|
||||
<button type="button" class="btn btn-success" id="posSIMPAN"><i class="bi-cart-plus me-1"></i>Bayar</button>
|
||||
<button type="button" class="btn btn-danger" id="posBATAL"><i class="bi-x-lg me-1"></i>Batal</button>
|
||||
</div></div>
|
||||
<div class="row mb-1 mt-4"><div class="col d-grid gap-2">
|
||||
<button type="button" class="btn btn-outline-info" id="posNOTA"><i class="bi-list me-1"></i>Daftar Transaksi</button>
|
||||
<button type="button" class="btn btn-outline-info" id="posBARANG"><i class="bi-search me-1"></i>Cari Barang</button>
|
||||
<button type="button" class="btn btn-outline-info" id="posTAMBAH"><i class="bi-save me-1"></i>Tambah Barang</button>
|
||||
</div></div>
|
||||
<input type="hidden" id="No_Cetak" value="'.$apara['No_Cetak'].'" />
|
||||
<input type="hidden" id="Total_Tunai" value="'.$apara['Total_Tunai'].'" />
|
||||
<input type="hidden" id="Total_Kartu" value="'.$apara['Total_Kartu'].'" />
|
||||
<input type="hidden" id="Total_Bayar" value="'.$apara['Total_Bayar'].'" />
|
||||
<input type="hidden" id="Total_Nota" value="'.$apara['Total_Nota'].'" />
|
||||
<input type="hidden" id="Total_Item" value="'.$apara['Total_Item'].'" />
|
||||
<input type="hidden" id="Tgl_Jual" value="'.tgl_sql2str($apara['Tgl_Jual']).'" />
|
||||
<input type="hidden" id="KartuID" value="'.$apara['KartuID'].'" />
|
||||
<input type="hidden" id="No_Kartu" value="'.$apara['No_Kartu'].'" />
|
||||
<input type="hidden" id="Nama_Kartu" value="'.$apara['Nama_Kartu'].'" />
|
||||
<input type="hidden" id="mode" value="'.$tmode.'" />';
|
||||
}
|
||||
|
||||
function Data_Jual1($nomor="") {
|
||||
global $db;
|
||||
$aparam = [];
|
||||
if (trim($nomor)=="") {
|
||||
$aparam['No_Jual'] = "POS".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
|
||||
$aparam['Tgl_Jual'] = tgl_ymd();
|
||||
$aparam['Total_Nota'] = 0;
|
||||
$aparam['Total_Item'] = 0;
|
||||
$aparam['Total_Tunai'] = 0;
|
||||
$aparam['Total_Kartu'] = 0;
|
||||
$aparam['Total_Bayar'] = 0;
|
||||
$aparam['KartuID'] = 0;
|
||||
$aparam['No_Kartu'] = "";
|
||||
$aparam['Nama_Kartu'] = "";
|
||||
$aparam['Kembali'] = 0;
|
||||
$aparam['No_Cetak'] = "";
|
||||
} else {
|
||||
$tabel_jual = (strpos($nomor,"POS")===false) ? "inv_jual" : "inv_jual_pend";
|
||||
$db->Query("SELECT * FROM ".$tabel_jual." WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND No_Jual='".$nomor."'");
|
||||
if ($db->Next()) $aparam = $db->AllRow();
|
||||
}
|
||||
return $aparam;
|
||||
}
|
||||
|
||||
function Nomor_Pending1() {
|
||||
global $db;
|
||||
$tno = "POS".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#";
|
||||
$ino = 0;
|
||||
$db->Query("SELECT MAX(RIGHT(No_Jual,2)) Nomor FROM inv_jual_pend WHERE LEFT(No_Jual,".strlen($tno).")='".$tno."'");
|
||||
if ($db->Next()) $ino = intval($db->Row("Nomor", 0));
|
||||
$tno .= isi_nol(++$ino, 2);
|
||||
return $tno;
|
||||
}
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$id_other = $_SESSION['__APP_INV']['OTHERINVID'];
|
||||
$nomor = Param::Get("No_Jual");
|
||||
$no_cetak = Param::Get("No_Cetak");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$aparam = [];
|
||||
|
||||
if ($mode == "pending-edit") {
|
||||
Pending_Edit($nomor);
|
||||
$aparam = Data_Jual1($nomor);
|
||||
} else if ($mode == "pending-save") {
|
||||
$b_baru = false;
|
||||
if (substr($nomor,-3)=="#00") {
|
||||
$b_baru = true;
|
||||
$no_lama = $nomor;
|
||||
$nomor = Nomor_Pending1();
|
||||
Pending_Save($no_lama, $nomor);
|
||||
}
|
||||
$apending = [];
|
||||
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(Total_Diskon) Diskon FROM tmp_inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $apending = $db->AllRow();
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_jual_pend");
|
||||
$sql->add_param("No_Jual", $nomor);
|
||||
$sql->add_param_date("Tgl_Jual");
|
||||
$sql->add_param("CabID", $id_cab);
|
||||
$sql->add_param("Total_Jual", $apending['Jual']);
|
||||
$sql->add_param("Total_Diskon", $apending['Diskon']);
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Jual", $nomor);
|
||||
if ($b_baru) $sql->InsertDB();
|
||||
else $sql->UpdateDB();
|
||||
$aparam = Data_Jual1();
|
||||
} else if ($mode == "pending-delete") {
|
||||
Pending_Delete($nomor);
|
||||
$db->Query("DELETE FROM inv_jual_pend WHERE No_Jual='".$nomor."'");
|
||||
$aparam = Data_Jual1();
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor, true);
|
||||
$db->Query("INSERT INTO tmp_inv_detail_lain SELECT No_Ref,ID,Ket,UserID,'".user_unix()."' FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
|
||||
$aparam = Data_Jual1($nomor);
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"POS")===false) ? false : true;
|
||||
if ($b_baru) {
|
||||
$nomor = Nomor_POS_Baru("", true);
|
||||
if (substr($no_lama,-3)!="#00") $db->Query("DELETE FROM inv_jual_pend WHERE No_Jual='".$no_lama."'");
|
||||
}
|
||||
Promo_Barang($no_lama, tgl_dmy());//PROMO BARANG
|
||||
$tot_potong = Promo_Total($no_lama, tgl_dmy());//PROMO TOTAL
|
||||
Detail_Save($nomor, 5, $id_cab, tgl_dmy(), $b_baru, $no_lama);
|
||||
$db->Query("DELETE FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
|
||||
$db->Query("INSERT INTO inv_detail_lain SELECT '".$nomor."',ID,Ket,UserID FROM tmp_inv_detail_lain WHERE No_Ref='".$no_lama."'");
|
||||
$db->Query("DELETE FROM tmp_inv_detail_lain WHERE No_Ref='".$no_lama."'");
|
||||
|
||||
$ajual = [];
|
||||
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(Total_Diskon) Diskon,SUM(-Qty*Harga_Beli) HPP FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $ajual = $db->AllRow();
|
||||
|
||||
$id_kartu = Param::Get("KartuID", 0);
|
||||
$no_kartu = ""; $nama_kartu = "";
|
||||
if ($id_kartu > 0) {
|
||||
$no_kartu = Param::Get("No_Kartu", "");
|
||||
$nama_kartu = Param::Get("Nama_Kartu", "");
|
||||
}
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_jual");
|
||||
$sql->add_param("Tgl_Jual", tgl_ymd());
|
||||
$sql->add_param("Tgl_Lunas", tgl_ymd());
|
||||
$sql->add_param("Total_Jual", $ajual['Jual']);
|
||||
$sql->add_param("Total_Diskon", $ajual['Diskon']);
|
||||
$sql->add_param("Total_Potong", $tot_potong);
|
||||
$sql->add_param("Total_HPP", $ajual['HPP']);
|
||||
$sql->add_param("Total_Bayar");
|
||||
$sql->add_param("Total_Kartu");
|
||||
$sql->add_param("KartuID", $id_kartu);
|
||||
$sql->add_param("No_Kartu", $no_kartu);
|
||||
$sql->add_param("Nama_Kartu", $nama_kartu);
|
||||
$sql->add_param("CabID", $id_cab);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Jual", $nomor);
|
||||
$sql->UpdateDB();
|
||||
Promo_Nota_Proses($nomor, tgl_dmy());//PROMO NOTA
|
||||
|
||||
if ($_SESSION['__APP_INV']['PRINT_AUTO']==1) {
|
||||
$mode = "print";
|
||||
} else {
|
||||
$mode = ($_SESSION['__APP_INV']['PRINT_OPENCD']==1) ? "opencd" : "saveonly";
|
||||
}
|
||||
$aparam = Data_Jual1();
|
||||
$aparam['No_Cetak'] = $nomor;
|
||||
$aparam['Kembali'] = "0";
|
||||
$db->Query("SELECT (Total_Jual-Total_Diskon-Total_Potong-Total_Bayar) Sisa FROM inv_jual WHERE No_Jual='".$nomor."'");
|
||||
if ($db->Next()) $aparam['Kembali'] = '<span style="color:red;">'.rupiah($db->RowFloat("Sisa", 0)).'</span>';
|
||||
|
||||
//MONITOR DISPLAY
|
||||
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
|
||||
$db->Query("UPDATE disp_login SET No_Cetak='".$nomor."' WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
|
||||
}
|
||||
|
||||
} else if ($mode == "delete") {
|
||||
// PROSES UPDATE PROMO
|
||||
$tgl_jual = tgl_ymd();
|
||||
$db->Query("SELECT Tgl_Jual FROM inv_jual WHERE No_Jual='".$nomor."'");
|
||||
if ($db->Next()) $tgl_jual = $db->Row("Tgl_Jual");
|
||||
Promo_Hapus($nomor, tgl_sql2str($tgl_jual));
|
||||
Promo_Nota_Hapus($nomor);
|
||||
|
||||
$db->Query("DELETE FROM inv_jual WHERE No_Jual='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
|
||||
$aparam = Data_Jual1();
|
||||
} else if ($mode == "cancel") {
|
||||
if (substr($nomor,-3)=="#00" || substr($nomor,0,3)!="POS") Detail_Cancel($nomor);
|
||||
$aparam = Data_Jual1();
|
||||
} else {
|
||||
$aparam = Data_Jual1();
|
||||
}
|
||||
//MONITOR DISPLAY
|
||||
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
|
||||
$db->Query("UPDATE disp_login SET No_Pos='".$aparam['No_Jual']."' WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
|
||||
}
|
||||
master_show($mode, $aparam);
|
||||
|
||||
} else if ( $data == "detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$id_inv = Param::Get("InvID", 0);
|
||||
$id_sat = Param::Get("SatuanID", 0);
|
||||
$iqty = Param::Get("Qty", 0) * -1;
|
||||
$dhargaD = Param::Get("Harga_Diskon", 0);
|
||||
$ddiskP = Param::Get("Persen_Diskon", 0);
|
||||
$istok = 1;
|
||||
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".$id_inv."' AND SatuanID='".$id_sat."'");
|
||||
if ($db->Next()) $istok = $db->Row("Qty", 1);
|
||||
if ($ddiskP > 0) $dhargaD = Param::Get("Harga_Jual",0) * $ddiskP * 0.01;
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("tmp_inv_detail");
|
||||
$sql->add_param("No_Ref", $nomor);
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty", $iqty);
|
||||
$sql->add_param("Stok", ($istok*$iqty));
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Harga_Jual");
|
||||
$sql->add_param("Disk_Rupiah", $dhargaD);
|
||||
$sql->add_param("Total_Diskon", "Disk_Rupiah*-Qty", true);
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Ref", $nomor);
|
||||
|
||||
$_id = Param::Get("ID", 0);
|
||||
$_ket = strtoupper(Param::Get("Ket"));
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->InsertDB();
|
||||
if ($id_inv == $id_other) {
|
||||
$_id = $sql->LastInsertID();
|
||||
$db->Query("INSERT INTO tmp_inv_detail_lain (No_Ref,ID,Ket,UserID,Unix) VALUES ('".$nomor."','".$_id."','".$_ket."','".user_id()."','".user_unix()."')");
|
||||
}
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
if ($id_inv == $id_other) $db->Query("UPDATE tmp_inv_detail_lain SET Ket='".$_ket."' WHERE No_Ref='".$nomor."' AND ID='".$_id."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$db->Query("UPDATE tmp_inv_detail SET Qty=0,Stok=0,Total_Diskon=0 WHERE No_Ref='".$nomor."' AND ID='".$_id."'");
|
||||
}
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_css("tabel-pos");
|
||||
$obj->set_query("SELECT D.*,-D.Qty Qty2,IF(ISNULL(O.Ket),P.Nama_Lengkap,O.Ket) Nama_Lengkap,(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total,P.Kode_SKU,IF(D.InvID='".$id_other."',1,0) ISO,IF(D.Qty=0,0,1) IDEL FROM (SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."' AND Promo<2) D LEFT JOIN (SELECT * FROM tmp_inv_detail_lain WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."') O ON (D.No_Ref=O.No_Ref AND D.ID=O.ID) LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
|
||||
$obj->set_query_footer("SELECT CONCAT('Qty: ',FORMAT(SUM(-D.Qty),2),' / Item: ',FORMAT(COUNT(DISTINCT InvID),0)) Nama_Lengkap,SUM(-D.Qty*D.Disk_Rupiah) Disk_Rupiah,SUM(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total FROM tmp_inv_detail D WHERE D.No_Ref='".$nomor."' AND D.Unix='".user_unix()."' AND D.Promo<2");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("ISO", "IS OTHER", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Qty2", "Qty", "r", "koma30");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Disk_Rupiah", "Diskon @", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("ID", "D");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "POSJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "POSJS.detail_hapus", "IDEL", 1);
|
||||
$obj->set_row_color("IDEL", 0, "rcoret");
|
||||
$obj->set_func_navi("POSJS.data_query('detail')");
|
||||
$ajson[] = $obj->json_table("divPOS1", 8);
|
||||
|
||||
$ainfo = ['Total'=>0, 'Item'=>0];
|
||||
$db->Query("SELECT SUM(-Qty*(Harga_Jual-Disk_Rupiah)) Total,COUNT(*) Item FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."'");
|
||||
if ($db->Next()) $ainfo = $db->AllRow();
|
||||
$ajson[] = array('type'=>"form", 'id'=>"Total_Nota", 'value'=>$ainfo['Total']);
|
||||
$ajson[] = array('type'=>"form", 'id'=>"Total_Item", 'value'=>$ainfo['Item']);
|
||||
if ($db->RowFloat("Item")>0) $ajson[] = array('type'=>"html", 'id'=>"Total_Disp", 'value'=>rupiah($ainfo['Total']));
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$nomor = urldecode($nomor);
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$db->Query("SELECT * FROM vi_inv_stok WHERE CabID='".$id_cab."' AND InvID='".$arec['InvID']."' LIMIT 1");
|
||||
$arec['Stok'] = ($db->Next()) ? $db->RowFloat("Stok",0) : 0;
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'].":".$arec['Stok'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/K.Qty,2)) Sisa_Stok,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8),':',CONVERT(IFNULL(X.Stok,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")).' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("SatuanID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "POSJS.produk_select");
|
||||
$obj->set_func_navi("POSJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ($data == "info_produk") {
|
||||
$form = new Form($db);
|
||||
$tbcode = $form->textbox("_", "Kode_Barcode", "", true);
|
||||
$tnama = $form->textbox("_", "Nama_Barang", "", true);
|
||||
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0," "]);
|
||||
$tsat = $form->option_db("_", "StokID", 0, true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0," "]);
|
||||
$thjual = $form->textbox("_", "Harga_Jual", 0, true, false, "double");
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode Barcode</div><div class="col-sm-7 col-lg-6">'.$tbcode.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tnama.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Grup Barang</div><div class="col-sm-8 col-lg-9">'.$tgrup.'</div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Satuan Kemasan</div><div class="col-sm-7 col-lg-6">'.$tsat.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga Jual @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>';
|
||||
|
||||
} else if ($data == "simpan_produk") {
|
||||
$k_barcode = Param::Get("Kode_Barcode", "");
|
||||
$n_produk = Param::Get("Nama_Barang", "");
|
||||
$i_grup = Param::Get("Grup_InvID", 0);
|
||||
$i_stok = Param::Get("StokID", 0);
|
||||
$n_harga = Param::Get("Harga_Jual", 0);
|
||||
$db->Query("INSERT INTO inv_produk (Grup_InvID,Nama_Produk,StokID,NormalID,UserID) VALUES ('".$i_grup."','".$n_produk."','".$i_stok."','".$i_stok."','".user_id()."')");
|
||||
$id_inv = $db->LastInsertID();
|
||||
$db->Query("INSERT INTO inv_produk_kemasan SET InvID='".$id_inv."',SatuanID='".$i_stok."',Kode_SKU='".SKU_Baru($i_grup)."',Kode_Barcode='".$k_barcode."',Qty=1,Harga_Jual='".$n_harga."',UserID='".user_id()."'");
|
||||
$ajson['msg'] = "Pembuatan Item Barang baru telah selesai.";
|
||||
|
||||
} else if ($data == "detail_produk") {
|
||||
$_id = Param::Get("ID", 0);
|
||||
$_id_inv = Param::Get("InvID", 0);
|
||||
$_id_sat = Param::Get("SatuanID", 0);
|
||||
$adetail = ['ID'=>0,'Qty'=>1,'Harga_Diskon'=>0];
|
||||
$db->Query("SELECT InvID,SatuanID,Kode_SKU,Kode_Barcode,Nama_Lengkap,Nama_Satuan,Harga_Jual,Harga_Pokok Harga_Beli FROM vi_inv_produk WHERE InvID='".$_id_inv."' AND SatuanID='".$_id_sat."' LIMIT 1");
|
||||
if ($db->Next()) $adetail = array_merge($adetail, $db->AllRow());
|
||||
if ($mode_detail == "insert") {
|
||||
} else {
|
||||
$db->Query("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual,Disk_Rupiah Harga_Diskon FROM tmp_inv_detail WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
|
||||
if ($db->Next()) $adetail = array_merge($adetail, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tsku = $form->textbox("_", "Kode_SKU", $adetail['Kode_SKU']. " / " .$adetail['Kode_Barcode'], false);
|
||||
$tnama = $form->textbox("_", "Nama_Lengkap", $adetail['Nama_Lengkap'], false);
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $adetail['Nama_Satuan'], false);
|
||||
$tqty = $form->textbox("_", "Qty", abs($adetail['Qty']), true, true, "number");
|
||||
$thjual = $form->textbox("_", "Harga_Jual", $adetail['Harga_Jual'], false, false, "double");
|
||||
$thdisk = $form->textbox("_", "Harga_Diskon", $adetail['Harga_Diskon'], true, false, "double");
|
||||
$tpdisk = $form->textbox("_", "Persen_Diskon", 0, true, false, "double");
|
||||
$tjuml = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col-sm-8 col-lg-9">'.$tsku.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tnama.'</div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Qty</div><div class="col-sm-5 col-lg-4">'.$tqty.'</div><div class="col-sm-3 col-lg-5">'.$tsat.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Diskon @</div><div class="col-sm-5 col-lg-6">'.$thdisk.'</div><div class="col-sm-3 col-lg-3"><div class="input-group"><div class="input-group-text">≈</div>'.$tpdisk.'<div class="input-group-text">%</div></div></div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Sub Total</div><div class="col-sm-7 col-lg-6">'.$tjuml.'</div></div>
|
||||
<input type="hidden" id="ID" value="'.$adetail['ID'].'" />
|
||||
<input type="hidden" id="InvID" value="'.$adetail['InvID'].'" />
|
||||
<input type="hidden" id="SatuanID" value="'.$adetail['SatuanID'].'" />
|
||||
<input type="hidden" id="Harga_Beli" value="'.$adetail['Harga_Beli'].'" />
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" />';
|
||||
|
||||
} else if ($data == "detail_lain") {
|
||||
$_id = Param::Get("ID", 0);
|
||||
$alain = ['ID'=>0,'Qty'=>1,'Harga_Beli'=>0,'Harga_Jual'=>0,'Ket'=>""];
|
||||
$db->Query("SELECT InvID,SatuanID,Kode_SKU,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$_SESSION['__APP_INV']['OTHERINVID']."' LIMIT 1");
|
||||
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
|
||||
if ($mode_detail == "insert") {
|
||||
} else {
|
||||
$db->Query("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual FROM tmp_inv_detail WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
|
||||
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
|
||||
$db->Query("SELECT Ket FROM tmp_inv_detail_lain WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
|
||||
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tsku = $form->textbox("_", "Kode_SKU", $alain['Kode_SKU'], false);
|
||||
$tket = $form->textbox("_", "Ket", $alain['Ket'], true);
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $alain['Nama_Satuan'], false);
|
||||
$tqty = $form->textbox("_", "Qty", abs($alain['Qty']), true, true, "number");
|
||||
$thjual = $form->textbox("_", "Harga_Jual", $alain['Harga_Jual'], true, true, "double");
|
||||
$tjuml = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
echo '
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col-sm-8 col-lg-9">'.$tsku.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tket.'</div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Qty</div><div class="col-sm-5 col-lg-4">'.$tqty.'</div><div class="col-sm-3 col-lg-5">'.$tsat.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Sub Total</div><div class="col-sm-7 col-lg-6">'.$tjuml.'</div></div>
|
||||
<input type="hidden" id="ID" value="'.$alain['ID'].'" />
|
||||
<input type="hidden" id="InvID" value="'.$alain['InvID'].'" />
|
||||
<input type="hidden" id="SatuanID" value="'.$alain['SatuanID'].'" />
|
||||
<input type="hidden" id="Harga_Diskon" value="0" />
|
||||
<input type="hidden" id="Persen_Diskon" value="0" />
|
||||
<input type="hidden" id="Harga_Beli" value="'.$alain['Harga_Beli'].'" />
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" />';
|
||||
|
||||
} else if ($data == "info_kasir") {
|
||||
$tot_jual = Param::Get("Total_Nota", 0);
|
||||
$tot_jual -= Promo_Hitung($nomor, tgl_dmy());
|
||||
|
||||
$form = new Form($db);
|
||||
$tjual = $form->textbox("_", "popTotal_Jual", uang($tot_jual), false, false, "double");
|
||||
$ttunai = $form->textbox("_", "popTotal_Tunai", 0, true, false, "double");
|
||||
$tkartu = $form->textbox("_", "popTotal_Kartu", 0, true, false, "double");
|
||||
$tsisa = $form->textbox("_", "popTotal_Sisa", 0, false, false, "double");
|
||||
$okartu = $form->option_db("_", "popKartuID", 0, true, false, "para_rek_pos", ["KartuID","Kode_Kartu"], "Aktif=1", [0,"Pilihan Non Tunai"]);
|
||||
$tnokartu = $form->textbox("_", "popNo_Kartu", "", true, false, "text");
|
||||
$tnamakartu = $form->textbox("_", "popNama_Kartu", "", true, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Total Nota Rp.</div><div class="col-sm-6 col-lg-7">'.$tjual.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Tunai Rp.</div><div class="col-sm-6 col-lg-7">'.$ttunai.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-6 col-lg-5">'.$okartu.'</div><div class="col-sm-6 col-lg-7">'.$tkartu.'</div></div>
|
||||
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Kembali Rp.</div><div class="col-sm-6 col-lg-7">'.$tsisa.'</div></div>
|
||||
<hr class="my-2 ckartu d-none">
|
||||
<div class="row mb-1 ckartu d-none"><div class="col-sm-6 col-lg-5 col-form-label">Nomor Kartu</div><div class="col-sm-6 col-lg-7">'.$tnokartu.'</div></div>
|
||||
<div class="row mb-1 ckartu d-none"><div class="col-sm-6 col-lg-5 col-form-label">Nama Pemilik</div><div class="col-sm-6 col-lg-7">'.$tnamakartu.'</div></div>
|
||||
<hr class="my-2">
|
||||
<div class="row mt-1">
|
||||
<div class="col-3 d-grid"><button type="button" class="btn btn-primary" id="butKPend">Pending</button></div>
|
||||
<div class="col-3"> </div>
|
||||
<div class="col-3 d-grid"><button type="button" class="btn btn-danger" id="butKBatal" data-bs-dismiss="modal">Batal</button></div>
|
||||
<div class="col-3 d-grid"><button type="button" class="btn btn-success" id="butKBayar">Bayar</button></div>
|
||||
</div>
|
||||
<input type="hidden" id="popTotal_Bayar" value="0" />';
|
||||
$ajson['Total_Disp'] = rupiah($tot_jual);
|
||||
|
||||
} else if ( $data == "brow-nota" ) {
|
||||
$tcari = trim(Param::Get("Cari_Nota"));
|
||||
$tsql = ($tcari=="") ? " AND UserID='".user_id()."' AND Tgl_Jual='".tgl_ymd()."'" : " AND CONCAT(No_Jual,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_jual WHERE CabID='".$id_cab."'".$tsql.") J LEFT JOIN para_rek_pos P ON (J.KartuID=P.KartuID)", "J.*,DATE_FORMAT(J.DateStamp,'%H:%i:%s') Tgl_Jual2,J.Total_Jual-J.Total_Diskon Total,J.Total_Jual-J.Total_Diskon-J.Total_Bayar Kembali,J.UserID,IF(ISNULL(P.Kode_Kartu),'Tunai',P.Kode_Kartu) Kartu", "");
|
||||
$obj->set_query_footer("SELECT SUM(Total_Jual-Total_Diskon) Total,SUM(Total_Jual-Total_Diskon-Total_Bayar) Kembali FROM inv_jual WHERE CabID='".$id_cab."'".$tsql);
|
||||
$obj->add_field("No_Jual", "No. Nota", "c");
|
||||
$obj->add_field("Tgl_Jual", "Tanggal", "c", "sqltgl");
|
||||
$obj->add_field("Tgl_Jual2", "Jam", "c");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Total_Bayar", "Bayar", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Kembali", "Kembali", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Kartu", "C / D", "left");
|
||||
if ($tcari<>"") {
|
||||
$obj->set_field_order("Tgl_Jual", "D");
|
||||
$obj->set_limit(100);
|
||||
} else {
|
||||
$obj->set_field_order("Tgl_Jual2", "D");
|
||||
}
|
||||
$obj->add_row_btn("printer", "Cetak", "POSJS.nota_print");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "POSJS.nota_select");
|
||||
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "CabID", $id_cab);
|
||||
else $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "UserID", user_id());
|
||||
$obj->set_func_navi("POSJS.data_query('brow-nota')");
|
||||
$ajson[] = $obj->db_table("divBrowNota");
|
||||
|
||||
} else if ( $data == "brow-pending" ) {
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT J.*,J.Total_Jual-J.Total_Diskon Total,J.UserID FROM inv_jual_pend J WHERE J.CabID='".$id_cab."' AND J.UserID='".user_id()."'");
|
||||
$obj->add_field("No_Jual", "No. Nota", "c");
|
||||
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
|
||||
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
|
||||
$obj->add_field("Total", "Total", "r", "rupiah");
|
||||
$obj->set_field_order("No_Jual", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "POSJS.pending_select");
|
||||
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.pending_delete", "UserID", user_id());
|
||||
$obj->set_func_navi("POSJS.data_query('brow-pending')");
|
||||
$ajson[] = $obj->json_table("divBrowPending");
|
||||
|
||||
} else if ( $data == "pole-config") {
|
||||
$ajson['pole'] = []; $apole = [];
|
||||
$db->Query("SELECT * FROM disp_config WHERE REG_ID='".$_SESSION['__WEB_APP']['APP_CODE']."' LIMIT 1");
|
||||
if ($db->Next()) $apole = $db->AllRow();
|
||||
foreach ($apole as $_key => $_val) {
|
||||
if (strpos($_key, "POLE") !== false) {
|
||||
if (strpos($_key, "ENABLE") !== false) $_val = intval($_val);
|
||||
$ajson['pole'][str_replace("POLE_","",$_key)] = $_val;
|
||||
}
|
||||
}
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<div class="row flex-column-reverse flex-md-row">
|
||||
<div class="col-sm-12 col-md-9 col-lg-10 mt-3 mt-md-0">
|
||||
<div class="row mb-1">
|
||||
<div class="col-sm-9 col-lg-10">
|
||||
<input type="search" class="form-control fs-5" id="Nama_Produk" value="" placeholder="Scan SKU / Barcode / Ketik Nama Barang" autocomplete="off" />
|
||||
</div>
|
||||
<div class="col-sm-3 col-lg-2">
|
||||
<input type="double" class="form-control double fs-5" id="POS_Qty" value="1.00" maxlength="10" onblur="POSJS.onblur_Qty();" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="divPOS1"> </div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3 col-lg-2 border-start">
|
||||
<div id="divPOS2"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div></div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
Module : /apps/php/login.php
|
||||
Desc. : PHP - Halaman Proses Login
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : January 5th, 2008.
|
||||
Last Modified : April 29th, 2022.
|
||||
|
||||
(c) 2008 - 2019, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../vendor/autoload.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Auth;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$auth = new Auth($db);
|
||||
$ajson = [];
|
||||
$mode = Param::Get("mode");
|
||||
$aapp = $_SESSION['__WEB_APP'];
|
||||
|
||||
if ($mode == "login") {
|
||||
$auser = [];
|
||||
$auth->set_id_reg($aapp['PARENT_CODE']);
|
||||
if ($auth->user_check(Param::Get("Username"), Param::Get("Password"))) {
|
||||
$auser = $auth->user_data(Param::Get("Username"));
|
||||
|
||||
//MONITOR DISPLAY
|
||||
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
|
||||
$db->Query("DELETE FROM disp_login WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".$auser["UserID"]."'");
|
||||
$db->Query("INSERT INTO disp_login SET IP='".$_SERVER['REMOTE_ADDR']."',CabID='".$_SESSION['__APP_INV']['CABANGID']."',UserID='".$auser["UserID"]."',Unix='".$auser['UNIX']."',Date=NOW()");
|
||||
}
|
||||
|
||||
$_SESSION['__WEB_USER'] = $auser;
|
||||
|
||||
$_appurl = $_GET['redir'];
|
||||
if (!empty($_appurl)) {
|
||||
$_redir = $auth->redirect($_appurl);
|
||||
//jika kosong, tampilkan pesan redirect tidak diijinkan
|
||||
//jika berisi, js harus redirect ...
|
||||
}
|
||||
|
||||
$ajson['token'] = $_SESSION['APP_TOKEN'];
|
||||
$ajson['hasil'] = "SUKSES";
|
||||
$ajson['pesan'] = '<div class="border border-success p-2 pt-3"><h5>Login berhasil,</h5><p><b>'.$auser["Username"].'</b> / '.$auser["Nama"].'<br>'.$auser["Posisi"].'<br><i>login terakhir :</i><br>'.tgl_sql2str($auser["Last_Date"],true).'<br>'.$auser["Last_IP"].'</p></div>';
|
||||
} else {
|
||||
$ajson['hasil'] = "ERROR";
|
||||
$ajson['pesan'] = "Periksa kembali ID Pengguna atau Password Anda ...";
|
||||
}
|
||||
|
||||
} else if ($mode == "logout") {
|
||||
//MONITOR DISPLAY
|
||||
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
|
||||
$db->Query("DELETE FROM disp_login WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".$_SESSION['__WEB_USER']["ID"]."' AND IP='".$_SERVER['REMOTE_ADDR']."' AND Unix='".$_SESSION['__WEB_USER']['UNIX']."'");
|
||||
}
|
||||
|
||||
$auth->logout();
|
||||
foreach ($_SESSION as $_key => $_val) {
|
||||
if (substr($_key,0,5)=="__WEB") unset($_SESSION[$_key]);
|
||||
if (substr($_key,0,5)=="__APP") unset($_SESSION[$_key]);
|
||||
}
|
||||
require(__DIR__."/../cfg/app.php");
|
||||
|
||||
if ($_SERVER['SERVER_ADDR'] == "127.0.0.1") {
|
||||
$_host = $aapp['WEB_PATH']."../";
|
||||
} else {
|
||||
$_host = (isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : $aapp['PARENT_SITE']);
|
||||
$_host = str_replace(['http://','https://'], "", $_host);
|
||||
if ($aapp['PARENT_SUB'] == true) {
|
||||
$_subs = explode('.', $_host);
|
||||
if (count($_subs) > 2) array_shift($_subs);
|
||||
$_host = implode('.', $_subs);
|
||||
}
|
||||
$_host = "//" . $_host;
|
||||
}
|
||||
$ajson['nexthost'] = $_host;
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : Inventory Advanced Systems
|
||||
Module : /apps/php/pdf/po.php
|
||||
Desc. : PHP - Cetak PDF Purchase Order
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : January 19th, 2026.
|
||||
|
||||
(c) 2011 - 2026, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
|
||||
function pdf_po($db, $nota="", $mode="view") {
|
||||
if (trim($nota)=="") return;
|
||||
$baris_faktur = 8;
|
||||
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_PO,'%d-%m-%Y') Tgl_PO2,S.Kode_Sup,S.Nama_Sup,S.Alamat_Sup FROM (SELECT * FROM inv_po WHERE No_PO='".$nota."') B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)");
|
||||
if ($db->Next()) $ainfo = $db->AllRow();
|
||||
$ainfo['Alamat_Sup'] = str_replace("\n", "<br>", $ainfo['Alamat_Sup']);
|
||||
|
||||
$db->Query("SELECT D.*,P.Nama_Produk,P.Nama_Satuan FROM (SELECT InvID,SatuanID,Harga_Beli,SUM(Qty) Qty,SUM(Qty*Harga_Beli) Jumlah FROM inv_po_detail WHERE No_PO='".$nota."' AND Qty>0 GROUP BY InvID,SatuanID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID) ORDER BY P.Nama_Produk");
|
||||
|
||||
$html = '<table class="judul"><tbody><tr><td>PURCHASE ORDER</td><td class="r">'.$_SESSION['__WEB_APP']['REG_NAME'].'</td></tr></tbody></table><table><tbody><tr><td width="15%">Nomor PO</td><td>'.$ainfo['No_PO'].'</td></tr><tr><td>Tanggal PO</td><td>'.$ainfo['Tgl_PO2'].'</td></tr><tr><td>Supplier</td><td>'.$ainfo['Nama_Sup'].(($ainfo['Kode_Sup'])?" [".$ainfo['Kode_Sup']."]":"").'</td></tr><tr><td>Alamat</td><td>'.$ainfo['Alamat_Sup'].'</td></tr></tbody></table>';
|
||||
$footer = '<htmlpagefooter name="RepFoot%s"><table class="footer"><tr><td width="33%%">INVESA - Robinson</td><td width="34%%" class="c">%s</td><td width="33%%" class="r i">{DATE d-m-Y H:i} / Halaman : {PAGENO} dari {nbpg}</td></tr></table></htmlpagefooter>';
|
||||
$_setfoot = '<sethtmlpagefooter name="RepFoot%s" show-this-page="1" value="on" />';
|
||||
|
||||
$t_head = '<div><table autosize="1" class="garis"><thead><tr><th>No.</th><th>Nama Barang</th><th>Qty</th><th>Satuan</th></tr></thead><tbody>';
|
||||
$t_foot = '</tbody></table></div>';
|
||||
$_line = '<tr><td class="c">%s</td><td class="l">%s</td><td class="r">%s</td><td class="l">%s</td></tr>';
|
||||
|
||||
$html .= sprintf($footer, 10, "Purchase Order ".$ainfo['No_PO']);
|
||||
$html .= sprintf($_setfoot, 10);
|
||||
|
||||
$body .= $t_head; $nomor = 1;
|
||||
while ($db->Next()) {
|
||||
$body .= sprintf($_line, $nomor++, $db->Row("Nama_Produk"), rupiah30($db->Row("Qty")), $db->Row("Nama_Satuan"));
|
||||
}
|
||||
if ($nomor <= $baris_faktur) {
|
||||
$nomor--;
|
||||
for ($x=$baris_faktur; $x>fmod($nomor, $baris_faktur); $x--) {
|
||||
$body .= sprintf($_line, " ", " ", " ", " ");
|
||||
}
|
||||
}
|
||||
$body .= sprintf($t_foot);
|
||||
$body .= '<table class="akhir"><tr><td>Penerima,</td><td>Hormat Kami,</td></tr><tr><td><p> </p><p> </p><p> </p><p> </p>Tanda Tangan & Cap Perusahaan</td><td class="r"> </td></tr></table>';
|
||||
|
||||
$mpdf = new \Mpdf\Mpdf([
|
||||
'mode' => 'c',
|
||||
'format' => 'A4',
|
||||
'margin_left' => 8,
|
||||
'margin_right' => 8,
|
||||
'margin_top' => 8,
|
||||
'margin_header' => 5,
|
||||
'margin_footer' => 5
|
||||
]);
|
||||
$mpdf->SetDisplayMode('fullpage');
|
||||
$css = file_get_contents($_SESSION['__WEB_APP']['REAL_PATH'].'assets/css/pdf/po.css');
|
||||
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
|
||||
$mpdf->WriteHTML($html . $body, \Mpdf\HTMLParserMode::HTML_BODY);
|
||||
$mpdf->SetAuthor($_SESSION['__WEB_APP']['REG_NAME']);
|
||||
$mpdf->SetCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER']);
|
||||
$mpdf->setTitle("Purchase Order ".$ainfo['No_PO']);
|
||||
$mpdf->Output("Purchase Order ".$ainfo['No_PO'].".pdf", ($mode=="view" ? "I" : "D"));
|
||||
unset($mpdf);
|
||||
}
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$data = Param::Get("data");
|
||||
$mode = Param::Get("mode", "view");
|
||||
$nomor = Param::Get("Nomor_Cetak");
|
||||
|
||||
if ( $data == "pdf-po" ) {
|
||||
pdf_po($db, $nomor, $mode);
|
||||
|
||||
} else if ( $data == "default") {}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/promo/barang.php
|
||||
Desc. : PHP - Pengaturan Promo Penjualan Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 28th, 2014.
|
||||
Last Modified : December 9th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_promo = Param::Get("PromoID", 0);
|
||||
|
||||
if ( $data == "promo-detail" ) {
|
||||
$atabel = ['PromoID'=>0,'InvID'=>0,'SatuanID'=>0,'CabID'=>0,'Pilih_Qty'=>1,'Tipe_Promo'=>1,'Promo_InvID'=>0,'Promo_SatuanID'=>0,'Jumlah_Promo'=>0,'Tgl_Mulai'=>tgl_ymd(),'Tgl_Akhir'=>tgl_sql2str(tgl_operasi(tgl_dmy(),0,1,0)),'Aktif'=>1];
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("SELECT P.*,B.Nama_Produk FROM (SELECT * FROM inv_promo WHERE PromoID='".$id_promo."' LIMIT 1) P LEFT JOIN inv_produk B ON (B.InvID=P.InvID)");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
if ($atabel['Promo_InvID'] > 0) {
|
||||
$db->Query("SELECT Nama_Produk Promo_Produk FROM inv_produk WHERE InvID='".$atabel['Promo_InvID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tpromo = $form->textbox("_", "Nama_Promo", $atabel['Nama_Promo'], true, false, "text");
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0,"SEMUA CABANG"]);
|
||||
$ttipe = $form->radio("_", "Tipe_Promo", $atabel['Tipe_Promo'], true, false, ['1'=>"Promo Diskon",'2'=>"Promo Barang"], null, "PromoBarangJS.oc_PilihP();");
|
||||
$tsatpro = $form->option("_", "Promo_SatuanID", $atabel['Promo_SatuanID'], true, false, [$atabel['Promo_SatuanID']=>$atabel['Promo_SatuanID']]);
|
||||
$tqty = $form->textbox("_", "Promo_Qty", $atabel['Promo_Qty'], true, false, "double");
|
||||
$tproduk = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], false, false, "text");
|
||||
$tprodukpro = $form->textbox("_", "Promo_Produk", $atabel['Promo_Produk'], true, false, "text");
|
||||
$tsatuan = $form->option("_", "SatuanID", $atabel['SatuanID'], true, false, [$atabel['SatuanID']=>$atabel['SatuanID']]);
|
||||
$tpilqty = $form->radio("_", "Pilih_Qty", $atabel['Pilih_Qty'], true, false, ['1'=>"Minimum Qty",'2'=>"Kelipatan Qty"], null, "PromoBarangJS.oc_PilihQ();");
|
||||
$tqty_min = $form->textbox("_", "Qty_Min", $atabel['Qty_Min'], true, false, "double");
|
||||
$tqty_kali = $form->textbox("_", "Qty_Kali", $atabel['Qty_Kali'], true, false, "double");
|
||||
$tpdisk = $form->textbox("_", "Promo_Disc", $atabel['Promo_Disc'], true, false, "double");
|
||||
$tjpromo = $form->textbox("_", "Jumlah_Promo", $atabel['Jumlah_Promo'], true, false, "double");
|
||||
$ttglmulai = $form->datebox("_", "Tgl_Mulai", $atabel['Tgl_Mulai'], true, false);
|
||||
$ttglakhir = $form->datebox("_", "Tgl_Akhir", $atabel['Tgl_Akhir'], true, false);
|
||||
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, false, ['1'=>"Ya",'0'=>"Tidak"]);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Promo">Nama Promo</label>
|
||||
<div class="col">'.$tpromo.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Nama Barang</label>
|
||||
<div class="col"><div class="input-group">'.$tproduk.'<button id="butBrow1" class="btn btn-info" type="button" onclick="PromoBarangJS.produk_brow(1);"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="SatuanID">Satuan Barang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tsatuan.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Pilih_Qty">Berdasarkan Qty</label>
|
||||
<div class="col-sm-8 col-lg-4 col-form-label">'.$tpilqty.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Qty_Min">Jumlah Minimum</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tqty_min.Form_Info("Jumlah Penjualan Minimum untuk mendapatkan promo. Contoh : 1 PCS").'</div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Qty_Kali">Jumlah Kelipatan</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tqty_kali.Form_Info("Jumlah Kelipatan Penjualan untuk mendapatkan promo. Contoh : 5 PCS").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tipe_Promo">Pilihan Promo</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1 promo1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Disc">Nilai Diskon / Qty</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tpdisk.Form_Info("Nilai Diskon Satuan Barang berdasarkan kriteria. Contoh : Rp 500 / PCS").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1 promo2">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Produk">Barang Promo</label>
|
||||
<div class="col"><div class="input-group">'.$tprodukpro.'<button id="butBrow2" class="btn btn-info" type="button" onclick="PromoBarangJS.produk_brow(2);"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1 promo2">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_SatuanID">Satuan Promo</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tsatpro.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Qty">Qty Promo</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tqty.Form_Info("Jumlah Barang Promo yang diberikan sesuai kriteria. Contoh : 1 PCS").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Jumlah_Promo">Jumlah Promo</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tjpromo.Form_Info("Jumlah Item Barang Promo Diskon / Promo Barang yang diberikan, jika Promo Diskon dan berdasarkan Kelipatan Qty maka Jumlah Item adalah sesuai Kelipatan Qty yang diberikan. Contoh : 500 PCS").'</div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Mulai">Tanggal Mulai</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglmulai.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Aktif">Status Aktif ?</label>
|
||||
<div class="col-sm-8 col-lg-4 col-form-label">'.$taktif.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Akhir">Tanggal Akhir</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglakhir.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="PromoID" value="'.$atabel['PromoID'].'" >
|
||||
<input type="hidden" id="Promo_InvID" value="'.$atabel['Promo_InvID'].'" >
|
||||
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_promo");
|
||||
$sql->add_param("Nama_Promo");
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("Pilih_Qty");
|
||||
$sql->add_param("Qty_Min");
|
||||
$sql->add_param("Qty_Kali");
|
||||
$sql->add_param("Tipe_Promo");
|
||||
$sql->add_param("Promo_Disc");
|
||||
$sql->add_param("Promo_InvID");
|
||||
$sql->add_param("Promo_SatuanID");
|
||||
$sql->add_param("Promo_Qty");
|
||||
$sql->add_param("Jumlah_Promo");
|
||||
$sql->add_param_date("Tgl_Mulai");
|
||||
$sql->add_param_date("Tgl_Akhir");
|
||||
$sql->add_param("Aktif");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("PromoID");
|
||||
|
||||
if ($mode_detail=="insert") {
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail=="update") {
|
||||
$sql->UpdateDB();
|
||||
} else if ($mode_detail=="delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$tcari = trim(Param::Get("Cari_Promo"));
|
||||
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(B.Nama_Produk,P.Nama_Promo) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT P.*,B.Nama_Produk,S.Nama_Satuan,IF(P.CabID=0,'SEMUA CAB',C.Nama_Cab) Nama_Cab,(P.Jumlah_Promo-P.Jumlah_Proses) Jumlah_Sisa FROM (SELECT * FROM inv_promo WHERE Tipe_Promo IN (1,2)) P LEFT JOIN inv_produk B ON (B.InvID=P.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=P.SatuanID) LEFT JOIN para_cabang C ON (P.CabID=C.CabID)".$tsql);
|
||||
$obj->add_field("PromoID", "ID", "hid");
|
||||
$obj->add_field("Nama_Cab", "Cabang", "l");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "c");
|
||||
$obj->add_field("Jumlah_Promo", "Qty Promo", "r", "rupiah");
|
||||
$obj->add_field("Jumlah_Sisa", "Qty Sisa", "r", "rupiah");
|
||||
$obj->add_field("Tgl_Akhir", "Tgl. Akhir", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
|
||||
$obj->set_field_order("Nama_Cab", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "PromoBarangJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "PromoBarangJS.detail_hapus");
|
||||
$obj->set_func_navi("PromoBarangJS.data_query('detail')");
|
||||
$obj->set_func_btn("PromoBarangJS.detail_tambah", "+ Promo Barang");
|
||||
$ajson[] = $obj->json_table("divDetail");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari == "") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "PromoBarangJS.produk_select");
|
||||
$obj->set_func_navi("PromoBarangJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "detail_item" ) {
|
||||
$db->Query("SELECT P.SatuanID,S.Nama_Satuan FROM inv_produk_kemasan P LEFT JOIN para_satuan S ON (S.SatuanID=P.SatuanID) WHERE P.InvID='".Param::Get("InvID",0)."'");
|
||||
while ($db->Next()) {
|
||||
$ajson[] = ['value' => $db->Row("SatuanID"), 'label' => $db->Row("Nama_Satuan")];
|
||||
}
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-header custom-style">Daftar Promo Barang</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Promo" 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="divDetail"> </div></div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/promo/iklan.php
|
||||
Desc. : PHP - Pengaturan Promo Iklan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 28th, 2014.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_promo = Param::Get("PromoNotaID", 0);
|
||||
|
||||
if ( $data == "promo-detail" ) {
|
||||
$atabel = ['PromoNotaID'=>0,'Jual_Grup'=>"",'Jual_Min'=>0,'CabID'=>0,'Promo_Iklan'=>"",'Jumlah_Promo'=>0,'Tgl_Mulai'=>tgl_ymd(),'Tgl_Akhir'=>tgl_sql2str(tgl_operasi(tgl_dmy(),0,1,0)),'Aktif'=>1];
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("SELECT * FROM inv_promo_nota WHERE PromoNotaID='".$id_promo."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tpromo = $form->textbox("_", "Nama_Promo", $atabel['Nama_Promo'], true, false, "text");
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0,"SEMUA CABANG"]);
|
||||
$tj_grup = $form->textbox("_", "Jual_Grup", $atabel['Jual_Grup'], false, false, "text");
|
||||
$tj_min = $form->textbox("_", "Jual_Min", $atabel['Jual_Min'], true, false, "double");
|
||||
$tp_iklan = $form->textarea("_", "Promo_Iklan", $atabel['Promo_Iklan'], true, false, 2);
|
||||
$tjpromo = $form->textbox("_", "Jumlah_Promo", $atabel['Jumlah_Promo'], true, false, "double");
|
||||
$ttglmulai = $form->datebox("_", "Tgl_Mulai", $atabel['Tgl_Mulai'], true, false);
|
||||
$ttglakhir = $form->datebox("_", "Tgl_Akhir", $atabel['Tgl_Akhir'], true, false);
|
||||
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, false, ['1'=>"Ya",'0'=>"Tidak"]);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Promo">Nama Promo</label>
|
||||
<div class="col">'.$tpromo.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Grup Barang</label>
|
||||
<div class="col"><div class="input-group">'.$tj_grup.'<button id="butBrow1" class="btn btn-info" type="button" onclick="PromoIklanJS.grup_list();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Jual_Min">Minimal Penjualan</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tj_min.Form_Info("Jumlah Minimal Penjualan untuk mendapatkan promo. Contoh : Rp 100.000").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Iklan">Pesan Iklan</label>
|
||||
<div class="col col-form-label">'.$tp_iklan.'</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Jumlah_Promo">Jumlah Promo</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tjpromo.Form_Info("Jumlah Promo Iklan (per struk) yang diberikan. Contoh : 500 STRUK").'</div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Mulai">Tanggal Mulai</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglmulai.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Aktif">Status Aktif ?</label>
|
||||
<div class="col-sm-8 col-lg-4 col-form-label">'.$taktif.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Akhir">Tanggal Akhir</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglakhir.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="PromoNotaID" value="'.$atabel['PromoNotaID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_promo_nota");
|
||||
$sql->add_param("Nama_Promo");
|
||||
$sql->add_param("Jual_Min");
|
||||
$sql->add_param("Jual_Grup");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("Promo_Iklan");
|
||||
$sql->add_param("Jumlah_Promo");
|
||||
$sql->add_param_date("Tgl_Mulai");
|
||||
$sql->add_param_date("Tgl_Akhir");
|
||||
$sql->add_param("Aktif");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("PromoNotaID");
|
||||
|
||||
if ($mode_detail=="insert") {
|
||||
$sql->add_param("Tipe_Promo", 1);
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail=="update") {
|
||||
$sql->UpdateDB();
|
||||
} else if ($mode_detail=="delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$tcari = trim(Param::Get("Cari_Promo"));
|
||||
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(P.Nama_Promo) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT P.*,IF(P.CabID=0,'SEMUA CAB',C.Nama_Cab) Nama_Cab,(P.Jumlah_Promo-P.Jumlah_Proses) Jumlah_Sisa FROM (SELECT * FROM inv_promo_nota WHERE Tipe_Promo IN (1)) P LEFT JOIN para_cabang C ON (P.CabID=C.CabID)".$tsql);
|
||||
$obj->add_field("PromoNotaID", "ID", "hid");
|
||||
$obj->add_field("Nama_Cab", "Cabang", "l");
|
||||
$obj->add_field("Nama_Promo", "Nama Promo", "awr");
|
||||
$obj->add_field("Jual_Min", "Minimum", "r", "rupiah");
|
||||
$obj->add_field("Jumlah_Promo", "Qty Promo", "r", "rupiah");
|
||||
$obj->add_field("Jumlah_Sisa", "Qty Sisa", "r", "rupiah");
|
||||
$obj->add_field("Tgl_Akhir", "Tgl. Akhir", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
|
||||
$obj->set_field_order("Nama_Cab", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "PromoIklanJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "PromoIklanJS.detail_hapus");
|
||||
$obj->set_func_navi("PromoIklanJS.data_query('detail')");
|
||||
$obj->set_func_btn("PromoIklanJS.detail_tambah", "+ Promo Iklan");
|
||||
$ajson[] = $obj->json_table("divDetail");
|
||||
|
||||
} else if ( $data == "grup-list" ) {
|
||||
$agrup = explode(",", Param::Get("Jual_Grup","0"));
|
||||
$ajson['html'] = '<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline" id="tabGrupList"><thead><tr><th class="l">Nama Grup Barang</th><th class="c">Aksi</th></tr></thead><tbody>';
|
||||
|
||||
$db->Query("SELECT * FROM inv_produk_grup ORDER BY Nama_Grup");
|
||||
while ($db->Next()) {
|
||||
$kode = "xGRUP_".$db->Row("Grup_InvID");
|
||||
$checked = (in_array($db->Row("Grup_InvID"), $agrup)) ? "checked" : "";
|
||||
$ajson['html'] .= sprintf('<tr><td class="l">%s</td><td class="c"><input class="form-check-input" type="checkbox" id="%s" value="%s" %s/></td></tr>', $db->Row("Nama_Grup"), $kode, $db->Row("Grup_InvID"), $checked);
|
||||
}
|
||||
$ajson['html'] .= '</tbody></table>';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-header custom-style">Daftar Promo Iklan</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Promo" 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="divDetail"> </div></div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/promo/total.php
|
||||
Desc. : PHP - Pengaturan Promo Total Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 28th, 2014.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\DB\SQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_promo = Param::Get("PromoID", 0);
|
||||
|
||||
if ( $data == "promo-detail" ) {
|
||||
$atabel = ['PromoID'=>0,'Jual_Grup'=>"",'Jual_Min'=>0,'CabID'=>0,'Tipe_Promo'=>4,'Promo_InvID'=>0,'Promo_SatuanID'=>0,'Jumlah_Promo'=>0,'Tgl_Mulai'=>tgl_ymd(),'Tgl_Akhir'=>tgl_sql2str(tgl_operasi(tgl_dmy(),0,1,0)),'Aktif'=>1];
|
||||
if ($id_promo > 0) {
|
||||
$db->Query("SELECT * FROM inv_promo WHERE PromoID='".$id_promo."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
if ($atabel['Promo_InvID'] > 0) {
|
||||
$db->Query("SELECT Nama_Produk Promo_Produk FROM inv_produk WHERE InvID='".$atabel['Promo_InvID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
}
|
||||
}
|
||||
|
||||
$form = new Form($db);
|
||||
$tpromo = $form->textbox("_", "Nama_Promo", $atabel['Nama_Promo'], true, false, "text");
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0,"SEMUA CABANG"]);
|
||||
$ttipe = $form->radio("_", "Tipe_Promo", $atabel['Tipe_Promo'], true, false, ['4'=>"Promo Potongan",'3'=>"Promo Barang"], null, "PromoTotalJS.oc_PilihP();");
|
||||
$tsatpro = $form->option("_", "Promo_SatuanID", $atabel['Promo_SatuanID'], true, false, [$atabel['Promo_SatuanID']=>$atabel['Promo_SatuanID']]);
|
||||
$tqty = $form->textbox("_", "Promo_Qty", $atabel['Promo_Qty'], true, false, "double");
|
||||
$tprodukpro = $form->textbox("_", "Promo_Produk", $atabel['Promo_Produk'], true, false, "text");
|
||||
$tj_grup = $form->textbox("_", "Jual_Grup", $atabel['Jual_Grup'], false, false, "text");
|
||||
$tj_min = $form->textbox("_", "Jual_Min", $atabel['Jual_Min'], true, false, "double");
|
||||
$tpjual = $form->textbox("_", "Promo_Jual", $atabel['Promo_Jual'], true, false, "double");
|
||||
$tjpromo = $form->textbox("_", "Jumlah_Promo", $atabel['Jumlah_Promo'], true, false, "double");
|
||||
$ttglmulai = $form->datebox("_", "Tgl_Mulai", $atabel['Tgl_Mulai'], true, false);
|
||||
$ttglakhir = $form->datebox("_", "Tgl_Akhir", $atabel['Tgl_Akhir'], true, false);
|
||||
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, false, ['1'=>"Ya",'0'=>"Tidak"]);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Promo">Nama Promo</label>
|
||||
<div class="col">'.$tpromo.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Grup Barang</label>
|
||||
<div class="col"><div class="input-group">'.$tj_grup.'<button id="butBrow1" class="btn btn-info" type="button" onclick="PromoTotalJS.grup_list();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Jual_Min">Minimal Penjualan</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tj_min.Form_Info("Jumlah Minimal Penjualan untuk mendapatkan promo. Contoh : Rp 100.000").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tipe_Promo">Pilihan Promo</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1 promo1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Jual">Nilai Potongan</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tpjual.Form_Info("Nilai Potongan Promo yang diberikan, jika Minimal Penjualan tercapai. Contoh : Rp 10.000").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1 promo2">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Produk">Barang Promo</label>
|
||||
<div class="col"><div class="input-group">'.$tprodukpro.'<button id="butBrow2" class="btn btn-info" type="button" onclick="PromoTotalJS.produk_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1 promo2">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_SatuanID">Satuan Promo</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tsatpro.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Promo_Qty">Qty Promo</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tqty.Form_Info("Jumlah Barang Promo yang diberikan sesuai kriteria. Contoh : 1 PCS").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Jumlah_Promo">Jumlah Promo</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tjpromo.Form_Info("Jumlah Item Promo Barang yang diberikan. Contoh : 500 PCS").'</div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Mulai">Tanggal Mulai</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglmulai.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Aktif">Status Aktif ?</label>
|
||||
<div class="col-sm-8 col-lg-4 col-form-label">'.$taktif.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Akhir">Tanggal Akhir</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglakhir.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="PromoID" value="'.$atabel['PromoID'].'" >
|
||||
<input type="hidden" id="Promo_InvID" value="'.$atabel['Promo_InvID'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} else if ( $data == "detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_promo");
|
||||
$sql->add_param("Nama_Promo");
|
||||
$sql->add_param("Jual_Min");
|
||||
$sql->add_param("Jual_Grup");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("Tipe_Promo");
|
||||
$sql->add_param("Promo_Jual");
|
||||
$sql->add_param("Promo_InvID");
|
||||
$sql->add_param("Promo_SatuanID");
|
||||
$sql->add_param("Promo_Qty");
|
||||
$sql->add_param("Jumlah_Promo");
|
||||
$sql->add_param_date("Tgl_Mulai");
|
||||
$sql->add_param_date("Tgl_Akhir");
|
||||
$sql->add_param("Aktif");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("PromoID");
|
||||
|
||||
if ($mode_detail=="insert") {
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail=="update") {
|
||||
$sql->UpdateDB();
|
||||
} else if ($mode_detail=="delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$tcari = trim(Param::Get("Cari_Promo"));
|
||||
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(P.Nama_Promo) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT P.*,IF(P.CabID=0,'SEMUA CAB',C.Nama_Cab) Nama_Cab,(P.Jumlah_Promo-P.Jumlah_Proses) Jumlah_Sisa FROM (SELECT * FROM inv_promo WHERE Tipe_Promo IN (3,4)) P LEFT JOIN para_cabang C ON (P.CabID=C.CabID)".$tsql);
|
||||
$obj->add_field("PromoID", "ID", "hid");
|
||||
$obj->add_field("Nama_Cab", "Cabang", "l");
|
||||
$obj->add_field("Nama_Promo", "Nama Promo", "awr");
|
||||
$obj->add_field("Jual_Min", "Minimum", "r", "rupiah");
|
||||
$obj->add_field("Jumlah_Promo", "Qty Promo", "r", "rupiah");
|
||||
$obj->add_field("Jumlah_Sisa", "Qty Sisa", "r", "rupiah");
|
||||
$obj->add_field("Tgl_Akhir", "Tgl. Akhir", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
|
||||
$obj->set_field_order("Nama_Cab", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "PromoTotalJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "PromoTotalJS.detail_hapus");
|
||||
$obj->set_func_navi("PromoTotalJS.data_query('detail')");
|
||||
$obj->set_func_btn("PromoTotalJS.detail_tambah", "+ Promo Total");
|
||||
$ajson[] = $obj->json_table("divDetail");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari == "") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "PromoTotalJS.produk_select");
|
||||
$obj->set_func_navi("PromoTotalJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "detail_item" ) {
|
||||
$db->Query("SELECT P.SatuanID,S.Nama_Satuan FROM inv_produk_kemasan P LEFT JOIN para_satuan S ON (S.SatuanID=P.SatuanID) WHERE P.InvID='".Param::Get("InvID",0)."'");
|
||||
while ($db->Next()) {
|
||||
$ajson[] = ['value' => $db->Row("SatuanID"), 'label' => $db->Row("Nama_Satuan")];
|
||||
}
|
||||
|
||||
} else if ( $data == "grup-list" ) {
|
||||
$agrup = explode(",", Param::Get("Jual_Grup","0"));
|
||||
$ajson['html'] = '<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline" id="tabGrupList"><thead><tr><th class="l">Nama Grup Barang</th><th class="c">Aksi</th></tr></thead><tbody>';
|
||||
|
||||
$db->Query("SELECT * FROM inv_produk_grup ORDER BY Nama_Grup");
|
||||
while ($db->Next()) {
|
||||
$kode = "xGRUP_".$db->Row("Grup_InvID");
|
||||
$checked = (in_array($db->Row("Grup_InvID"), $agrup)) ? "checked" : "";
|
||||
$ajson['html'] .= sprintf('<tr><td class="l">%s</td><td class="c"><input class="form-check-input" type="checkbox" id="%s" value="%s" %s/></td></tr>', $db->Row("Nama_Grup"), $kode, $db->Row("Grup_InvID"), $checked);
|
||||
}
|
||||
$ajson['html'] .= '</tbody></table>';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-header custom-style">Daftar Promo Total Penjualan</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Promo" 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="divDetail"> </div></div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/barcode.php
|
||||
Desc. : PHP - Cetak Barcode Label
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 28th, 2013.
|
||||
Last Modified : October 2nd, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
function gen_bc_ppla($lbarc="", $lnama="", $lharga="", $lkdsup="") {
|
||||
$lbc1 = substr($lbarc, 0, 4);
|
||||
$lbc2 = substr($lbarc, 4, 4);
|
||||
return [
|
||||
chr(2).'K1503', // gap 3mm
|
||||
chr(2).'e', // gap sensor edge
|
||||
chr(2).'f326', // feed 1" = 320 & auto backfeed
|
||||
chr(2).'L',
|
||||
'D11',
|
||||
'191100200020027'.$lharga,
|
||||
'1d5202800130027'.$lbarc,
|
||||
'121100100460027'.$lnama,
|
||||
'291100200410100'.$lbc2,
|
||||
'291100200410110'.$lbc1,
|
||||
'291100100410127'.$lkdsup,
|
||||
'421100100050022'.$_SESSION['__WEB_APP']['REG_NAME'],
|
||||
'191100200020165'.$lharga,
|
||||
'1d5202800130165'.$lbarc,
|
||||
'121100100460165'.$lnama,
|
||||
'291100200410238'.$lbc2,
|
||||
'291100200410248'.$lbc1,
|
||||
'291100100410265'.$lkdsup,
|
||||
'421100100050160'.$_SESSION['__WEB_APP']['REG_NAME'],
|
||||
'191100200020302'.$lharga,
|
||||
'1d5202800130302'.$lbarc,
|
||||
'121100100460302'.$lnama,
|
||||
'291100200410375'.$lbc2,
|
||||
'291100200410385'.$lbc1,
|
||||
'291100100410402'.$lkdsup,
|
||||
'421100100050297'.$_SESSION['__WEB_APP']['REG_NAME'],
|
||||
'E'];
|
||||
}
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_inv = Param::Get("InvID");
|
||||
$id_sat = Param::Get("SatuanID");
|
||||
|
||||
if ( $data == "print-barcode" ) {
|
||||
$qty = Param::Get("Qty", 3);
|
||||
$ksup = Param::Get("Kode_Sup", "");
|
||||
$nbaris = ceil($qty / 3);
|
||||
|
||||
$db->Query("SELECT P.*,LEFT(P.Nama_Lengkap,20) Nama2 FROM vi_inv_produk P WHERE P.InvID='".$id_inv."' AND P.SatuanID='".$id_sat."' ORDER BY P.Harga_Jual DESC LIMIT 1");
|
||||
if ($db->Next()) {
|
||||
$ajson = ['type' => "epl", 'config' => ['times' => $nbaris], 'content' => gen_bc_ppla($db->Row("Kode_SKU"), $db->Row("Nama2"), "Rp.".rupiah($db->Row("Harga_Jual")), $ksup)];
|
||||
}
|
||||
|
||||
} else if ($data == "auto-produk") {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec= [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,':',K.SatuanID) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
// Cari by Barcode
|
||||
if ($bcode == 0) {
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,':',K.SatuanID) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
|
||||
if ($db->Next()) {
|
||||
$bcode = 1;
|
||||
$arec = $db->AllRow();
|
||||
}
|
||||
}
|
||||
if ($bcode == 1) {
|
||||
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
|
||||
} else {
|
||||
$db->Query("SELECT P.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.Kode_SKU,':',K.SatuanID) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")), 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("SatuanID", "Satuan", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "RepoBarcodeJS.produk_select");
|
||||
$obj->set_func_navi("RepoBarcodeJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "opt-sup" ) {
|
||||
$avalue = [['value'=>"", 'html'=>"Tanpa Kode"]];
|
||||
$db->Query("SELECT Kode_Sup,Nama_Sup FROM para_supplier WHERE SupID IN (SELECT SupID FROM inv_produk_sup WHERE InvID='".$id_inv."') ORDER BY Aktif DESC,Nama_Sup");
|
||||
while ($db->Next()) {
|
||||
$avalue[] = ['value'=>$db->Row("Kode_Sup"), 'html'=>$db->Row("Nama_Sup")];
|
||||
}
|
||||
$ajson[] = ['type'=>"option", 'id'=>"Kode_Sup", 'avalue'=>$avalue];
|
||||
|
||||
} else if ( $data == "load-printer" ) {
|
||||
$aprint = explode("|", Param::Get("Printer")); $avalue = [['value'=>"", 'html'=>"Pilih Printer"]];
|
||||
$tdefp = Param::Get("DefPrint", "");
|
||||
$db->Query("DELETE FROM app_printer WHERE IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."'");
|
||||
foreach ($aprint as $_key => $_val) {
|
||||
if ($_val<>"") {
|
||||
$_def = ($tdefp==$_val) ? 1 : 0;
|
||||
$db->Query("INSERT IGNORE INTO app_printer SET IP='".$_SERVER['REMOTE_ADDR']."',CabID='".$_SESSION['__APP_INV']['CABANGID']."',N_Printer='".$_val."',Defa=".$_def);
|
||||
}
|
||||
}
|
||||
$db->Query("SELECT * FROM app_printer WHERE IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."'");
|
||||
while ($db->Next()) {
|
||||
$avalue[] = ['value'=>$db->Row("N_Printer"), 'html'=>$db->Row("N_Printer")];
|
||||
}
|
||||
$ajson[] = ['type'=>"option", 'id'=>"Printer", 'avalue'=>$avalue];
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$tsku = $form->textbox("_", "Kode_SKU", null, false, false);
|
||||
$tbrg = $form->textauto("_", "Nama_Produk", null, true, true, "Nama Barang");
|
||||
$tsup = $form->option("_", "Kode_Sup", "", true, false, [0=>"Tanpa Kode"]);
|
||||
$tprt = $form->option_db("_", "Printer", "", true, false, "app_printer", ["N_Printer","N_Printer"], "IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."'", [0,"Pilih Printer"]);
|
||||
$tqty = $form->textbox("_", "Qty", 3, true, false, "number");
|
||||
|
||||
echo '
|
||||
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label">Kode SKU</label><div class="col-sm-8 col-lg-5">'.$tsku.'</div></div>
|
||||
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label><div class="col"><div class="input-group">'.$tbrg.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
|
||||
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Kode_Sup">Kode Supplier</label><div class="col-sm-8 col-lg-5">'.$tsup.'</div></div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-2"></div></div>
|
||||
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Printer">Nama Printer</label><div class="col"><div class="input-group">'.$tprt.'<button class="btn btn-secondary shadow-none" type="button" id="butPL"><i class="bi-arrow-repeat"></i></button></div></div></div>
|
||||
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Qty">Jumlah Stiker</label><div class="col-sm-5 col-lg-3"><div class="input-group">'.$tqty.Form_Info("Untuk menghemat stiker, bisa gunakan jumlah cetak dalam kelipatan 3.").'</div></div></div>
|
||||
<input type="hidden" id="InvID" value="0" /><input type="hidden" id="SatuanID" value="0" />';
|
||||
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/beli.php
|
||||
Desc. : PHP - Laporan Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : October 10th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$id_grup = Param::Get("Grup_InvID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
$nama_sup = ""; $nama_grup = "";
|
||||
if ($id_sup > 0) {
|
||||
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
if ($id_grup > 0) {
|
||||
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_grup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_sup."'";
|
||||
//id_grup ?
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT S.Nama_Sup,SUM(B.Total_Hutang+B.Total_Diskon+B.Total_Bulat) Total_Beli,SUM(B.Total_Diskon+B.Total_Bulat) Total_Diskon,SUM(B.Total_Hutang) Total FROM (SELECT * FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) GROUP BY B.SupID ORDER BY S.Nama_Sup");
|
||||
} else {
|
||||
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,S.Nama_Sup,B.Total_Beli-B.Total_Diskon Total FROM (SELECT * FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PEMBELIAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Supplier",50,"L");
|
||||
$pre->add_field("Sub. Total",20,"R","rupiah");
|
||||
$pre->add_field("Diskon",20,"R","rupiah");
|
||||
$pre->add_field("Total",20,"R","rupiah");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
|
||||
|
||||
$tot_beli = 0; $tot_diskon = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
//if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_beli += $db->Row("Total_Beli");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_beli,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_beli-$tot_diskon,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. Nota",30,"C");
|
||||
$pre->add_field("Tgl. Nota",30,"C", "tgl_sql2str");
|
||||
$pre->add_field("No. Faktur",30,"L");
|
||||
$pre->add_field("Nama Supplier",50,"L");
|
||||
$pre->add_field("Sub. Total",20,"R","rupiah");
|
||||
$pre->add_field("Diskon",20,"R","rupiah");
|
||||
$pre->add_field("Total",30,"R","rupiah");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,7,"L,B"));
|
||||
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,7,"L,B"));
|
||||
|
||||
$tot_beli = 0; $tot_diskon = 0;
|
||||
while ($db->Next()) {
|
||||
//if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_beli += $db->Row("Total_Beli");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("No_Faktur"), $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_beli,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_beli-$tot_diskon,1,"R,B","rupiah"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Pembelian",
|
||||
'desc'=>"Export Data Pembelian"
|
||||
]);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Supplier", 25, "L");
|
||||
$xls->add_field("Sub. Total", 15, "R,N");
|
||||
$xls->add_field("Diskon", 15, "R,N");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
|
||||
|
||||
$tot_beli = 0; $tot_diskon = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_beli += $db->Row("Total_Beli");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_beli,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_beli-$tot_diskon,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA DETAIL PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No. Nota", 15, "C");
|
||||
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("No. Faktur", 15, "L");
|
||||
$xls->add_field("Nama Supplier", 20, "L");
|
||||
$xls->add_field("Sub. Total", 15, "R,N");
|
||||
$xls->add_field("Diskon", 15, "R,N");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,7,"L,B"));
|
||||
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,7,"L,B"));
|
||||
|
||||
$tot_beli = 0; $tot_diskon = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_beli += $db->Row("Total_Beli");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$xls->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("No_Faktur"), $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_beli,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_beli-$tot_diskon,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
|
||||
<div class="col">'.$tgrup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/beli_analisa.php
|
||||
Desc. : PHP - Laporan Analisa Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : August 4th, 2013.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "V"); // V or R
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$id_grup = Param::Get("Grup_InvID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
$jum_hari = tgl_range_hari($tglfrom, $tglto, true);
|
||||
|
||||
$nama_sup = ""; $nama_grup = "";
|
||||
if ($id_sup > 0) {
|
||||
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
if ($id_grup > 0) {
|
||||
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_grup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql1 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$tsql1 .= ($id_sup==0) ? "" : " AND No_Ref IN (SELECT No_Beli FROM inv_beli WHERE SupID='".$id_cab."' AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."'))";
|
||||
$tsql2 = ($id_grup==0) ? "" : " WHERE P.Grup_InvID='".$id_grup."'";
|
||||
|
||||
if ($tipe=="V") {
|
||||
$db->Query("SELECT P.*,D.Volume FROM (SELECT InvID,SUM(Stok) Volume FROM inv_detail WHERE Stok>0 AND NotaID IN (3,4) AND (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql1." GROUP BY InvID) D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tsql2." ORDER BY P.Nama_Produk");
|
||||
} else if ($tipe=="R") {
|
||||
$db->Query("SELECT P.*,D.Rupiah FROM (SELECT InvID,SUM(Qty*Harga_Beli) Rupiah FROM inv_detail WHERE Stok>0 AND NotaID IN (3,4) AND (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql1." GROUP BY InvID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID)".$tsql2." ORDER BY P.Nama_Produk");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header("REKAP ".($tipe=="V"?"VOLUME":"RUPIAH")." PEMBELIAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="V") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Barang",50,"L");
|
||||
$pre->add_field("Jumlah",20,"R");
|
||||
$pre->add_field("Mingguan",20,"R");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
|
||||
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
|
||||
|
||||
$nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$total = $db->Row("Volume",0);
|
||||
$mg_total = $total / ($jum_hari/7);
|
||||
$kali = $db->Row("Qty",0);
|
||||
if ($kali > 0) {
|
||||
$norm = floor($total / $kali);
|
||||
$sisa = $total - ($norm * $kali);
|
||||
$mg_norm = floor($mg_total / $kali);
|
||||
$mg_sisa = $mg_total - ($mg_norm * $kali);
|
||||
} else {
|
||||
$norm = 0;
|
||||
$sisa = $total;
|
||||
$mg_norm = 0;
|
||||
$mg_sisa = $mg_total;
|
||||
}
|
||||
$stok = rupiah($norm,0)." ".$db->Row("Satuan_Normal");
|
||||
$mg_stok = rupiah($mg_norm,0)." ".$db->Row("Satuan_Normal");
|
||||
if ($db->Row("Satuan_Normal")<>$db->Row("Satuan_Stok")) {
|
||||
$stok .= ", ".rupiah($sisa,0)." ".$db->Row("Satuan_Stok");
|
||||
$mg_stok .= ", ".rupiah($mg_sisa,0)." ".$db->Row("Satuan_Stok");
|
||||
}
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok);
|
||||
}
|
||||
|
||||
} else {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Barang",50,"L");
|
||||
$pre->add_field("Jumlah",20,"R","rupiah");
|
||||
$pre->add_field("Mingguan",20,"R","rupiah");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
|
||||
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
|
||||
|
||||
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
|
||||
while ($db->Next()) {
|
||||
$mg_avg = ($db->Row("Rupiah",0)>0) ? $db->Row("Rupiah",0) / ($jum_hari/7) : 0;
|
||||
$tot_rup += $db->Row("Rupiah");
|
||||
$tot_mg += $mg_avg;
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Rupiah"), $mg_avg);
|
||||
}
|
||||
$pre->add_span(array("TOTAL",2,"R,B"),array(rupiah($tot_rup),1,"R,B"),array(rupiah($tot_mg),1,"R,B"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Analisa Pembelian",
|
||||
'desc'=>"Export Data Analisa Pembelian"
|
||||
]);
|
||||
|
||||
if ($tipe=="V") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP VOLUME PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Barang", 25, "L");
|
||||
$xls->add_field("Jumlah", 15, "R");
|
||||
$xls->add_field("Mingguan", 15, "R");
|
||||
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
|
||||
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
|
||||
|
||||
$nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$total = $db->Row("Volume",0);
|
||||
$mg_total = $total / ($jum_hari/7);
|
||||
$kali = $db->Row("Qty",0);
|
||||
if ($kali > 0) {
|
||||
$norm = floor($total / $kali);
|
||||
$sisa = $total - ($norm * $kali);
|
||||
$mg_norm = floor($mg_total / $kali);
|
||||
$mg_sisa = $mg_total - ($mg_norm * $kali);
|
||||
} else {
|
||||
$norm = 0;
|
||||
$sisa = $total;
|
||||
$mg_norm = 0;
|
||||
$mg_sisa = $mg_total;
|
||||
}
|
||||
$stok = rupiah($norm,0)." ".$db->Row("Satuan_Normal");
|
||||
$mg_stok = rupiah($mg_norm,0)." ".$db->Row("Satuan_Normal");
|
||||
if ($db->Row("Satuan_Normal")<>$db->Row("Satuan_Stok")) {
|
||||
$stok .= ", ".rupiah($sisa,0)." ".$db->Row("Satuan_Stok");
|
||||
$mg_stok .= ", ".rupiah($mg_sisa,0)." ".$db->Row("Satuan_Stok");
|
||||
}
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok);
|
||||
}
|
||||
|
||||
} else {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP RUPIAH PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Barang", 25, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_field("Mingguan", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
|
||||
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
|
||||
|
||||
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
|
||||
while ($db->Next()) {
|
||||
$mg_avg = ($db->Row("Rupiah",0)>0) ? $db->Row("Rupiah",0) / ($jum_hari/7) : 0;
|
||||
$tot_rup += $db->Row("Rupiah");
|
||||
$tot_mg += $mg_avg;
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Rupiah"), $mg_avg);
|
||||
}
|
||||
$xls->add_span(array("TOTAL",2,"R,B"),array($tot_rup,1,"R,B,N"),array($tot_mg,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Analisa Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "V", true, false, ["V"=>"Volume","R"=>"Rupiah"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
|
||||
<div class="col">'.$tgrup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/beli_mutasi.php
|
||||
Desc. : PHP - Laporan Mutasi Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 3rd, 2013.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
$nama_sup = "";
|
||||
if ($id_sup > 0) {
|
||||
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_cab."'";
|
||||
|
||||
$n_saldo = 0;
|
||||
$db->Query("SELECT SUM(Total_Hutang) Total FROM inv_beli WHERE Data_Beli=1 AND Tgl_Beli<'".$tglfrom."'".$tsql);
|
||||
if ($db->Next()) $n_saldo = $db->RowFloat("Total", 0);
|
||||
$db->Query("SELECT SUM(Total_Bayar+Total_Potong) Bayar FROM inv_beli_lunas WHERE No_Beli IN (SELECT No_Beli FROM inv_beli WHERE Data_Beli=1".$tsql.") AND Tgl_Bayar<'".$tglfrom."'");
|
||||
if ($db->Next()) $b_saldo -= $db->RowFloat("Bayar", 0);
|
||||
|
||||
$db->Query("(SELECT Tgl_Beli,SUM(Total_Hutang) Total,0 Bayar FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Beli) UNION ALL (SELECT Tgl_Bayar Tgl_Beli,0 Total,SUM(Total_Bayar+Total_Potong) Bayar FROM inv_beli_lunas WHERE No_Beli IN (SELECT No_Beli FROM inv_beli WHERE Data_Beli=1".$tsql.") AND (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."') GROUP BY Tgl_Bayar) ORDER BY Tgl_Beli,Total DESC");
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header("MUTASI PEMBELIAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
$pre->add_field("Tanggal",10,"C","tgl_sql2str");
|
||||
$pre->add_field("Nota / Bon",20,"R","rupiah");
|
||||
$pre->add_field("Bayar",20,"R","rupiah");
|
||||
$pre->add_field("Sisa",20,"R","rupiah");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
|
||||
|
||||
$tot_sub = 0; $tot_bayar = 0;
|
||||
$pre->add_span(["SALDO AWAL",1,"R,B"],["",1,"L"],["",1,"L"],[$n_saldo,1,"R,B","rupiah"]);
|
||||
while ($db->Next()) {
|
||||
$tot_sub += $db->Row("Total");
|
||||
$tot_bayar += $db->Row("Bayar");
|
||||
$n_saldo += $db->Row("Total") - $db->Row("Bayar");
|
||||
$pre->add_value($db->Row("Tgl_Beli"), $db->Row("Total"), $db->Row("Bayar"), $n_saldo);
|
||||
}
|
||||
$pre->add_span(["SALDO AKHIR",1,"R,B"],[$tot_sub,1,"R,B","rupiah"],[$tot_bayar,1,"R,B","rupiah"],[$n_saldo,1,"R,B","rupiah"]);
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Mutasi Pembelian",
|
||||
'desc'=>"Export Data Mutasi Pembelian"
|
||||
]);
|
||||
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA MUTASI PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("Tanggal", 10, "C");
|
||||
$xls->add_field("Nota / Bon", 15, "R,N");
|
||||
$xls->add_field("Bayar", 15, "R,N");
|
||||
$xls->add_field("Sisa", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
|
||||
|
||||
$tot_sub = 0; $tot_bayar = 0;
|
||||
$xls->add_span(["SALDO AWAL",1,"R,B"],["",1,"L"],["",1,"L"],[$n_saldo,1,"R,B","rupiah"]);
|
||||
while ($db->Next()) {
|
||||
$tot_sub += $db->Row("Total");
|
||||
$tot_bayar += $db->Row("Bayar");
|
||||
$n_saldo += $db->Row("Total") - $db->Row("Bayar");
|
||||
$xls->add_value($db->Row("Tgl_Beli"), $db->Row("Total"), $db->Row("Bayar"), $n_saldo);
|
||||
}
|
||||
$xls->add_span(["SALDO AKHIR",1,"R,B"],[$tot_sub,1,"R,B","rupiah"],[$tot_bayar,1,"R,B","rupiah"],[$n_saldo,1,"R,B","rupiah"]);
|
||||
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Mutasi Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/beli_retur.php
|
||||
Desc. : PHP - Laporan Retur Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
$nama_sup = "";
|
||||
if ($id_sup > 0) {
|
||||
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_cab."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT B.*,S.Nama_Sup FROM (SELECT SupID,SUM(-Total_Hutang) Total_Retur FROM inv_beli WHERE Data_Beli=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY SupID) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY S.Nama_Sup");
|
||||
} else {
|
||||
$db->Query("SELECT B.*,S.Nama_Sup,-B.Total_Hutang Retur FROM (SELECT * FROM inv_beli WHERE Data_Beli=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." RETUR PEMBELIAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Supplier",50,"L");
|
||||
$pre->add_field("Total",20,"R","rupiah");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,3,"L,B"));
|
||||
|
||||
$tot_retur = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_retur += $db->Row("Total_Retur");
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Retur"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_retur,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. Nota",30,"C");
|
||||
$pre->add_field("Tgl. Nota",30,"C", "tgl_sql2str");
|
||||
$pre->add_field("Nama Supplier",50,"L");
|
||||
$pre->add_field("Total",30,"R","rupiah");
|
||||
$pre->add_field("Catatan",50,"L");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
|
||||
$tot_retur = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_retur += $db->Row("Retur");
|
||||
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Retur"), $db->Row("No_Faktur"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_retur,1,"R,B","rupiah"),[" ",1,"L"]);
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Retur Pembelian",
|
||||
'desc'=>"Export Data Retur Pembelian"
|
||||
]);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP RETUR PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Supplier", 25, "L");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,3,"L,B"));
|
||||
|
||||
$tot_retur = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_retur += $db->Row("Total_Retur");
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Retur"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_retur,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA DETAIL RETUR PEMBELIAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No. Nota", 15, "C");
|
||||
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Nama Supplier", 20, "L");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_field("Catatan", 25, "L");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
|
||||
$tot_retur = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_retur += $db->Row("Retur");
|
||||
$xls->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Retur"), $db->Row("No_Faktur"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_retur,1,"R,B,N"),[" ",1,"L"]);
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Retur Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/dana_pos.php
|
||||
Desc. : PHP - Laporan Penerimaan Kasir / POS
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 2nd, 2014.
|
||||
Last Modified : September 30th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","print-pos","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$id_kasir = Param::Get("KasirID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$tsql .= ($id_kasir==0) ? "" : " AND UserID='".$id_kasir."'";
|
||||
|
||||
if ($data=="print-pos") {
|
||||
$tsql = " AND UserID='".$id_kasir."'";
|
||||
$tsql .= ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$db->Query("SELECT O.Username,O.Nama Nama_User FROM app_operator O WHERE O.UserID='".$id_kasir."'");
|
||||
if ($db->Next()) $ainfo = $db->AllRow();
|
||||
$db->Query("SELECT J.KartuID,IF(J.KartuID=0,'Cash / Uang Tunai',K.Nama_Kartu) Kartu,SUM(IF(J.Kode='J',J.Total_Jual-J.Total_Diskon-J.Total_Potong,0)) Total_Jual,SUM(IF(J.Kode='P',J.Total_Jual,0)) Total_Pulsa,SUM(J.Total_Diskon) Total_Diskon,SUM(J.Total_Potong) Total_Potong,SUM(J.Total_Cash) Total_Cash,SUM(J.Total_Kartu) Total_Kartu FROM (SELECT 'J' Kode,KartuID,SUM(Total_Jual) Total_Jual,SUM(Total_Jual-Total_Kartu-Total_Diskon-Total_Potong) Total_Cash,SUM(Total_Kartu) Total_Kartu,SUM(Total_Diskon) Total_Diskon,SUM(Total_Potong) Total_Potong FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY KartuID ORDER BY KartuID) J LEFT JOIN para_rek_pos K ON (J.KartuID=K.KartuID) GROUP BY J.KartuID ORDER BY J.KartuID");
|
||||
} else {
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT O.UserID,O.Nama Nama_User,SUM(IF(J.Kode='J',J.Total_Jual,0)) Total_Jual,SUM(IF(J.Kode='P',J.Total_Jual,0)) Total_Pulsa,SUM(J.Total_Jual-J.Total_Kartu-J.Total_Potong) Total_Cash,SUM(J.Total_Kartu) Total_Kartu,SUM(J.Total_Potong) Total_Potong FROM (SELECT 'J' Kode,UserID,KartuID,SUM(Total_Jual-Total_Diskon) Total_Jual,SUM(Total_Kartu) Total_Kartu,SUM(Total_Potong) Total_Potong FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY UserID,KartuID ORDER BY UserID,KartuID) J LEFT JOIN app_operator O ON (J.UserID=O.UserID) GROUP BY J.UserID");
|
||||
} else {
|
||||
$db->Query("SELECT J.*,O.Nama Nama_User FROM (SELECT *,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,Total_Jual-Total_Diskon Total_Jual2,Total_Jual-Total_Kartu-Total_Diskon-Total_Potong Total_Cash FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." ORDER BY No_Jual) J LEFT JOIN app_operator O ON (J.UserID=O.UserID) ORDER BY J.No_Jual");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print-pos" ) {
|
||||
$tot_jual = 0; $tot_pulsa = 0; $tot_potong = 0; $tot_diskon = 0; $tot_dana = 0;
|
||||
$adana = [[0=>"Cash / Uang Tunai",1=>0]];
|
||||
while ($db->Next()) {
|
||||
$adana[0][1] += $db->Row("Total_Cash");
|
||||
if ($db->Row("KartuID") > 0) {
|
||||
$adana[$db->Row("KartuID")] = [$db->Row("Kartu"), $db->Row("Total_Kartu")];
|
||||
}
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_pulsa += $db->Row("Total_Pulsa");
|
||||
$tot_potong += $db->Row("Total_Potong");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
}
|
||||
$tot_dana = $tot_jual + $tot_pulsa - $tot_potong - $tot_diskon;
|
||||
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintPOS();
|
||||
$pre->set_fontsize(2);
|
||||
$pre->set_header_logo("logo-nota.png");
|
||||
//$pre->add_header($_SESSION['__WEB_APP']['REG_ADDRESS'], $_SESSION['__WEB_APP']['REG_CITY']);
|
||||
if ($_SESSION['__APP_INV']['PRINT_OPENCD']==1) $pre->set_opendrawer();
|
||||
if ($_SESSION['__APP_INV']['PRINT_AUTOCUT']==1) $pre->set_cutpaper();
|
||||
$pre->add_empty();
|
||||
$pre->addc("REKAP PENERIMAAN KASIR / POS");
|
||||
$pre->addc("Periode : ".$tglheader);
|
||||
$pre->add_empty();
|
||||
$pre->add("Operator : ".$ainfo['Username']);
|
||||
$pre->add("Nama : ".$ainfo['Nama_User']);
|
||||
$pre->add_empty();
|
||||
$pre->add(array("Jumlah Penjualan Rp.",24), array(rupiah($tot_jual-$tot_diskon),16,"R"));
|
||||
//$pre->add(array("Jumlah Pulsa & PPOB Rp.",24), array(rupiah($tot_pulsa),16,"R"));
|
||||
$pre->add(array("Jumlah Diskon Rp.",24), array(rupiah($tot_diskon),16,"R"));
|
||||
if ($tot_potong>0) $pre->add(array("Jumlah Promo Rp.",24), array(rupiah($tot_potong),16,"R"));
|
||||
$pre->add_line("-");
|
||||
if (count($adana)>1) {
|
||||
foreach($adana as $_key => $_val) {
|
||||
$pre->add(array($_val[0],21,"L"), array("Rp.",3), array(rupiah($_val[1]),16,"R"));
|
||||
}
|
||||
$pre->add_line("-");
|
||||
}
|
||||
$pre->add(array("TOTAL PENERIMAAN Rp.",24), array(rupiah($tot_dana),16,"R"));
|
||||
$pre->add_line("=");
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->add_empty($_SESSION['__APP_INV']['PRINT_ROW']);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KASIR / POS", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Operator",30,"L");
|
||||
$pre->add_field("Penjualan",20,"R","rupiah");
|
||||
//$pre->add_field("Pulsa & PPOB",20,"R","rupiah");
|
||||
$pre->add_field("Tunai",20,"R","rupiah");
|
||||
$pre->add_field("Non Tunai",20,"R","rupiah");
|
||||
|
||||
$tot_jual = 0; $tot_pulsa = 0; $tot_cash = 0; $tot_deb = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_pulsa += $db->Row("Total_Pulsa");
|
||||
$tot_cash += $db->Row("Total_Cash");
|
||||
$tot_deb += $db->Row("Total_Kartu");
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_cash,1,"R,B","rupiah"),array($tot_deb,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. Nota",30,"C");
|
||||
$pre->add_field("Tanggal",30,"C");
|
||||
$pre->add_field("Penjualan",20,"R","rupiah");
|
||||
$pre->add_field("Tunai",20,"R","rupiah");
|
||||
$pre->add_field("Non Tunai",20,"R","rupiah");
|
||||
$pre->add_field("Operator",30,"L");
|
||||
|
||||
$tot_jual = 0; $tot_cash = 0; $tot_deb = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_jual += $db->Row("Total_Jual2");
|
||||
$tot_cash += $db->Row("Total_Cash");
|
||||
$tot_deb += $db->Row("Total_Kartu");
|
||||
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Total_Jual2"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"), $db->Row("Nama_User"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_cash,1,"R,B","rupiah"),array($tot_deb,1,"R,B","rupiah"),array());
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Penerimaan POS",
|
||||
'desc'=>"Export Data Penerimaan POS"
|
||||
]);
|
||||
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KASIR / POS</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Operator", 50, "L");
|
||||
$xls->add_field("Penjualan", 15, "R,N");
|
||||
//$xls->add_field("Pulsa & PPOB", 15, "R,N");
|
||||
$xls->add_field("Tunai", 15, "R,N");
|
||||
$xls->add_field("Non Tunai", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_jual = 0; $tot_pulsa = 0; $tot_cash = 0; $tot_deb = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_pulsa += $db->Row("Total_Pulsa");
|
||||
$tot_cash += $db->Row("Total_Cash");
|
||||
$tot_deb += $db->Row("Total_Kartu");
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,N,B"),array($tot_cash,1,"R,N,B"),array($tot_deb,1,"R,N,B"));
|
||||
|
||||
} else {
|
||||
$xls->add_field("No. Nota", 15, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Penjualan", 15, "R,N");
|
||||
$xls->add_field("Tunai", 15, "R,N");
|
||||
$xls->add_field("Non Tunai", 15, "R,N");
|
||||
$xls->add_field("Operator", 30, "L");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_jual = 0; $tot_cash = 0; $tot_deb = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_jual += $db->Row("Total_Jual2");
|
||||
$tot_cash += $db->Row("Total_Cash");
|
||||
$tot_deb += $db->Row("Total_Kartu");
|
||||
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Total_Jual2"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"), $db->Row("Nama_User"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,N,B"),array($tot_cash,1,"R,N,B"),array($tot_deb,1,"R,N,B"),array("",1,"L,B"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Penerimaan POS ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$ikasir = ($_SESSION['__WEB_USER']['Level']<9) ? 0 : user_id();
|
||||
$tsql = ($_SESSION['__WEB_USER']['Level']<9) ? " AND Level>=".$_SESSION['__WEB_USER']['Level'] : " AND UserID='".user_id()."'";
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tkasir = $form->option_db("_", "KasirID", $ikasir, true, false, "app_operator", ["UserID","Nama"], "Aktif=1 ".((user_id()==1)?"":"AND UserID>1").$tsql, (($ikasir==0)?[0,"SEMUA OPERATOR"]:null));
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="KasirID">Nama Operator</label>
|
||||
<div class="col">'.$tkasir.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,183 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/hutang.php
|
||||
Desc. : PHP - Laporan Hutang Supplier
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 17th, 2011.
|
||||
Last Modified : October 16th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
$nama_sup = "";
|
||||
if ($id_sup>0) {
|
||||
$db->Query("SELECT Nama_Sup Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_sup>0) ? " AND SupID='".$id_sup."'" : "";
|
||||
|
||||
// query data laporan
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT B.*,S.Nama_Sup FROM (SELECT SupID,SUM(Total_Hutang) Total_Hutang,SUM(Total_Bayar+Total_Potong) Total_Bayar FROM inv_beli WHERE Lunas=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY SupID) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY S.Nama_Sup");
|
||||
} else {
|
||||
$db->Query("SELECT B.*,CONCAT(S.Nama_Sup,IF(B.Data_Beli=1,'',' <i>(Retur)</i>')) Nama_Sup,B.Total_Hutang Total_Hutang,B.Total_Bayar+B.Total_Potong Total_Bayar FROM (SELECT * FROM inv_beli WHERE Lunas=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." HUTANG SUPPLIER", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Supplier",120,"L");
|
||||
$pre->add_field("Jumlah Faktur",50,"R","rupiah2");
|
||||
$pre->add_field("Jumlah Bayar",50,"R","rupiah2");
|
||||
$pre->add_field("Sisa Hutang",50,"R","rupiah2");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
|
||||
$tot_hut = 0; $tot_bayar = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_hut += $db->Row("Total_Hutang");
|
||||
$tot_bayar += $db->Row("Total_Bayar");
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_hut,1,"R,B","rupiah2"),array($tot_bayar,1,"R,B","rupiah2"),array($tot_hut-$tot_bayar,1,"R,B","rupiah2"));
|
||||
} else {
|
||||
$pre->add_field("No. Nota",10,"C");
|
||||
$pre->add_field("Tgl. Nota",10,"C","sqltgl");
|
||||
$pre->add_field("Nama Supplier",120,"L");
|
||||
$pre->add_field("Jumlah",50,"R","rupiah2");
|
||||
$pre->add_field("Bayar",50,"R","rupiah2");
|
||||
$pre->add_field("Sisa Hutang",50,"R","rupiah2");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,6,"L,B"));
|
||||
|
||||
$tot_hut = 0; $tot_bayar = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_hut += $db->Row("Total_Hutang");
|
||||
$tot_bayar += $db->Row("Total_Bayar");
|
||||
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_hut,1,"R,B","rupiah2"),array($tot_bayar,1,"R,B","rupiah2"),array($tot_hut-$tot_bayar,1,"R,B","rupiah2"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Hutang Supplier",
|
||||
'desc'=>"Export Data Hutang Supplier"
|
||||
]);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
|
||||
$xls->add_header("DATA REKAP HUTANG SUPPLIER");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 10, "C");
|
||||
$xls->add_field("Nama Supplier", 80, "L");
|
||||
$xls->add_field("Jumlah Faktur", 20, "R,N");
|
||||
$xls->add_field("Jumlah Bayar", 20, "R,N");
|
||||
$xls->add_field("Sisa Hutang", 20, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,5,"L"]);
|
||||
|
||||
$tot_hut = 0; $tot_bayar = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_hut += $db->Row("Total_Hutang");
|
||||
$tot_bayar += $db->Row("Total_Bayar");
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_hut,1,"R,B,N"),array($tot_bayar,1,"R,B,N"),array($tot_hut-$tot_bayar,1,"R,B,N"));
|
||||
} else {
|
||||
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
|
||||
$xls->add_header("DATA DETAIL HUTANG SUPPLIER");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No. Nota", 10, "C");
|
||||
$xls->add_field("Tgl. Nota", 10, "C", "sqltgl");
|
||||
$xls->add_field("Nama Supplier", 80, "L");
|
||||
$xls->add_field("Jumlah", 20, "R,N");
|
||||
$xls->add_field("Bayar", 20, "R,N");
|
||||
$xls->add_field("Sisa Hutang", 20, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,6,"L"]);
|
||||
|
||||
$tot_hut = 0; $tot_bayar = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_hut += $db->Row("Total_Hutang");
|
||||
$tot_bayar += $db->Row("Total_Bayar");
|
||||
$xls->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_hut,1,"R,B,N"),array($tot_bayar,1,"R,B,N"),array($tot_hut-$tot_bayar,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Hutang Supplier ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/hutang_bayar.php
|
||||
Desc. : PHP - Laporan Pembayaran Hutang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 18th, 2012.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_sup."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT Tgl_Bayar,SUM(Total_Bayar) Total_Bayar FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Bayar ORDER BY Tgl_Bayar");
|
||||
} else {
|
||||
$db->Query("SELECT L.*,S.Nama_Sup FROM (SELECT * FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") L LEFT JOIN para_supplier S ON (S.SupID=L.SupID) ORDER BY L.Tgl_Bayar");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PEMBAYARAN SUPPLIER", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("Keterangan",80,"L");
|
||||
$pre->add_field("Jumlah",20,"R","rupiah");
|
||||
|
||||
$sub_tot = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Total_Bayar");
|
||||
$pre->add_value(++$nomor, $db->Row("Tgl_Bayar"), "Pembayaran Hutang Supplier", $db->Row("Total_Bayar"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("No. Transaksi",20,"L");
|
||||
$pre->add_field("Nama Supplier",150,"L");
|
||||
$pre->add_field("Jumlah",30,"R","rupiah");
|
||||
|
||||
$sub_tot = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Total_Bayar");
|
||||
$pre->add_value($db->Row("Tgl_Bayar"), $db->Row("No_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Bayar"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Pembayaran Supplier",
|
||||
'desc'=>"Export Data Pembayaran Supplier"
|
||||
]);
|
||||
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PEMBAYARAN SUPPLIER</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Keterangan", 50, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$sub_tot = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Total_Bayar");
|
||||
$xls->add_value(++$nomor, $db->Row("Tgl_Bayar"), "Pembayaran Hutang Supplier", $db->Row("Total_Bayar"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("No. Transaksi", 15, "L");
|
||||
$xls->add_field("Nama Supplier", 50, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$sub_tot = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Total_Bayar");
|
||||
$xls->add_value($db->Row("Tgl_Bayar"), $db->Row("No_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Bayar"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Pembayaran Supplier ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/jual.php
|
||||
Desc. : PHP - Laporan Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : April 12th, 2011.
|
||||
Last Modified : September 30th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT J.Tgl_Jual,SUM(J.Total_Jual) Total_Jual,SUM(J.Total_Diskon) Total_Diskon,SUM(J.Total_Jual-J.Total_Diskon) Total FROM (SELECT * FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") J GROUP BY Tgl_Jual ORDER BY J.Tgl_Jual");
|
||||
} else {
|
||||
$db->Query("SELECT D.*,DATE_FORMAT(D.Tgl_Ref,'%d-%m-%Y') Tgl_Jual,IFNULL(O.Nama,'KASIR POS') Nama_User FROM (SELECT No_Ref No_Jual,Tgl_Ref,SUM(-Qty*Harga_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM((-Qty*Harga_Jual)-Total_Diskon) Total,UserID FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." AND NotaID=5 GROUP BY No_Ref) D LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY D.No_Jual");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENJUALAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("Sub. Total",20,"R","rupiah");
|
||||
$pre->add_field("Diskon",20,"R","rupiah");
|
||||
$pre->add_field("Total",20,"R","rupiah");
|
||||
|
||||
$tot_jual = 0; $tot_diskon = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$pre->add_value(++$nomor, $db->Row("Tgl_Jual"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_jual-$tot_diskon,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. Nota",30,"C");
|
||||
$pre->add_field("Tgl. Nota",30,"C");
|
||||
$pre->add_field("Nama Kasir",20,"L");
|
||||
$pre->add_field("Sub. Total",20,"R","rupiah");
|
||||
$pre->add_field("Diskon",20,"R","rupiah");
|
||||
$pre->add_field("Total",30,"R","rupiah");
|
||||
|
||||
$tot_jual = 0; $tot_diskon = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual"), $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_jual-$tot_diskon,1,"R,B","rupiah"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Penjualan",
|
||||
'desc'=>"Export Data Penjualan"
|
||||
]);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "sqltgl");
|
||||
$xls->add_field("Sub. Total", 15, "R,N");
|
||||
$xls->add_field("Diskon", 15, "R,N");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_jual = 0; $tot_diskon = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$xls->add_value(++$nomor, $db->Row("Tgl_Jual"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_jual-$tot_diskon,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA DETAIL PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No. Nota", 15, "C");
|
||||
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Nama Kasir", 20, "L");
|
||||
$xls->add_field("Sub. Total", 15, "R,N");
|
||||
$xls->add_field("Diskon", 15, "R,N");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_jual = 0; $tot_diskon = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total", 0) == 0) continue;
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$tot_diskon += $db->Row("Total_Diskon");
|
||||
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual"), $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_jual,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_jual-$tot_diskon,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,269 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/jual_analisa.php
|
||||
Desc. : PHP - Laporan Analisa Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 9th, 2013.
|
||||
Last Modified : October 4th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "V"); // V or R or M
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$id_grup = Param::Get("Grup_InvID", 0);
|
||||
$m_urut = Param::Get("Urut", "B");
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
$jum_hari = tgl_range_hari($tglfrom, $tglto, true);
|
||||
|
||||
$nama_sup = ""; $nama_grup = "";
|
||||
if ($id_sup>0) {
|
||||
$db->Query("SELECT Nama_Sup Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
if ($id_grup>0 && $id_sup==0) {
|
||||
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_grup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tjoin = "";
|
||||
$tsql = " D.Jumlah <> 0";
|
||||
$tsql .= ($id_grup>0 && $id_sup==0) ? " AND P.Grup_InvID=".$id_grup : "";
|
||||
if ($id_sup>0) {
|
||||
$tsql .= " AND U.SupID='".$id_sup."'";
|
||||
$tjoin .= " LEFT JOIN inv_produk_sup U ON (U.InvID=D.InvID AND U.SupID='".$id_sup."')";
|
||||
}
|
||||
$tsql2 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
$torder = ($m_urut=="B") ? " P.Nama_Produk" : " D.Jumlah";
|
||||
|
||||
if ($tipe=="V") {
|
||||
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Jumlah,S.Stok,P.Qty Kali FROM (SELECT InvID,SUM(-Stok) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID) D LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tglto."'".$tsql2." GROUP BY InvID) S ON (D.InvID=S.InvID) LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tjoin." WHERE ".$tsql." ORDER BY".$torder);
|
||||
} else if ($tipe=="R") {
|
||||
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Jumlah,S.Stok,P.Qty Kali FROM (SELECT InvID,SUM(-Qty*Harga_Jual) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID) D LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tglto."'".$tsql2." GROUP BY InvID) S ON (D.InvID=S.InvID) LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tjoin." WHERE ".$tsql." ORDER BY".$torder);
|
||||
} else if ($tipe=="M") {
|
||||
$torder = ($m_urut=="M") ? " Margin" : $torder;
|
||||
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Margin,D.Jumlah,S.Stok,P.Qty Kali FROM (SELECT InvID,((SUM(-Qty*(Harga_Jual-Harga_Beli))*100)/SUM(-Qty*Harga_Jual)) Margin,SUM(-Qty*(Harga_Jual-Harga_Beli)) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID) D LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tglto."'".$tsql2." GROUP BY InvID) S ON (D.InvID=S.InvID) LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tjoin." WHERE ".$tsql." ORDER BY".$torder);
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="V") {
|
||||
Report_Header("REKAP VOLUME PENJUALAN", "Periode : ".$tglheader);
|
||||
$pre->add_field("No.",5,"C");
|
||||
$pre->add_field("Nama Barang",120);
|
||||
$pre->add_field("Jumlah",80,"R");
|
||||
$pre->add_field("Mingguan",80,"R");
|
||||
$pre->add_field("Sisa Stok",80,"R");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,NB"));
|
||||
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,NB"));
|
||||
|
||||
$nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$total = $db->Row("Jumlah",0);
|
||||
$mg_total = $total / ($jum_hari/7);
|
||||
$kali = $db->Row("Kali",0);
|
||||
$stok = Format_Stok($total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$mg_stok = Format_Stok($mg_total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$ss_stok = Format_Stok($db->Row("Stok"), $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok, $ss_stok);
|
||||
}
|
||||
} else if ($tipe=="R") {
|
||||
Report_Header("REKAP RUPIAH PENJUALAN", "Periode : ".$tglheader);
|
||||
$pre->add_field("No.",5,"C");
|
||||
$pre->add_field("Nama Barang",80);
|
||||
$pre->add_field("Jumlah",20,"R","rupiah");
|
||||
$pre->add_field("Mingguan",20,"R","rupiah");
|
||||
$pre->add_field("Sisa Stok",80,"R");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,NB"));
|
||||
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,NB"));
|
||||
|
||||
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
|
||||
while ($db->Next()) {
|
||||
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
|
||||
$tot_rup += $db->Row("Jumlah");
|
||||
$tot_mg += $mg_avg;
|
||||
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $mg_avg. $ss_stok);
|
||||
}
|
||||
$pre->add_span(array("TOTAL",2,"R,B"),array(rupiah($tot_rup),1,"R,B"),array(rupiah($tot_mg),1,"R,B"),array("",1,"B"));
|
||||
} else if ($tipe=="M") {
|
||||
Report_Header("REKAP MARGIN PENJUALAN", "Periode : ".$tglheader);
|
||||
$pre->add_field("No.",5,"C");
|
||||
$pre->add_field("Nama Barang",80);
|
||||
$pre->add_field("Jumlah",20,"R","rupiah");
|
||||
$pre->add_field("Margin (%)",10,"R","rupiah2");
|
||||
$pre->add_field("Mingguan",20,"R","rupiah");
|
||||
$pre->add_field("Sisa Stok",80,"R");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,6,"L,NB"));
|
||||
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,6,"L,NB"));
|
||||
|
||||
$nomor = 0; $tot_rup = 0; $tot_mar = 0; $tot_mg = 0;
|
||||
while ($db->Next()) {
|
||||
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
|
||||
$tot_rup += $db->Row("Jumlah");
|
||||
$tot_mar += $db->Row("Margin");
|
||||
$tot_mg += $mg_avg;
|
||||
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $db->Row("Margin"), $mg_avg, $ss_stok);
|
||||
}
|
||||
$pre->add_span(array("TOTAL",2,"R,B"),array(rupiah($tot_rup),1,"R,B"),array(rupiah2($tot_mar),1,"R,B"),array(rupiah($tot_mg),1,"R,B"),array("",1,"B"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Analisa Penjualan",
|
||||
'desc'=>"Export Data Analisa Penjualan"
|
||||
]);
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
|
||||
if ($tipe=="V") {
|
||||
$xls->add_header("<b>DATA REKAP VOLUME PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Barang", 80, "L");
|
||||
$xls->add_field("Jumlah", 20, "R,N");
|
||||
$xls->add_field("Mingguan", 20, "R,N");
|
||||
$xls->add_field("Sisa Stok", 20, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
if ($id_grup>0 && $id_sup==0) $xls->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
|
||||
|
||||
$nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$total = $db->Row("Jumlah",0);
|
||||
$mg_total = $total / ($jum_hari/7);
|
||||
$kali = $db->Row("Kali",0);
|
||||
$stok = Format_Stok($total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$mg_stok = Format_Stok($mg_total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$ss_stok = Format_Stok($db->Row("Stok"), $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok, $ss_stok);
|
||||
}
|
||||
} else if ($tipe=="R") {
|
||||
$xls->add_header("<b>DATA REKAP RUPIAH PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Barang", 80, "L");
|
||||
$xls->add_field("Jumlah", 20, "R,N");
|
||||
$xls->add_field("Mingguan", 20, "R,N");
|
||||
$xls->add_field("Sisa Stok", 20, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
if ($id_grup>0 && $id_sup==0) $xls->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
|
||||
|
||||
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
|
||||
while ($db->Next()) {
|
||||
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
|
||||
$tot_rup += $db->Row("Jumlah");
|
||||
$tot_mg += $mg_avg;
|
||||
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $mg_avg, $ss_stok);
|
||||
}
|
||||
$xls->add_span(array("TOTAL",2,"R,B"),array($tot_rup,1,"R,N,B"),array($tot_mg,1,"R,N,B"),array("",1,"B"));
|
||||
} else if ($tipe=="M") {
|
||||
$xls->add_header("<b>DATA REKAP MARGIN PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Barang", 80, "L");
|
||||
$xls->add_field("Jumlah", 20, "R,N");
|
||||
$xls->add_field("Margin (%)", 10, "R,N");
|
||||
$xls->add_field("Mingguan", 20, "R,N");
|
||||
$xls->add_field("Sisa Stok", 20, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,6,"L,B"));
|
||||
if ($id_grup>0 && $id_sup==0) $xls->add_span(array("Grup Barang : ".$nama_grup,6,"L,B"));
|
||||
|
||||
$nomor = 0; $tot_rup = 0; $tot_mar = 0; $tot_mg = 0;
|
||||
while ($db->Next()) {
|
||||
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
|
||||
$tot_rup += $db->Row("Jumlah");
|
||||
$tot_mar += $db->Row("Margin");
|
||||
$tot_mg += $mg_avg;
|
||||
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $db->Row("Margin"), $mg_avg, $ss_stok);
|
||||
}
|
||||
$xls->add_span(array("TOTAL",2,"R,B"),array($tot_rup,1,"R,N,B"),array($tot_mar,1,"R,N,B"),array($tot_mg,1,"R,N,B"),array("",1,"B"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Analisa Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "V", true, false, ["V"=>"Volume","R"=>"Rupiah","M"=>"Margin"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
|
||||
$turut = $form->radio("_", "Urut", "B", true, false, ['B'=>"Nama Barang",'J'=>"Jumlah / Nilai",'M'=>"Margin"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col"><div class="input-group">'.$tsup.Form_Info("Jika Nama Supplier dipilih, Filter Grup Barang akan diabaikan.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
|
||||
<div class="col">'.$tgrup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Urut">Urut Berdasarkan</label>
|
||||
<div class="col col-form-label">'.$turut.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,215 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/jual_margin.php
|
||||
Desc. : PHP - Laporan Margin Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : October 12nd, 2012.
|
||||
Last Modified : December 12th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D or I
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT D.*,IFNULL(O.Nama,'KASIR POS') Nama_User FROM (SELECT UserID,SUM(-Qty*Harga_Beli) Total_Modal,SUM((-Qty*Harga_Jual)-Total_Diskon) Total_Jual FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql." GROUP BY UserID) D LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY O.Nama");
|
||||
} else if ($tipe=="D") {
|
||||
$db->Query("SELECT D.*,IFNULL(O.Nama,'KASIR POS') Nama_User FROM (SELECT UserID,No_Ref,Tgl_Ref,SUM(-Qty*Harga_Beli) Total_Modal,SUM((-Qty*Harga_Jual)-Total_Diskon) Total_Jual FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql." GROUP BY UserID,No_Ref) D LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY D.Tgl_Ref,O.Nama");
|
||||
} else {
|
||||
$db->Query("SELECT D.*,IFNULL(O.Nama,'KASIR POS') Nama_User,P.Nama_Lengkap FROM (SELECT UserID,InvID,SatuanID,No_Ref,Tgl_Ref,(-Qty*Harga_Beli) Total_Modal,((-Qty*Harga_Jual)-Total_Diskon) Total_Jual FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY D.Tgl_Ref,O.Nama,D.No_Ref");
|
||||
}
|
||||
$ahead = array('R'=>"REKAP",'D'=>"DETAIL",'I'=>"RINCIAN");
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header($ahead[$tipe]." MARGIN PENJUALAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Nama Kasir",30,"L");
|
||||
$pre->add_field("Harga Modal",20,"R","rupiah");
|
||||
$pre->add_field("Harga Jual",20,"R","rupiah");
|
||||
$pre->add_field("Margin",20,"R","rupiah");
|
||||
$pre->add_field("%",10,"R","rupiah2");
|
||||
|
||||
$tot_modal = 0; $tot_jual = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_modal += $db->Row("Total_Modal");
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$pre->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_modal,1,"R,B","rupiah"),array($tot_jual,1,"R,B","rupiah"),array($tot_jual-$tot_modal,1,"R,B","rupiah"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B","rupiah2"));
|
||||
|
||||
} else if ($tipe=="D") {
|
||||
$pre->add_field("No. Nota",20,"C");
|
||||
$pre->add_field("Tgl. Nota",20,"C","sqltgl");
|
||||
$pre->add_field("Nama Kasir",30,"L");
|
||||
$pre->add_field("Harga Modal",20,"R","rupiah");
|
||||
$pre->add_field("Harga Jual",20,"R","rupiah");
|
||||
$pre->add_field("Margin",20,"R","rupiah");
|
||||
$pre->add_field("%",10,"R","rupiah2");
|
||||
|
||||
$tot_modal = 0; $tot_jual = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_modal += $db->Row("Total_Modal");
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$pre->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_modal,1,"R,B","rupiah"),array($tot_jual,1,"R,B","rupiah"),array($tot_jual-$tot_modal,1,"R,B","rupiah"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B","rupiah2"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. Nota",20,"C");
|
||||
$pre->add_field("Tgl. Nota",20,"C","sqltgl");
|
||||
$pre->add_field("Nama Kasir",20,"L");
|
||||
$pre->add_field("Nama Barang",20,"L");
|
||||
$pre->add_field("Harga Modal",20,"R","rupiah");
|
||||
$pre->add_field("Harga Jual",20,"R","rupiah");
|
||||
$pre->add_field("Margin",20,"R","rupiah");
|
||||
$pre->add_field("%",10,"R","rupiah2");
|
||||
|
||||
$tot_modal = 0; $tot_jual = 0; $psn_margin = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total_Jual", 0) == 0) continue;
|
||||
$tot_modal += $db->Row("Total_Modal");
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$psn_margin = ($db->Row("Total_Jual")==0) ? 0 : (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual");
|
||||
$pre->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Nama_Lengkap"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), $psn_margin);
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_modal,1,"R,B","rupiah"),array($tot_jual,1,"R,B","rupiah"),array($tot_jual-$tot_modal,1,"R,B","rupiah"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B","rupiah2"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Margin Penjualan",
|
||||
'desc'=>"Export Data Margin Penjualan"
|
||||
]);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP MARGIN PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Nama Kasir", 20, "L");
|
||||
$xls->add_field("Harga Modal", 15, "R,N");
|
||||
$xls->add_field("Harga Jual", 15, "R,N");
|
||||
$xls->add_field("Margin", 15, "R,N");
|
||||
$xls->add_field("%", 8, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_modal = 0; $tot_jual = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_modal += $db->Row("Total_Modal");
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$xls->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_modal,1,"R,B,N"),array($tot_jual,1,"R,B,N"),array($tot_jual-$tot_modal,1,"R,B,N"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B,N"));
|
||||
|
||||
} else if ($tipe=="D") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA DETAIL MARGIN PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No. Nota", 15, "C");
|
||||
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Nama Kasir", 20, "L");
|
||||
$xls->add_field("Harga Modal", 15, "R,N");
|
||||
$xls->add_field("Harga Jual", 15, "R,N");
|
||||
$xls->add_field("Margin", 15, "R,N");
|
||||
$xls->add_field("%", 8, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_modal = 0; $tot_jual = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_modal += $db->Row("Total_Modal");
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$xls->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_modal,1,"R,B,N"),array($tot_jual,1,"R,B,N"),array($tot_jual-$tot_modal,1,"R,B,N"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA RINCIAN MARGIN PENJUALAN</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No. Nota", 15, "C");
|
||||
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Nama Kasir", 20, "L");
|
||||
$xls->add_field("Nama Barang", 20, "L");
|
||||
$xls->add_field("Harga Modal", 15, "R,N");
|
||||
$xls->add_field("Harga Jual", 15, "R,N");
|
||||
$xls->add_field("Margin", 15, "R,N");
|
||||
$xls->add_field("%", 8, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_modal = 0; $tot_jual = 0; $psn_margin = 0;
|
||||
while ($db->Next()) {
|
||||
if ($db->RowFloat("Total_Jual", 0) == 0) continue;
|
||||
$tot_modal += $db->Row("Total_Modal");
|
||||
$tot_jual += $db->Row("Total_Jual");
|
||||
$psn_margin = ($db->Row("Total_Jual")==0) ? 0 : (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual");
|
||||
$xls->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Nama_Lengkap"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), $psn_margin);
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_modal,1,"R,B,N"),array($tot_jual,1,"R,B,N"),array($tot_jual-$tot_modal,1,"R,B,N"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Margin Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail",'I'=>"Rincian"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/jual_rekap.php
|
||||
Desc. : PHP - Laporan Rekap Penjualan
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 9th, 2013.
|
||||
Last Modified : October 4th, 2025.
|
||||
|
||||
(c) 2013 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$id_grup = Param::Get("Grup_InvID", 0);
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
$nama_sup = ""; $nama_grup = "";
|
||||
if ($id_sup>0) {
|
||||
$db->Query("SELECT Nama_Sup Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_sup = $db->Row("Nama");
|
||||
}
|
||||
if ($id_grup>0 && $id_sup==0) {
|
||||
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
|
||||
if ($db->Next()) $nama_grup = $db->Row("Nama");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tjoin = "";
|
||||
$tsql = " D.Jumlah<>0";
|
||||
$tsql .= ($id_grup>0 && $id_sup==0) ? " AND P.Grup_InvID=".$id_grup : "";
|
||||
if ($id_sup>0) {
|
||||
$tsql .= " AND U.SupID='".$id_sup."'";
|
||||
$tjoin .= " LEFT JOIN inv_produk_sup U ON (U.InvID=D.InvID AND U.SupID='".$id_sup."')";
|
||||
}
|
||||
$tsql2 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
|
||||
// query data laporan
|
||||
$db->Query("SELECT P.Kode_SKU,P.Nama_Produk,P.Nama_Satuan,D.Qty,D.Jumlah FROM (SELECT InvID,SatuanID,SUM(-Qty) Qty,SUM(-Qty*Harga_Jual) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID, SatuanID) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)".$tjoin." WHERE ".$tsql." ORDER BY P.Kode_SKU");
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header("REKAP PENJUALAN", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Kode SKU",20,"C");
|
||||
$pre->add_field("Nama Barang",120,"L");
|
||||
$pre->add_field("Qty",80,"R","rupiah2");
|
||||
$pre->add_field("Jumlah",50,"R","rupiah2");
|
||||
|
||||
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
|
||||
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
|
||||
|
||||
$nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$pre->add_value(++$nomor, $db->Row("Kode_SKU"), $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Jumlah"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Rekap Penjualan",
|
||||
'desc'=>"Export Data Rekap Penjualan"
|
||||
]);
|
||||
|
||||
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
|
||||
$xls->add_header("DATA REKAP PENJUALAN");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("No.", 10, "C");
|
||||
$xls->add_field("Kode SKU", 12, "L");
|
||||
$xls->add_field("Nama Barang", 80, "L");
|
||||
$xls->add_field("Qty", 20, "R,N");
|
||||
$xls->add_field("Jumlah", 20, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,5,"L"]);
|
||||
if ($id_grup>0 && $id_sup==0) $xls->add_span(["Grup Barang : ".$nama_grup,5,"L"]);
|
||||
|
||||
$nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$xls->add_value(++$nomor, $db->Row("Kode_SKU"), $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Jumlah"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Rekap Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
|
||||
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
|
||||
<div class="col"><div class="input-group">'.$tsup.Form_Info("Jika Nama Supplier dipilih, Filter Grup Barang akan diabaikan.").'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
|
||||
<div class="col">'.$tgrup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/kas_keluar.php
|
||||
Desc. : PHP - Laporan Pengeluaran Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 18th, 2012.
|
||||
Last Modified : October 18th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT * FROM ((SELECT Tgl_Kas,'Pengeluaran Kas' Ket,SUM(Jumlah) Jumlah FROM gel_kas WHERE Tipe_Kas='O' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Kas) UNION ALL (SELECT Tgl_Bayar Tgl_Kas,'Pembayaran Supplier' Ket,SUM(Total_Bayar) Jumlah FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Bayar)) A ORDER BY A.Tgl_Kas");
|
||||
} else {
|
||||
$db->Query("SELECT * FROM ((SELECT No_Kas,Tgl_Kas,Ket,Jumlah FROM gel_kas WHERE Tipe_Kas='O' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") UNION ALL (SELECT L.No_Beli No_Kas,L.Tgl_bayar Tgl_Kas,S.Nama_Sup Ket,L.Total_Bayar Jumlah FROM (SELECT * FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") L LEFT JOIN para_supplier S ON (S.SupID=L.SupID))) A ORDER BY A.No_Kas");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENGELUARAN KAS", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("Keterangan",80,"L");
|
||||
$pre->add_field("Jumlah",20,"R","rupiah");
|
||||
|
||||
$sub_tot = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$pre->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. TX",30,"C");
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("Keterangan",150,"L");
|
||||
$pre->add_field("Jumlah",30,"R","rupiah");
|
||||
|
||||
$sub_tot = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$pre->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Pengeluaran Kas",
|
||||
'desc'=>"Export Data Pengeluaran Kas"
|
||||
]);
|
||||
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PENGELUARAN KAS</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Keterangan", 50, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$sub_tot = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$xls->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_field("No. TX", 15, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Keterangan", 50, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$sub_tot = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$xls->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Pengeluaran Kas ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/kas_terima.php
|
||||
Desc. : PHP - Laporan Penerimaan Kas
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 18th, 2012.
|
||||
Last Modified : October 19th, 2025.
|
||||
|
||||
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT Tgl_Kas,'Penerimaan Kas' Ket,SUM(Jumlah) Jumlah FROM gel_kas WHERE Tipe_Kas='I' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Kas ORDER BY Tgl_Kas");
|
||||
} else {
|
||||
$db->Query("SELECT * FROM gel_kas WHERE Tipe_Kas='I' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." ORDER BY No_Kas");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KAS", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("No.",10,"C");
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("Keterangan",80,"L");
|
||||
$pre->add_field("Jumlah",20,"R","rupiah");
|
||||
|
||||
$sub_tot = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$pre->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
|
||||
|
||||
} else {
|
||||
$pre->add_field("No. TX",30,"C");
|
||||
$pre->add_field("Tanggal",30,"C","sqltgl");
|
||||
$pre->add_field("Keterangan",150,"L");
|
||||
$pre->add_field("Jumlah",30,"R","rupiah");
|
||||
|
||||
$sub_tot = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$pre->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Penerimaan Kas",
|
||||
'desc'=>"Export Data Penerimaan Kas"
|
||||
]);
|
||||
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KAS</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_field("No.", 5, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Keterangan", 50, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$sub_tot = 0; $nomor = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$xls->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
|
||||
|
||||
} else {
|
||||
$xls->add_field("No. TX", 15, "C");
|
||||
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
|
||||
$xls->add_field("Keterangan", 50, "L");
|
||||
$xls->add_field("Jumlah", 15, "R,N");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$sub_tot = 0;
|
||||
while ($db->Next()) {
|
||||
$sub_tot += $db->Row("Jumlah");
|
||||
$xls->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Penerimaan Kas ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
|
||||
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
|
||||
<div class="col col-form-label">'.$ttipe.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
|
||||
<div class="col">'.$tcab.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
|
||||
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,170 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/label.php
|
||||
Desc. : PHP - Cetak Label Harga Barang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : September 13th, 2014.
|
||||
Last Modified : October 5th, 2025.
|
||||
|
||||
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Table;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", 0);
|
||||
$id_grup = Param::Get("Grup_InvID", 0);
|
||||
|
||||
if ( $data == "master" ) {
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if ($mode_detail == "empty") {
|
||||
$db->Query("TRUNCATE rep_label");
|
||||
} else if ($mode_detail == "update") {
|
||||
$db->Query("UPDATE rep_label SET Nama_Produk='".$db->SafeSQL(Param::Get("Nama_Produk"))."' WHERE ID='".Param::Get("ID",0)."'");
|
||||
} else if ($mode_detail == "delete") {
|
||||
$db->Query("DELETE FROM rep_label WHERE ID='".Param::Get("ID",0)."'");
|
||||
} else if ($mode_detail == "simpan-produk") {
|
||||
$alist = Param::Get_ArrayCBOX();
|
||||
foreach ($alist as $_key => $_val) {
|
||||
if ($_val=="Y") {
|
||||
$_adata = explode(":", $_key); $arec = [];
|
||||
$db->Query("SELECT LEFT(P.Nama_Produk,25) Nama_Produk,P.Harga_Jual FROM vi_inv_produk P WHERE P.InvID='".$_adata[0]."' AND P.SatuanID='".$_adata[1]."'");
|
||||
if ($db->Next()) $arec = $db->AllRow();
|
||||
if (count($arec) > 0) {
|
||||
$db->Query("INSERT INTO rep_label SET Nama_Produk='".$db->SafeSQL($arec['Nama_Produk'])."',Harga_Jual='".$arec['Harga_Jual']."',UserID='".user_id()."'");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ($mode_detail == "simpan-grup") {
|
||||
if ($id_grup > 0) {
|
||||
$db->Query("INSERT INTO rep_label SELECT NULL,LEFT(P.Nama_Produk,25),P.Harga_Jual,'".user_id()."' FROM vi_inv_produk P WHERE P.Aktif=1 AND P.Grup_InvID='".$id_grup."' AND P.Harga_Jual>0");
|
||||
}
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM rep_label");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("ID", "A");
|
||||
$obj->add_row_btn("clipboard", "Ubah", "RepoLabelJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "RepoLabelJS.detail_hapus", "UserID", user_id());
|
||||
$obj->set_func_btn("RepoLabelJS.produk_brow", '<i class="bi-plus-lg me-1"></i> Item');
|
||||
$obj->set_func_btn("RepoLabelJS.grup_brow", '<i class="bi-table me-1"></i> Grup');
|
||||
$obj->set_func_navi("RepoLabelJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*,CONCAT(P.InvID,':',P.SatuanID) ID2", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
|
||||
$obj->add_field("ID2", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "l");
|
||||
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_checkbox("ID2", "Pilih", ["Y","N"]);
|
||||
$obj->set_func_navi("RepoLabelJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk", 8);
|
||||
|
||||
} else if ( $data == "brow-grup" ) {
|
||||
$tcari = trim(Param::Get("Cari_Grup"));
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Grup,P.Nama_Grup) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("inv_produk_grup P", "P.*", "P.Aktif=1".$tsql);
|
||||
$obj->add_field("Grup_InvID", "ID", "hid");
|
||||
$obj->add_field("Kode_Grup", "Kode", "c");
|
||||
$obj->add_field("Nama_Grup", "Nama Grup Barang", "awr");
|
||||
$obj->set_field_order("Kode_Grup", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "RepoLabelJS.grup_select");
|
||||
$obj->set_func_navi("RepoLabelJS.data_query('brow-grup')");
|
||||
$ajson[] = $obj->db_table("divBrowGrup");
|
||||
|
||||
} else if ($data == "detail-tx") {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['ID'=>Param::Get("ID",0), 'Nama_Produk'=>""];
|
||||
$db->Query("SELECT * FROM rep_label WHERE ID='".$atabel['ID']."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
|
||||
|
||||
$form = new Form($db);
|
||||
$tproduk = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], true, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label>
|
||||
<div class="col">'.$tproduk.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
|
||||
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >';
|
||||
|
||||
} else if ( $data == "default") {
|
||||
echo '
|
||||
<div class="fade-in">
|
||||
<div class="card"><div class="card-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-printer me-2"></i>Cetak Label Harga</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butPreview" type="button"><i class="bi-display me-2"></i>Pratinjau</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content border border-top-0 p-3">
|
||||
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
$db->Query("SELECT * FROM rep_label ORDER BY ID");
|
||||
if ($db->RecordCount()==0) return false;
|
||||
|
||||
$_head = '<table width="100%"><tr>';
|
||||
$_line = '<td class="center" style="font-size:16pt;height:100px;width:65mm;padding:10px;border: dashed 1px #000;font-family:verdana;"><div style="font-size:18pt;height:50px;padding-bottom:10px;">%s</div>%s</td>';
|
||||
$ni = $nb = 1; $cont = "";
|
||||
while ($db->Next()) {
|
||||
if ($ni == 4) {
|
||||
if ($nb == 8) {
|
||||
$cont .= '</tr></table><p id="linebreak">................ page break ................</p><p id="pagebreak"> </p>' . $_head;
|
||||
$nb = 0;
|
||||
} else {
|
||||
$cont .= '</tr><tr>';
|
||||
}
|
||||
$ni = 1;
|
||||
$nb++;
|
||||
}
|
||||
$cont .= sprintf($_line, $db->Row("Nama_Produk"), "Rp. ".rupiah($db->Row("Harga_Jual")));
|
||||
$ni++;
|
||||
}
|
||||
if ($ni < 4) {
|
||||
while ($ni < 4) {
|
||||
$cont .= sprintf($_line, "", "");
|
||||
$ni++;
|
||||
}
|
||||
}
|
||||
echo '<p id="autopage"> </p>' . $_head . $cont . "</tr></table>";
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/repo/mutasi_cabang.php
|
||||
Desc. : PHP - Laporan Mutasi Stok Cabang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : July 16th, 2011.
|
||||
Last Modified : December 13th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\Web\Param;
|
||||
use siaupheng\fonia3\Web\Form;
|
||||
use siaupheng\fonia3\Data\SimpleXLS;
|
||||
|
||||
$db = $db ?? new MySQL();
|
||||
$ajson = [];
|
||||
$data = Param::Get("data");
|
||||
$id_cab1 = Param::Get("Cab1ID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$id_cab2 = Param::Get("Cab2ID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
|
||||
if (in_array($data, ["print","export"])) {
|
||||
$tipe = Param::Get("Tipe", "R"); // R or D
|
||||
$tglfrom = Param::Get("Tgl_From");
|
||||
$tglto = Param::Get("Tgl_To");
|
||||
|
||||
$nama_cab1 = "Semua Cabang"; $nama_cab2 = "Semua Cabang";
|
||||
if ($id_cab1>0) {
|
||||
$db->Query("SELECT Nama_Cab FROM para_cabang WHERE CabID='".$id_cab1."' LIMIT 1");
|
||||
if ($db->Next()) $nama_cab1 = $db->Row("Nama_Cab");
|
||||
}
|
||||
if ($id_cab2>0) {
|
||||
$db->Query("SELECT Nama_Cab FROM para_cabang WHERE CabID='".$id_cab2."' LIMIT 1");
|
||||
if ($db->Next()) $nama_cab2 = $db->Row("Nama_Cab");
|
||||
}
|
||||
|
||||
// generate report header
|
||||
$tglheader = $tglfrom;
|
||||
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
|
||||
$tglfrom = tgl_sql2str($tglfrom);
|
||||
$tglto = tgl_sql2str($tglto);
|
||||
|
||||
$tsql = ($id_cab1==0) ? "" : " AND Dari_CabID='".$id_cab1."'";
|
||||
$tsql .= ($id_cab2==0) ? "" : " AND Ke_CabID='".$id_cab2."'";
|
||||
|
||||
if ($tipe=="R") {
|
||||
$db->Query("SELECT M.*,C1.Nama_Cab Nama1,C2.Nama_Cab Nama2 FROM (SELECT * FROM inv_mutasi WHERE (Tgl_Mutasi BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") M LEFT JOIN para_cabang C1 ON (M.Dari_CabID=C1.CabID) LEFT JOIN para_cabang C2 ON (M.Ke_CabID=C2.CabID) ORDER BY M.Tgl_Mutasi,M.No_Mutasi");
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( $data == "print" ) {
|
||||
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." MUTASI STOK CABANG", "Periode : ".$tglheader);
|
||||
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
|
||||
|
||||
if ($tipe=="R") {
|
||||
$pre->add_field("Tgl. Mutasi",30,"C","sqltgl");
|
||||
$pre->add_field("No. Mutasi",30,"C");
|
||||
$pre->add_field("Dari Cabang",20,"L");
|
||||
$pre->add_field("Ke Cabang",20,"L");
|
||||
$pre->add_field("Total",20,"R","rupiah");
|
||||
$pre->add_field("Catatan",50,"L");
|
||||
|
||||
if ($id_cab1>0) $pre->add_span(array("Dari Cabang : ".$nama_cab1,6,"L,B"));
|
||||
if ($id_cab2>0) $pre->add_span(array("Ke Cabang : ".$nama_cab2,6,"L,B"));
|
||||
|
||||
$tot_mutasi = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_mutasi += $db->Row("Total_Mutasi");
|
||||
$pre->add_value($db->Row("Tgl_Mutasi"), $db->Row("No_Mutasi"), $db->Row("Nama1"), $db->Row("Nama2"), $db->Row("Total_Mutasi"), $db->Row("Catatan"));
|
||||
}
|
||||
$pre->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_mutasi,1,"R,B","rupiah"),["",1,"L,B"]);
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
$pre->add_stamp(1, true);
|
||||
$pre->show();
|
||||
|
||||
} else if ( $data == "export" ) {
|
||||
$xls = new SimpleXLS([
|
||||
'title'=>"Data Mutasi Stok Cabang",
|
||||
'desc'=>"Export Data Mutasi Stok Cabang"
|
||||
]);
|
||||
|
||||
if ($tipe=="R") {
|
||||
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
|
||||
$xls->add_header("<b>DATA REKAP MUTASI STOK CABANG</b>");
|
||||
$xls->add_header("Periode : ".$tglheader);
|
||||
|
||||
$xls->add_field("Tgl. Mutasi", 12, "C", "sqltgl");
|
||||
$xls->add_field("No. Mutasi", 15, "C");
|
||||
$xls->add_field("Dari Cabang", 20, "L");
|
||||
$xls->add_field("Ke Cabang", 20, "L");
|
||||
$xls->add_field("Total", 15, "R,N");
|
||||
$xls->add_field("Catatan", 25, "L");
|
||||
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
|
||||
|
||||
$tot_mutasi = 0;
|
||||
while ($db->Next()) {
|
||||
$tot_mutasi += $db->Row("Total_Mutasi");
|
||||
$xls->add_value($db->Row("Tgl_Mutasi"), $db->Row("No_Mutasi"), $db->Row("Nama1"), $db->Row("Nama2"), $db->Row("Total_Mutasi"), $db->Row("Catatan"));
|
||||
}
|
||||
$xls->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_mutasi,1,"R,B,N"),["",1,"L,B"]);
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
$xls->add_stamp(1, true);
|
||||
$xls->send("Data Mutasi Stok Cabang ".str_replace("S/D","-",$tglheader).".xlsx");
|
||||
unset($xls);
|
||||
|
||||
} else if ( $data == "default") {
|
||||
$form = new Form($db);
|
||||
$tcab1 = $form->option_db("_", "Cab1ID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tcab2 = $form->option_db("_", "Cab2ID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
|
||||
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
|
||||
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
|
||||
echo '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Cab1ID">Dari Cabang</label>
|
||||
<div class="col">'.$tcab1.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Cab2ID">Ke Cabang</label>
|
||||
<div class="col">'.$tcab2.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
|
||||
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user