first commit

This commit is contained in:
2026-01-22 13:38:42 +07:00
commit ab311c5c95
91 changed files with 8064 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
<?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"
];
}
?>
+127
View File
@@ -0,0 +1,127 @@
/*******************************************************************
Module : /assets/js/display.js
Desc. : JS - Halaman Utama Display
Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010.
Last Modified : January 2nd, 2026.
(c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
$(document).ready(function(){
jQuery('#preloader').remove();
DispJS.loading();
});
var DispJS = {
PHP: FoniaJS.WEB_PATH+'apps/php/display.php',
DEF_PROMO_DUR: 10,
DEF_THANK_TIME: 1,
DEF_IDLE_TIME: 5,
IDLE_TIME: 0,
ISSHOW_POS: false,
ISSHOW_THANK: false,
loading: function(){
new Request.JSON({
url: this.PHP,
sendParam: ['data=default'],
onSuccess: function(ares){
$('#pageContent').html(ares.html);
this.data_query('config');
this.data_query('info-promo');
this.data_query('info-iklan');
this.hide_pos();
this.hide_thank();
setInterval(function(){
if (DispJS.IDLE_TIME >= DispJS.DEF_THANK_TIME || DispJS.IDLE_TIME >= DispJS.DEF_IDLE_TIME) {
if (DispJS.ISSHOW_POS) { DispJS.hide_pos(); DispJS.ISSHOW_POS = false }
if (DispJS.IDLE_TIME < DispJS.DEF_IDLE_TIME) {
if (DispJS.ISSHOW_THANK) { DispJS.show_thank(); }
} else {
if (DispJS.ISSHOW_THANK) { DispJS.data_query('close-thank'); }
}
DispJS.data_query('count-delay');
} else {
if (DispJS.ISSHOW_THANK) { DispJS.data_query('close-thank'); }
if (!DispJS.ISSHOW_POS) { DispJS.show_pos(); DispJS.ISSHOW_POS = true }
if ($('#divShop').length) DispJS.data_query('info-shop');
}
}, 1000);
}.bind(this)
}).send();
},
hide_pos: function(){
$('#divBanner').removeClass('d-none');
$('#divShop').addClass('d-none');
},
show_pos: function(){
$('#divBanner').addClass('d-none');
$('#divShop').removeClass('d-none');
this.data_query('shop');
},
hide_thank: function(){
$('#divBlur').addClass('d-none');
$('#divThank').addClass('d-none');
},
show_thank: function(){
$('#divBlur').removeClass('d-none');
$('#divThank').removeClass('d-none');
this.data_query('thank');
},
data_query: function(tipe){
if (tipe=='config'){
$.post(this.PHP, {data:'config'}, function(ajson){
if (ajson.PROMO_DURASI) DispJS.DEF_PROMO_DUR = ajson.PROMO_DURASI;
if (ajson.PROMO_IDLE) DispJS.DEF_IDLE_TIME = ajson.PROMO_IDLE;
if (ajson.BANNER_TEXT) $('#divBanner').html(ajson.BANNER_TEXT);
}, 'json');
} else if (tipe=='info-iklan'){
$.post(this.PHP, {data:'info-iklan'}, function(data){
$('#divIklan').html(data);
const car_iklan = new bootstrap.Carousel('#divIklan', {
interval: DispJS.DEF_PROMO_DUR
});
});
} else if (tipe=='info-promo'){
$.post(this.PHP, {data:'info-promo'}, function(data){
$('#divPromo').html(data);
const car_iklan = new bootstrap.Carousel('#divPromo', {
interval: DispJS.DEF_PROMO_DUR
});
});
} else if (tipe=='count-delay'){
$.post(this.PHP, {data:'count-delay'}, function(ajson){
if (parseInt(ajson.total)==0) this.IDLE_TIME++; else this.IDLE_TIME = 0;
this.ISSHOW_THANK = (parseInt(ajson.thank)==1) ? true : false;
}.bind(this), 'json');
} else if (tipe=='shop'){
$.post(this.PHP, {data:'shop'}, function(data){
$('#divShop').html(data);
});
} else if (tipe=='thank'){
$.post(this.PHP, {data:'thank'}, function(data){
$('#divThank').html(data);
});
} else if (tipe=='close-thank'){
$.post(this.PHP, {data:'close-thank'}, function(){
this.ISSHOW_THANK = false;
this.hide_thank();
}.bind(this));
} else if (tipe=='info-shop'){
$.post(this.PHP, {data:'info-shop'}, function(ajson){
$('#Total_Harga').html(ajson.Total_Harga);
$('#Info_Qty').html(ajson.Info_Qty);
$('#Info_Barang').html(ajson.Info_Barang);
if (parseFloat($('#Total_Harga').html())==0) this.IDLE_TIME++; else this.IDLE_TIME = 0;
}.bind(this), 'json');
}
}
};
+156
View File
@@ -0,0 +1,156 @@
<?php
/*******************************************************************
Module : /apps/php/display.php
Desc. : PHP - Halaman Utama Display
Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010.
Last Modified : January 2nd, 2026.
(c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../../../apps/cfg/mysql.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_reg = $_SESSION['__WEB_APP']['APP_DISPLAY'];
if ( in_array($data, ["info-shop","count-delay","close-thank","thank"]) ) {
$app_disp = [];
$db->Query("SELECT * FROM disp_login WHERE IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."' ORDER BY Date DESC LIMIT 1");
if ($db->Next()) $app_disp = $db->AllRow();
}
if ( $data == "config" ) {
$ainfo = [];
$db->Query("SELECT * FROM disp_config WHERE REG_ID='".$id_reg."' LIMIT 1");
if ($db->Next()) $ainfo = $db->AllRow();
$ajson['BANNER_TEXT'] = '<div class="marquee-content" style="color:'.$ainfo['Warna'].';font-size:'.$ainfo['Font'].'pt;">'.$ainfo['Text_Run'].'</div>';
$ajson['PROMO_IDLE'] = $ainfo['Promo_Idle'];
$ajson['PROMO_DURASI'] = (int)$ainfo['Promo_Durasi'] * 1000;
} else if ( $data == "info-iklan" ) {
$info_iklan = '<div class="carousel-inner">'; $iklan = 0;
$db->Query("SELECT * FROM disp_promo WHERE Aktif=1 AND Tipe=2 AND CabID IN (0,".$_SESSION['__APP_INV']['CABANGID'].") AND Image IS NOT NULL ORDER BY Tanggal");
while ($db->Next()){
$info_iklan .= '<div class="carousel-item'.($iklan==0?' active':'').'"><img src="data:'.$db->Row("Mime").';base64,'.base64_encode($db->Row("Image")).'" class="m-auto d-block"></div>';
$iklan++;
}
if ($iklan == 0) $info_iklan .= '<div class="carousel-item active"><img src="'.$_SESSION['__WEB_APP']['WEB_PATH'].'/assets/images/logo600.png" class="m-auto d-block"></div>';
$info_iklan .= '</div>';
echo $info_iklan;
} else if ( $data == "info-promo" ) {
$info_promo = '<div class="carousel-inner">'; $promo = 0;
$db->Query("SELECT * FROM disp_promo WHERE Aktif=1 AND Tipe=1 AND CabID IN (0,".$_SESSION['__APP_INV']['CABANGID'].") ORDER BY Tanggal, PromoID");
while ($db->Next()){
$_text = str_replace(["[br]","[i]","[/i]","[b]","[/b]"], ["<br/>","<i>","</i>","<b>","</b>"], $db->Row("Info"));
$_text = '<span style="color:'.$db->Row("Warna").';font-size:'.$db->Row("Font").'pt;">' . $_text . '</span>';
if ($db->Row("Image","")<>"") {
$_text = '<div class="row h-100 align-items-center"><div class="col-2 text-center"><img src="data:'.$db->Row("Mime").';base64,'.base64_encode($db->Row("Image")).'" class="pt-2"></div><div class="col-10">' . $_text ."</div></div>";
}
$info_promo .= '<div class="carousel-item'.($promo==0?' active':'').'">'.$_text."</div>";
$promo++;
}
echo $info_promo."</div>";
} else if ( $data == "count-delay" ) {
$ajson = ['total' => 0, 'thank' => 0];
$db->Query("SELECT SUM(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total FROM tmp_inv_detail D WHERE D.No_Ref='".$app_disp['No_Pos']."' AND D.Unix='".$app_disp['Unix']."'");
if ($db->Next()) $ajson['total'] = $db->RowFloat("Total", 0);
$db->Query("SELECT IF(No_Cetak='',0,1) Ada FROM disp_login WHERE UserID='".$app_disp['UserID']."' AND Unix='".$app_disp['Unix']."'");
if ($db->Next()) $ajson['thank'] = $db->RowFloat("Ada", 0);
} else if ( $data == "shop" ) {
echo '
<div class="row g-0 my-2">
<div class="col-7 pe-3 text-end" id="Info_Barang">
</div>
<div class="col-5 pe-2">
<div class="border border-success border-opacity-75 rounded rounded-4 bg-warning bg-gradient" style="--bs-bg-opacity:.75;">
<div class="row pe-2">
<div class="col-4 text-end fs-3" id="Info_Qty"></div>
<div class="col-8 text-end display-1 fw-light border-light border-start" id="Total_Harga">0</div>
</div>
</div>
</div>
</div>';
} else if ( $data == "info-shop" ) {
$ashop = ['Total'=>0, 'Item'=>0, 'Qty'=>0];
$db->Query("SELECT SUM(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total,COUNT(*) Item, SUM(-D.Qty) Qty FROM tmp_inv_detail D WHERE D.No_Ref='".$app_disp['No_Pos']."' AND D.Unix='".$app_disp['Unix']."'");
if ($db->Next()) $ashop = $db->AllRow();
$info_barang = '<img src="'.$aapp['WEB_PATH'].'assets/images/logo60.png">';
if ($ashop['Item'] > 0) {
$db->Query("SELECT * FROM (SELECT -D.Qty Qty2,D.Harga_Jual,P.Nama_Lengkap FROM tmp_inv_detail D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) WHERE D.No_Ref='".$app_disp['No_Pos']."' AND D.Unix='".$app_disp['Unix']."' AND D.Promo<2 ORDER BY D.ID DESC LIMIT 1) A");
if ($db->Next()) {
$info_barang = '<span class="display-4 fw-light">'.$db->Row("Nama_Lengkap").'</span><br><span class="fs-4">Qty : '.rupiah($db->Row("Qty2")).' / Rp. '.rupiah($db->Row("Harga_Jual")).'</span>';
}
}
$ajson['Info_Barang'] = $info_barang;
$ajson['Total_Harga'] = rupiah($ashop['Total']);
$ajson['Info_Qty'] = rupiah($ashop['Item'])." Items<br>".rupiah($ashop['Qty'])." Qty";
} else if ( $data == "close-thank" ) {
$db->Query("UPDATE disp_login SET No_Cetak='' WHERE UserID='".$app_disp['UserID']."' AND Unix='".$app_disp['Unix']."'");
} else if ( $data == "thank" ) {
$db->Query("SELECT J.*,(J.Total_Bayar-J.Total_Jual+J.Total_Diskon+J.Total_Potong) Total_Sisa,UCASE(LEFT(B.Nama_Kartu,23)) Kode_Kartu2,UCASE(J.Nama_Kartu) Nama_Kartu2,RIGHT(J.No_Kartu,4) No_Kartu2 FROM inv_jual J LEFT JOIN para_rek_pos B ON (J.KartuID=B.KartuID) WHERE J.No_Jual='".$app_disp['No_Cetak']."'");
if ($db->Next()) $anota = $db->AllRow();
$nhemat = $anota['Total_Diskon'] + $anota['Total_Potong'];
echo '
<div class="row">
<div class="col-6 text-center">
<img class="img-fluid mt-5" src="'.$aapp['WEB_PATH'].'assets/images/logo300.png" alt="'.$aapp['REG_NAME'].'">
</div>
<div class="col-6 fs-2 text-center">
';
echo 'Jumlah Belanja Anda Rp. '.rupiah($anota['Total_Jual']-$anota['Total_Diskon']).'<br>';
if ($anota['Total_Diskon']>0) echo '<i>Anda Mendapatkan Diskon Rp. '.rupiah($anota['Total_Diskon']).'</i><br>';
if ($anota['Total_Potong']>0) echo '<i>Anda Mendapatkan Potongan Promo Rp. '.rupiah($anota['Total_Potong']).'</i><br>';
echo 'Jumlah Pembayaran Anda Rp. '.rupiah($anota['Total_Bayar']).'<br><br>';
if ($anota['KartuID']==0) {
echo '<span style="font-size:23pt;color:red;">Sisa Pembayaran Rp. '.rupiah($anota['Total_Sisa']).'</span><br>';
} else {
echo '<b>Anda Melakukan Pembayaran Dengan : <br>'.$anota['Kode_Kartu2']." - ".$anota['No_Kartu2'].'</b><br>';
}
if ($nhemat>0) echo '<span style="font-size:18pt;color:orange;"><i>Anda Mendapatkan Penghematan Sebesar Rp. '.rupiah($nhemat).'</span></i><br>';
echo '<br>Terima Kasih Telah Berbelanja di Toko Kami<br>Selamat Berbelanja Kembali :)';
echo '</div></div>';
} else if ( $data == "default" ) {
$ajson['html'] = '
<div class="disp-atas overflow-hidden fixed-top">
<div class="marquee-container overflow-hidden bg-light shadow-sm" id="divBanner"></div>
<div id="divShop">&nbsp;</div>
</div>
<div class="disp-tengah overflow-hidden">
<div id="divBlur" class="bg-white bg-opacity-75 d-none">&nbsp;</div>
<div id="divIklan" class="carousel slide" data-bs-ride="carousel">&nbsp;</div>
<div id="divThank">&nbsp;</div>
</div>
<div class="disp-bawah overflow-hidden fixed-bottom border-top border-warning">
<div id="divPromo" class="carousel slide carousel-fade" data-bs-ride="carousel">&nbsp;</div>
</div>';
}
send_json($ajson);
?>
+78
View File
@@ -0,0 +1,78 @@
/*******************************************************************
Module : /assets/css/styles.css
Desc. : CSS Fonts for Display
Created By : Siau Pheng ([email protected]).
Created Date : December 20th, 2007.
Last Modified : January 2nd, 2026.
(c) 2007 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
.disp-atas {
height: 120px;
}
.disp-tengah {
padding-top: 120px;
height: 100%;
max-height: calc(100vh - 180px);
}
.disp-bawah {
height: 180px;
}
/****** TOP BANNER ******/
.marquee-container {
width: 100%;
height: 100%;
}
.marquee-content {
white-space: nowrap;
animation: marquee 20s linear infinite;
}
@keyframes marquee {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
.marquee-container:hover .marquee-content {
animation-play-state: paused;
}
/****** MIDDLE IKLAN ******/
#divIklan {
z-index: 20;
}
#divIklan img {
max-height: calc(100vh - 300px);
}
/****** MIDDLE THANK YOU ******/
#divThank {
width: 100%;
height: calc(100vh - 300px);
position: absolute;
top: 120px;
z-index: 50;
}
#divBlur {
width: 100%;
height: calc(100vh - 300px);
position: absolute;
top: 120px;
z-index: 30;
}
/****** BOTTOM PROMO ******/
#divPromo img {
max-height: 160px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

