Files

601 lines
30 KiB
PHP

<?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 : February 27th, 2026.
(c) 2012 - 2026, 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("UPDATE inv_produk_sup SET Aktif=0 WHERE InvID='".$fdb->Row("InvID")."'");
$tdb->Query("INSERT IGNORE INTO inv_produk_sup (InvID,SupID,Aktif) VALUES('".$fdb->Row("InvID")."','".$supid."',1)");
}
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."' ORDER BY PromoID DESC LIMIT 1");
}
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."' ORDER BY PromoID DESC LIMIT 1");
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()."') ORDER BY PromoID DESC");
if ($fdb->RecordCount()==0) return false;
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
$aitem_promo = [];
foreach($apromo as $_key => $val) {
if (in_array($val['InvID'].":".$val['SatuanID'], $aitem_promo)) continue;
$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();
if ($val['Tipe_Promo']==1) {//1 potongan diskon
$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']);
$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
$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()) {
$aitem['InvID'] = $val['Promo_InvID'];
$aitem['SatuanID'] = $val['Promo_SatuanID'];
$aitem['Qty'] = $qty_promo * -1;
$aitem['Stok'] = $qty_promo * $fdb->Row("Qty", 1) * -1;
$aitem['Harga_Beli'] = $fdb->Row("Harga_Pokok", 0);
$aitem['Harga_Jual'] = $fdb->Row("Harga_Jual", 0);
$aitem['Disk_Rupiah'] = $aitem['Harga_Jual'];
$aitem['Total_Diskon'] = $qty_promo * $aitem['Harga_Jual'];
$aitem['Promo'] = 2;
unset($aitem['ID']);
fastInsert("tmp_inv_detail", $aitem);
}
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses+".$qty_promo." WHERE PromoID='".$val['PromoID']."'");
}
}
$aitem_promo[] = $val['InvID'].":".$val['SatuanID'];
}
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)) ORDER BY PromoID DESC");
if ($fdb->RecordCount()>0) {
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
$aitem_promo = [];
foreach($apromo as $_key => $val) {
if (in_array($val['InvID'].":".$val['SatuanID'], $aitem_promo)) continue;
$adetail = [];
$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();
$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']);
$qty_promo = ($qty_promo<=$val['Jumlah_Sisa']) ? $qty_promo : $val['Jumlah_Sisa'];
}
$tot_promo += ($bpromo == true) ? ($qty_promo * $val['Promo_Disc']) : 0;
$aitem_promo[] = $val['InvID'].":".$val['SatuanID'];
}
}
$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();
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>';
}
?>