602 lines
30 KiB
PHP
602 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 : January 16th, 2019.
|
|
|
|
(c) 2012 - 2019, 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("INSERT IGNORE INTO inv_produk_sup SET InvID='".$fdb->Row("InvID")."',SupID='".$supid."',Aktif=1");
|
|
$tdb->Query("UPDATE inv_produk_sup SET Aktif=0 WHERE InvID='".$fdb->Row("InvID")."' AND SupID<>'".$supid."'");
|
|
}
|
|
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."'");
|
|
}
|
|
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."'");
|
|
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()."')");
|
|
if ($fdb->RecordCount()==0) return false;
|
|
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
|
|
|
|
foreach($apromo as $_key => $val) {
|
|
if ($val['Tipe_Promo']==1) {//1 potongan diskon
|
|
$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();
|
|
|
|
$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']) * $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
|
|
$adetail = []; $adisc = [];
|
|
$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()) $adisc = $fdb->AllRow();
|
|
|
|
$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()) {
|
|
$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'] = $adisc['Harga_Jual'];
|
|
$adisc['Total_Diskon'] = $qty_promo * $adisc['Harga_Jual'];
|
|
$adisc['Promo'] = 2;
|
|
unset($adisc['ID']);
|
|
fastInsert("tmp_inv_detail", $adisc);
|
|
}
|
|
$tdb->Query("UPDATE inv_promo SET Jumlah_Proses=Jumlah_Proses+".$qty_promo." WHERE PromoID='".$val['PromoID']."'");
|
|
}
|
|
}
|
|
}
|
|
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))");
|
|
if ($fdb->RecordCount()>0) {
|
|
while ($fdb->Next()) $apromo[] = $fdb->AllRow();
|
|
|
|
foreach($apromo as $_key => $val) {
|
|
$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();
|
|
|
|
$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']) * $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;
|
|
}
|
|
}
|
|
|
|
$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();
|
|
|
|
$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;
|
|
$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>';
|
|
}
|
|
|
|
?>
|