Files
robinson/apps/php/index.php
T
2026-01-22 11:06:19 +07:00

127 lines
5.4 KiB
PHP

<?php
/*******************************************************************
Module : /apps/php/index.php
Desc. : PHP - Halaman Utama Desktop
Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010.
Last Modified : December 14th, 2025.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Register;
function random_color($trans = "0.6") {
$col_r = mt_rand( 0, 255 );
$col_g = mt_rand( 0, 255 );
$col_b = mt_rand( 0, 255 );
return "rgba(".$col_r.",".$col_g.",".$col_b.",".$trans.")";
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "chart-sale" ) {
$ajson['tipe'] = "chart";
$adata['datasets'] = [['data'=>[], 'label'=>"Penjualan", 'borderColor'=>[], 'backgroundColor'=>[]]];
$adata['labels'] = ["Belum Ada Penjualan"];
$db->Query("SELECT P.Nama_Produk,D.Qty FROM (SELECT InvID,SUM(-Qty) Qty FROM inv_detail WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND NotaID=5 AND InvID>1 AND Tgl_Ref>='".tgl_sql2str(tgl_operasi(tgl_dmy(),-7))."' GROUP BY InvID ORDER BY SUM(-Qty) DESC LIMIT 10) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID)");
if ($db->RecordCount()>0) {
$adata['labels'] = [];
}
while ($db->Next()) {
$adata['labels'][] = $db->Row("Nama_Produk");
$adata['datasets'][0]['data'][] = $db->RowFloat("Qty");
$adata['datasets'][0]['borderColor'][] = random_color();
$adata['datasets'][0]['backgroundColor'][] = random_color();
}
$ajson['chart'] = ['type' => "bar",
'data' => $adata,
'options' => [
'responsive' => true,
'maintainAspectRatio' => false,
'plugins' => [
'legend' => ['display' => false],
'title' => ['display' => true, 'font' => ['size' => 20, 'weight' => 'normal'], 'text' => '10 Barang Terlaris'],
'subtitle' => ['display' => true, 'position' => "top", 'text' => '(dalam sepekan terakhir)']
],
'scales' => ['y' => ['beginAtZero' => true, 'title' => ['display' => true, 'font' => ['size' => 14], 'text' => "Qty Penjualan"]], 'x' => ['display' => false]],
'layout' => ['padding' => ['top' => 10]]
]
];
} else if ( $data == "chart-omzet" ) {
$ajson['tipe'] = "chart";
$adata['datasets'] = [['data'=>[], 'label'=>"Jumlah (JT)", 'borderColor'=>random_color(), 'backgroundColor'=>random_color(), 'pointStyle'=>'circle', 'pointRadius'=>10, 'pointHoverRadius'=>15]];
$adata['labels'] = ["Belum Ada Penjualan"];
$db->Query("SELECT Tgl_Jual,DAY(Tgl_Jual) Tgl,SUM(Total_Jual) Total FROM inv_jual WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND Tgl_Jual<='".tgl_ymd()."' GROUP BY Tgl_Jual ORDER BY Tgl_Jual DESC LIMIT 10");
if ($db->RecordCount()>0) {
$adata['labels'] = [];
}
while ($db->Next()) {
$adata['labels'][] = substr(tgl_hari(tgl_sql2str($db->Row("Tgl_Jual"))),0,3) ." (". $db->Row("Tgl") . ")";
$adata['datasets'][0]['data'][] = round($db->RowFloat("Total")/1000000,2);
}
$ajson['chart'] = ['type' => "line",
'data' => $adata,
'options' => [
'responsive' => true,
'maintainAspectRatio' => false,
'plugins' => [
'legend' => ['display' => false],
'title' => ['display' => true, 'font' => ['size' => 20, 'weight' => 'normal'], 'text' => 'Penjualan 10 Hari Terakhir'],
'subtitle' => ['display' => true, 'position' => "top", 'text' => '(dalam jutaan)']
],
'scales' => ['y' => ['min' => 0, 'ticks' => ['stepSize' => 0.1], 'title' => ['display' => true, 'font' => ['size' => 14], 'text' => "Jumlah Penjualan"]]],
'layout' => ['padding' => ['top' => 10]]
]
];
} else if ( $data == "tabel-stok" ) {
$ajson['tipe'] = "tabel";
$ajson['html'] = '<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline"><thead><tr><th class="c">SKU</th><th class="l">Nama Barang</th><th class="r">Stok</th></tr></thead><tbody>';
$db->Query("SELECT S.*,P.Kode_SKU,P.Nama_Produk FROM (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' GROUP BY InvID) S LEFT JOIN vi_inv_produk P ON (P.InvID=S.InvID AND P.Qty=1) WHERE P.Kode_SKU IS NOT NULL ORDER BY S.Stok LIMIT 20");
while ($db->Next()) {
$ajson['html'] .= sprintf('<tr><td class="c">%s</td><td class="l">%s</td><td class="r">%s</td></tr>', $db->Row("Kode_SKU"), $db->Row("Nama_Produk"), rupiah($db->Row("Stok",0)));
}
$ajson['html'] .= '</tbody></table>';
} else if ( $data == "default" ) {
$ajson['content'] = '
<div class="card">
<div class="card-body" style="height:500px;">
<div class="row h-100">
<div class="col">
<div class="h-50">
<canvas id="ChartA"></canvas>
</div>
<div class="h-50">
<canvas id="ChartB"></canvas>
</div>
</div>
<div class="col h-100 overflow-scroll">
<div id="tabelStok"></div>
</div>
</div>
</div>
</div>
';
}
send_json($ajson);
?>