first commit

This commit is contained in:
2026-01-22 11:06:19 +07:00
commit c877faf5a0
168 changed files with 19843 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
cache/
+22
View File
@@ -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.
+80
View File
@@ -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");
}
?>
+80
View File
@@ -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";
}
}
?>
+25
View File
@@ -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' => ""
];
?>
+88
View File
@@ -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">&nbsp;</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);
});
}
};
+107
View File
@@ -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();
}
}
};
+107
View File
@@ -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();
}
}
};
+82
View File
@@ -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();
}
}
};
+82
View File
@@ -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();
}
}
};
+112
View File
@@ -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); }
}
}
});
})
});
}
+448
View File
@@ -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">&nbsp;</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">&nbsp;</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">&nbsp;</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));
}
};
+174
View File
@@ -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">&nbsp;</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));
}
};
+165
View File
@@ -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">&nbsp;</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));
}
};
+290
View File
@@ -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">&nbsp;</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">&nbsp;</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));
}
};
+113
View File
@@ -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">&nbsp;</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();
}
};
+294
View File
@@ -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">&nbsp;</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">&nbsp;</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));
}
};
+286
View File
@@ -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">&nbsp;</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">&nbsp;</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();
}
};
+128
View File
@@ -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">&nbsp;</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();
}
};
+348
View File
@@ -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">&nbsp;</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">&nbsp;</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));
}
};
+525
View File
@@ -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">&nbsp;</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">&nbsp;</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">&nbsp;</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));
}
};
+84
View File
@@ -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();
}
};
+175
View File
@@ -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">&nbsp;</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);
}
}
};
+118
View File
@@ -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();
}
}
};
+187
View File
@@ -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">&nbsp;</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);
}
}
};
+118
View File
@@ -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">&nbsp;</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();
});
}
};
+48
View File
@@ -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();
}
};
+48
View File
@@ -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();
}
};
+44
View File
@@ -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();
}
};
+46
View File
@@ -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();
}
};
+63
View File
@@ -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();
}
};
+46
View File
@@ -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();
}
};
+46
View File
@@ -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();
}
};
+44
View File
@@ -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();
}
};
+50
View File
@@ -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();
}
};
+44
View File
@@ -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();
}
};
+46
View File
@@ -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();
}
};
+44
View File
@@ -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();
}
};
+44
View File
@@ -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();
}
};
+160
View File
@@ -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">&nbsp;</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">&nbsp;</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();
}
}
};
+44
View File
@@ -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();
}
};
+44
View File
@@ -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();
}
};
+42
View File
@@ -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();
}
};
+42
View File
@@ -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();
}
};
+42
View File
@@ -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();
}
};
+61
View File
@@ -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);
}
}
};
+100
View File
@@ -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">&nbsp;</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();
}
};
+80
View File
@@ -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;
}
}
};
+55
View File
@@ -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();
}
};
+59
View File
@@ -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);
}
}
};
+146
View File
@@ -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()
}
}
};
+189
View File
@@ -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(){
}
};
+75
View File
@@ -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">&nbsp;</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);
}
}
};
+49
View File
@@ -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();
}
}
};
+86
View File
@@ -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();
}
}
};
+86
View File
@@ -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();
}
}
};
+293
View File
@@ -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));
}
}
};
+106
View File
@@ -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();
}
}
};
+86
View File
@@ -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();
}
}
};
+86
View File
@@ -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();
}
}
};
+96
View File
@@ -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();
}
}
};
+86
View File
@@ -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();
}
}
};
+160
View File
@@ -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">&nbsp;</div><input type="hidden" id="REG_ID" value="'.$id_reg.'"></div></div>';
}
send_json($ajson);
?>
+167
View File
@@ -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">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+174
View File
@@ -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">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+601
View File
@@ -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>';
}
?>
+142
View File
@@ -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,"&nbsp;"]);
$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,"&nbsp;"]);
$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">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+142
View File
@@ -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,"&nbsp;"]);
$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,"&nbsp;"]);
$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">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+126
View File
@@ -0,0 +1,126 @@
<?php
/*******************************************************************
Module : /apps/php/index.php
Desc. : PHP - Halaman Utama Desktop
Created By : Siau Pheng (siaupheng@3fonia.com).
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);
?>
+499
View File
@@ -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 (siaupheng@3fonia.com).
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,"&nbsp;"]);
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"&nbsp;"]);
$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">&nbsp;</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">&nbsp;</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">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+253
View File
@@ -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 (siaupheng@3fonia.com).
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">&nbsp;</div>
<div id="divTXNota">&nbsp;</div>
<div id="divDetailNota" class="d-none">&nbsp;</div>
<div id="divDetailBayar" class="d-none">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+208
View File
@@ -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 (siaupheng@3fonia.com).
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">&nbsp;</div>
<div id="divTXNota">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+316
View File
@@ -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 (siaupheng@3fonia.com).
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,"&nbsp;"]);
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"&nbsp;"]);
$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">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+140
View File
@@ -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 (siaupheng@3fonia.com).
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);
?>
+307
View File
@@ -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 (siaupheng@3fonia.com).
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,"&nbsp;"]);
$tcab2 = $form->option_db("_", "Ke_CabID", $atabel['Ke_CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"&nbsp;"]);
$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">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+304
View File
@@ -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 (siaupheng@3fonia.com).
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,"&nbsp;"]);
$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">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+171
View File
@@ -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 (siaupheng@3fonia.com).
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);
?>
+339
View File
@@ -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 (siaupheng@3fonia.com).
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,"&nbsp;"]);
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"&nbsp;"], 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">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+552
View File
@@ -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 (siaupheng@3fonia.com).
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,"&nbsp;"]);
$tsat = $form->option_db("_", "StokID", 0, true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$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">&thickapprox;</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">&nbsp;</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">&nbsp;</div>
</div>
<div class="col-sm-12 col-md-3 col-lg-2 border-start">
<div id="divPOS2">&nbsp;</div>
</div>
</div>
</div></div></div>';
}
send_json($ajson);
?>
+85
View File
@@ -0,0 +1,85 @@
<?php
/*******************************************************************
Module : /apps/php/login.php
Desc. : PHP - Halaman Proses Login
Created By : Siau Pheng (siaupheng@3fonia.com).
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);
?>
+85
View File
@@ -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 (siaupheng@3fonia.com).
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, "&nbsp;", "&nbsp;", "&nbsp;", "&nbsp;");
}
}
$body .= sprintf($t_foot);
$body .= '<table class="akhir"><tr><td>Penerima,</td><td>Hormat Kami,</td></tr><tr><td><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>Tanda Tangan & Cap Perusahaan</td><td class="r">&nbsp;</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") {}
?>
+203
View File
@@ -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 (siaupheng@3fonia.com).
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">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+152
View File
@@ -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 (siaupheng@3fonia.com).
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">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+200
View File
@@ -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 (siaupheng@3fonia.com).
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">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+159
View File
@@ -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 (siaupheng@3fonia.com).
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);
?>
+205
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+231
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+137
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+174
View File
@@ -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 (siaupheng@3fonia.com).
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"),["&nbsp;",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"),["&nbsp;",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>';
}
?>
+229
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+183
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+156
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+167
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+269
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+215
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+143
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+149
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+149
View File
@@ -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 (siaupheng@3fonia.com).
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>';
}
?>
+170
View File
@@ -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 (siaupheng@3fonia.com).
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">&nbsp;</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">&nbsp;</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">&nbsp;</p>' . $_head . $cont . "</tr></table>";
}
send_json($ajson);
?>
+147
View File
@@ -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 (siaupheng@3fonia.com).
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