127 lines
5.4 KiB
PHP
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 * FROM inv_stok WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."') 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);
|
|
?>
|