+32
View File
@@ -0,0 +1,32 @@
/*******************************************************************
Module : /assets/locale/fonia.id.js
Desc. : JS - Fonia Module Locale
Created By : Siau Pheng ([email protected]).
Created Date : January 28th, 2013.
Last Modofied : November 22nd, 2019
(c) 2013 - 2019, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
if (typeof FoniaJS !== "undefined") {
FoniaJS.locale('id', {
Fonia: {
sess_expire: 'Session Anda telah berakhir, silakan login kembali!',
page404: 'Halaman aplikasi belum tersedia!',
input_passwd: 'Silakan masukkan Password!',
input_userid: 'Silakan masukkan User ID!',
auth_super: 'Persetujuan Supervisor',
auth_user: 'Validasi Operator',
auth_wait_msg: 'Menunggu disetujui oleh<br>Supervisor Anda...',
cancel: 'Batal',
auth_fail: 'Proses gagal!<br>Menunggu terlalu lama ...',
auth_success: 'Proses disetujui!',
but_add: 'Tambah',
but_edit: 'Ubah'
}
});
}
+36
View File
@@ -0,0 +1,36 @@
<!------------------------------------------------------------------
Module : /assets/templates/index.php
Desc. : HTML Page - Halaman Template Display
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : October 10th, 2008.
Last Modified : January 1st, 2026.
(c) 2008 - 2026, 3FONIA Software; WWW.3FONIA.COM.
------------------------------------------------------------------->
<!DOCTYPE html>
<html lang="en">
<head>
<title>[_APP_NAME_VER_]</title>
<meta charset="utf-8">
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache,no-store" />
<meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="PhpED + FW9 @ 3FONIA Software"/>
<meta name="author" content="Siau Pheng &lt;siaupheng[at]3fonia.com&gt;"/>
<meta name="description" content="[_APP_NAME_VER_], [_APP_NAMES_]" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<link rel="icon" href="[_WEB_PATH_]assets/images/logo200.png" type="image/png" />
<link rel="shortcut icon" href="[_WEB_PATH_]assets/images/logo200.png" type="image/png" />
</head>
<body>
<div class="d-flex flex-column min-vh-100">
<div class="body flex-grow-1" id="pageContent">
</div>
</div>
<div id="preloader"><div id="loader"></div></div>
</body>
</html>
+15
View File
@@ -0,0 +1,15 @@
[css]
login_stamp = "0"
login_file =
index_stamp = "22790960509"
index_file = "91828de68cc2d8c549ba0a5cb72bb886.css"
display_stamp = "0"
display_file =
[js]
login_stamp = "0"
login_file =
index_stamp = "48658709282"
index_file = "6b29fb63d529966b303feb3b43b6bb81.js"
display_stamp = "0"
display_file =
+28
View File
@@ -0,0 +1,28 @@
<?php
/*******************************************************************
Module : /index.php
Desc. : PHP Page - Halaman Utama Sub Aplikasi Display
Created By : Siau Pheng ([email protected]).
Created Date : May 28th, 2011.
Last Modified : January 1st, 2026.
(c) 2011 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../vendor/autoload.php");
require_once(__DIR__."/apps/cfg/app.php");
use siaupheng\fonia3\Display;
use siaupheng\fonia3\DB\MySQL;
$db = $db ?? new MySQL();
require_once(__DIR__."/apps/cfg/assets.php");
$html = new Display($db);
$html->TampilDisplay();
?>