Files
2026-01-22 15:30:17 +07:00

155 lines
5.9 KiB
PHP

<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_do.php
Desc. : PHP - Rekap Penjualan Produk Per-DO
Created By : Siau Pheng ([email protected]).
Created Date : January 25th, 2024.
(c) 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$ahasil = []; $aprod = [];
$db->Query("SELECT A.No_DO,A.Tgl_DO,D.InvID,SUM(D.Stok) Stok FROM (SELECT * FROM inv_jual_do WHERE Tgl_DO BETWEEN '".$tglfrom."' AND '".$tglto."') A LEFT JOIN (SELECT No_DO,No_Jual FROM inv_jual WHERE No_DO IN (SELECT No_DO FROM inv_jual_do WHERE Tgl_DO BETWEEN '".$tglfrom."' AND '".$tglto."')) J ON (J.No_DO=A.No_DO) LEFT JOIN (SELECT No_Ref,InvID,SUM(-Stok) Stok FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_DO IN (SELECT No_DO FROM inv_jual_do WHERE Tgl_DO BETWEEN '".$tglfrom."' AND '".$tglto."') AND InvID NOT IN (SELECT InvID FROM inv_produk WHERE Grup_InvID IN (".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN'].",".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."))) GROUP BY No_Ref,InvID) D ON (D.No_Ref=J.No_Jual) GROUP BY A.No_DO,D.InvID ORDER BY A.No_DO");
while ($db->Next()) {
if (!$ahasil[$db->Row("No_DO")]) {
$ahasil[$db->Row("No_DO")]['No_DO'] = $db->Row("No_DO");
$ahasil[$db->Row("No_DO")]['Tgl_DO'] = tgl_sql2str($db->Row("Tgl_DO"));
}
$ahasil[$db->Row("No_DO")][$db->Row("InvID")] += $db->RowFloat("Stok", 0);
$aprod[$db->Row("InvID")] += $db->RowFloat("Stok", 0);
}
$aproduk = [];
$db->Query("SELECT A.InvID,A.Kode_Produk,IFNULL(B.Qty,0) Qty FROM (SELECT * FROM inv_produk) A LEFT JOIN (SELECT * FROM inv_produk_kemasan WHERE SatuanID=2) B ON (B.InvID=A.InvID)");
while ($db->Next()) {
$aproduk[$db->Row("InvID")] = ['kode' => $db->Row("Kode_Produk"), 'kali' => $db->RowFloat("Qty", 0)];
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAP DELIVERY ORDER", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
$pre->add_field("No DO",50,"C");
$pre->add_field("Tgl DO",30, "C");
foreach ($aprod as $_key => $_val) {
if ($_key == "") continue;
$pre->add_field($aproduk[$_key]['kode'],50,"R","rupiah2");
}
$pre->add_field("TOTAL",50,"R","rupiah2");
$pre->show_fields();
foreach ($ahasil as $_key => $_val) {
$_tot = 0;
$_atmp = [$_val['No_DO'], $_val['Tgl_DO']];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val[$_key2] / $aproduk[$_key2]['kali']);
$_tot += $_val[$_key2] / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$pre->add_value($_atmp);
}
$_tot = 0;
$_atmp = ["TOTAL", ""];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val2 / $aproduk[$_key2]['kali']);
$_tot += $_val2 / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$pre->add_value($_atmp);
$pre->add_stamp(0, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Penjualan ".ucfirst($sjudul)."",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN REKAP DELIVERY ORDER</b>");
$xls->add_header($tglheader);
$xls->add_field("No DO", 20, "C");
$xls->add_field("Tgl DO", 15, "C");
foreach ($aprod as $_key => $_val) {
if ($_key == "") continue;
$xls->add_field($aproduk[$_key]['kode'],12,"R,N");
}
$xls->add_field("TOTAL",12,"R,N");
$xls->add_sheet("REKAP DO", false);
$xls->show_headers();
foreach ($ahasil as $_key => $_val) {
$_tot = 0;
$_atmp = [$_val['No_DO'], $_val['Tgl_DO']];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val[$_key2] / $aproduk[$_key2]['kali']);
$_tot += $_val[$_key2] / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$xls->add_value($_atmp);
}
$_tot = 0;
$_atmp = ["TOTAL", ""];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val2 / $aproduk[$_key2]['kali']);
$_tot += $_val2 / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$xls->add_value($_atmp);
$xls->add_stamp(1, true);
$xls->send("Laporan Rekap Delivery Order.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>