$nomor]; if (trim($nomor)=="") { if ($baru) $aparam['No_Beli'] = "BELI".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00"; $aparam['Tgl_Beli'] = tgl_ymd(); $aparam['Tgl_Faktur'] = tgl_ymd(); $aparam['SupID'] = 0; $aparam['CabID'] = $_SESSION['__APP_INV']['CABANGID']; $aparam['Total_Beli'] = 0; $aparam['Total_Hutang']= 0; $aparam['Total_Bulat'] = 0; } else { $tabel_beli = (strpos($nomor,"BELI")===false) ? "inv_beli" : "inv_beli_pend"; $db->Query("SELECT * FROM ".$tabel_beli." WHERE No_Beli='".$nomor."'"); if ($db->Next()) $aparam = $db->AllRow(); } return $aparam; } function Beli_Pending_Nomor1() { global $db; $tno = "BELI".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#"; $ino = 0; $db->Query("SELECT MAX(RIGHT(No_Beli,2)) Nomor FROM inv_beli_pend WHERE LEFT(No_Beli,".strlen($tno).")='".$tno."'"); if ($db->Next()) $ino = intval($db->Row("Nomor", 0)); $tno .= isi_nol(++$ino, 2); return $tno; } $db = $db ?? new MySQL(); $ajson = []; $data = Param::Get("data"); $mode = Param::Get("mode", "view"); $mode_detail = Param::Get("mode_detail"); $id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']); $nomor = Param::Get("No_Beli", ""); $is_pend = (strpos($nomor,"BELI")===false) ? false : true; if ( $data == "master" ) { $ajson = ['error'=>"", 'html'=>""]; $atabel = ['No_Beli'=>$nomor]; if ($mode == "pending-edit") { Pending_Edit($nomor); $atabel = Beli_Data1($nomor); $mode = "edit"; } else if ($mode == "pending-save") { $b_baru = false; if (substr($nomor,-3)=="#00") { $b_baru = true; $no_lama = $nomor; $nomor = Beli_Pending_Nomor1(); Pending_Save($no_lama, $nomor); } $apending = []; $db->Query("SELECT SUM(Qty*Harga_Beli) Beli,SUM(Total_Diskon) Diskon FROM tmp_inv_detail WHERE No_Ref='".$nomor."'"); if ($db->Next()) $apending = $db->AllRow(); $sql = new SQL($db); $sql->set_table("inv_beli_pend"); $sql->add_param("No_Beli", $nomor); $sql->add_param_date("Tgl_Beli"); $sql->add_param_date("Tgl_Faktur"); $sql->add_param("No_Faktur"); $sql->add_param("CabID"); $sql->add_param("SupID"); $sql->add_param("Total_Beli", $apending['Beli']); $sql->add_param("Total_Diskon", $apending['Diskon']); $sql->add_param("Total_Bulat"); $sql->add_param("Total_Hutang"); $sql->add_param_userid(); $sql->add_where("No_Beli", $nomor); if ($b_baru) $sql->InsertDB(); else $sql->UpdateDB(); $atabel = Beli_Data1(); } else if ($mode == "pending-delete") { Pending_Delete($nomor); $db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$nomor."'"); $atabel = Beli_Data1(); } else if ($mode == "add") { $atabel = Beli_Data1("", true); } else if ($mode == "edit") { Detail_Copy($nomor, true); $atabel = Beli_Data1($nomor); } else if ($mode == "save") { $no_lama = $nomor; if ($is_pend) { $nomor = Nomor_Baru("B", Param::Get("Tgl_Beli"), true); if (substr($no_lama,-3)!="#00") $db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$no_lama."'"); } Detail_Save($nomor, 3, $id_cab, Param::Get("Tgl_Beli"), $is_pend, $no_lama); $abeli = []; $db->Query("SELECT SUM(Qty*Harga_Beli) Beli, SUM(Total_Diskon) Diskon FROM inv_detail WHERE No_Ref='".$nomor."'"); if ($db->Next()) $abeli = $db->AllRow(); $sql = new SQL($db); $sql->set_table("inv_beli"); $sql->add_param_date("Tgl_Beli"); $sql->add_param_date("Tgl_Faktur"); $sql->add_param("No_Faktur"); $sql->add_param("CabID"); $sql->add_param("SupID"); $sql->add_param("Total_Beli", $abeli['Beli']); $sql->add_param("Total_Diskon", $abeli['Diskon']); $sql->add_param("Total_Bulat"); $sql->add_param("Total_Hutang"); $sql->add_param("Data_Beli", 1); $sql->add_param_stamp(); $sql->add_param_userid(); $sql->add_where("No_Beli", $nomor); $sql->UpdateDB(); Produk_Update($nomor, Param::Get("SupID")); Update_Lunas_Sup(Param::Get("SupID")); $atabel = Beli_Data1($nomor); $mode = "view"; } else if ($mode == "cancel") { if (substr($nomor,-3)=="#00" || substr($nomor,0,4)!="BELI") Detail_Cancel($nomor); $atabel = Beli_Data1(); } else { $atabel = Beli_Data1($nomor); } $enable = in_array($mode, ["add","edit"]) ? true : false; $form = new Form($db); $tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], !$enable, true, "text", "nomor transaksi"); $tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $enable, true, "text", "nomor faktur"); $ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, true); $ttglfaktur = $form->datebox("_", "Tgl_Faktur", $atabel['Tgl_Faktur'], $enable, true); $tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0," "]); $tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "]); $ajson['html'] = '
'.$tnota.'
'.$ttglnota.'
'.$ttglfaktur.'
'.$tcab.'
'.$tsup.'
'.$tfaktur.'

'; } else if ( $data == "delete" ) { if ($is_pend == false) { $db->Query("DELETE FROM inv_beli WHERE No_Beli='".$nomor."'"); $db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'"); } else { $db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$nomor."'"); $db->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$nomor."'"); } $ajson['status'] = true; } else if ( $data == "tabel-detail" ) { if (in_array($mode_detail, ["insert","update","delete"])) { $iqty = doubleval(Param::Get("Qty", 0)); $istok = $iqty; $db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'"); if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty; $sql = new SQL($db); $sql->set_table("tmp_inv_detail"); $sql->add_param("No_Ref", $nomor); $sql->add_param("InvID"); $sql->add_param("SatuanID"); $sql->add_param("Qty", $iqty); $sql->add_param("Stok", $istok); $sql->add_param("Harga_Beli"); $sql->add_param("Disk_Rupiah"); $sql->add_param("Disk_Persen1"); $sql->add_param("Disk_Persen2"); $sql->add_param("Disk_Persen3"); $sql->add_param("Disk_Persen4"); $sql->add_param("Disk_Persen5"); $sql->add_param("Total_Diskon", "(Harga_Beli-((Harga_Beli-Disk_Rupiah)*((100.0-Disk_Persen1)/100)*((100.0-Disk_Persen2)/100)*((100.0-Disk_Persen3)/100)*((100.0-Disk_Persen4)/100)*((100.0-Disk_Persen5)/100)))*Qty", true); $sql->add_param_unix(); $sql->add_param_userid(); $sql->add_where("ID"); $sql->add_where("No_Ref", $nomor); $_id = Param::Get("ID", 0); if ( $mode_detail == "insert" ) { $sql->InsertDB(); $_id = $sql->LastInsertID(); } else if ( $mode_detail == "update" ) { $sql->UpdateDB(); } else if ( $mode_detail == "delete" ) { $sql->DeleteDB(); } } $qview = ""; $qtabel = "inv_detail"; if ($is_pend) $qtabel = "tmp_inv_detail"; if (in_array($mode, ["add","edit"])) { if ($mode=="add") $qview = " AND Unix=".user_unix(); $qtabel = "tmp_inv_detail"; } $obj = new Table($db); $obj->set_query("SELECT D.*,P.Kode_SKU,P.Nama_Lengkap,P.Nama_Satuan,P.Harga_Jual,(D.Qty*D.Harga_Beli)-D.Total_Diskon Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)"); $obj->set_query_footer("SELECT SUM((D.Qty*D.Harga_Beli)-D.Total_Diskon) Total,SUM(D.Total_Diskon) Total_Diskon FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D"); $obj->add_field("ID", "No", "c"); $obj->add_field("InvID", "InvID", "hid"); $obj->add_field("SatuanID", "SatuanID", "hid"); $obj->add_field("Kode_SKU", "SKU", "c"); $obj->add_field("Nama_Lengkap", "Nama Barang", "awr"); $obj->add_field("Qty", "Qty", "r", "rupiah2"); $obj->add_field("Harga_Beli", "Harga @", "r", "rupiah"); $obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah"); $obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah"); $obj->set_field_order("ID", "A"); if (in_array($mode, ["add","edit"])) { $obj->add_row_btn("clipboard", "Ubah", "BeliJS.detail_ubah"); $obj->add_row_btn("trash", "Hapus", "BeliJS.detail_hapus", "Unix", user_unix()); $obj->set_func_btn("BeliJS.detail_tambah", ' Produk'); $obj->set_func_btn("BeliJS.produk_brow", ' Browse'); } $obj->set_func_btn("BeliJS.total_show", "Total"); $obj->set_func_navi("BeliJS.data_query('tabel-detail')"); $ajson[] = $obj->json_table("divDetailTabel"); $ntotal = 0; $db->Query("SELECT SUM((D.Qty*D.Harga_Beli)-D.Total_Diskon) Jumlah FROM ".$qtabel." D WHERE D.No_Ref='".$nomor."' ".$qview); if ($db->Next()) $ntotal = floatval($db->Row("Jumlah", 0)); $ajson[] = ['type'=>"form", 'id'=>"Total_Beli", 'value'=>$ntotal]; if (in_array($mode_detail, ["insert","update"])) {//WARNING: harga jual dibawah limit margin!! $hbeli = 0; $db->Query("SELECT CEIL((Harga_Beli-(Total_Diskon/Qty))/(Stok/Qty)) Pokok FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$_id."'"); if ($db->Next()) $hbeli = $db->Row("Pokok", 0); $db->Query("SELECT P.*,G.Margin FROM (SELECT Grup_InvID,Nama_Produk,CEIL(Harga_Jual/Qty) Harga_Jual FROM vi_inv_produk WHERE InvID='".Param::Get("InvID")."' AND Harga_Jual>0 ORDER BY Harga_Jual ASC LIMIT 1) P LEFT JOIN inv_produk_grup G ON (P.Grup_InvID=G.Grup_InvID)"); if ($db->Next()) { if ($db->Row("Margin",0)>0) $hbeli += ($hbeli*($db->Row("Margin")/100)); if ($hbeli > $db->Row("Harga_Jual",0)) $ajson[] = ['type'=>"msg", 'mode'=>"error", 'wait'=>3000, 'value'=>"Produk \"".$db->Row("Nama_Produk")."\" Harga Beli telah melewati Margin / Harga Jual!"]; } } } else if ( $data == "brow-tx" ) { $tcari = trim(Param::Get("Cari_TX")); $tsql = ($tcari=="") ? "" : " CONCAT(B.No_Beli,B.No_Faktur,S.Nama_Sup,DATE_FORMAT(B.Tgl_Faktur,'%d-%m-%Y')) LIKE '%".$tcari."%'"; $obj = new Table($db); $obj->set_table("(SELECT *,Total_Diskon+Total_Bulat Diskon FROM inv_beli WHERE Data_Beli=1) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)", "B.*,S.Nama_Sup", $tsql); $obj->add_field("No_Beli", "No. Trans", "c"); $obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl"); $obj->add_field("Nama_Sup", "Nama Supplier", "awr"); $obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah"); $obj->add_field("Diskon", "Diskon", "r", "rupiah"); $obj->add_field("Total_Hutang", "Jumlah", "r", "rupiah"); $obj->set_field_order("No_Beli", "D"); $obj->add_row_btn("save", "Detail", "BeliJS.tx_select"); $obj->set_func_navi("BeliJS.data_query('brow-tx')"); $ajson[] = $obj->db_table("divBrowTX"); } else if ( $data == "brow-pending" ) { $obj = new Table($db); $obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT *,Total_Diskon+Total_Bulat Diskon FROM inv_beli_pend WHERE UserID='".user_id()."') B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)"); $obj->add_field("No_Beli", "No. Trans", "c"); $obj->add_field("Tgl_Beli", "Tgl. Pending", "c", "sqltgl", null, "val-tgl"); $obj->add_field("Nama_Sup", "Nama Supplier", "awr"); $obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah"); $obj->add_field("Diskon", "Diskon", "r", "rupiah"); $obj->add_field("Total_Hutang", "Jumlah", "r", "rupiah"); $obj->set_field_order("No_Beli", "D"); $obj->add_row_btn("save", "Pilih", "BeliJS.pending_select"); if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "BeliJS.pending_delete", "UserID", user_id()); $obj->set_func_navi("BeliJS.data_query('brow-pending')"); $ajson[] = $obj->json_table("divBrowPending"); } else if ( $data == "brow-produk" ) { $tcari = trim(Param::Get("Cari_Produk")); $tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": ""; $tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND S.SupID='".Param::Get("SupID")."'"; $obj = new Table($db); $obj->set_table("vi_inv_produk P LEFT JOIN inv_produk_sup S ON (P.InvID=S.InvID)", "P.*", "P.Aktif=1".$tsql); $obj->add_field("InvID", "ID", "hid"); $obj->add_field("SatuanID", "ID", "hid"); $obj->add_field("Kode_SKU", "SKU", "c"); $obj->add_field("Nama_Lengkap", "Nama Barang", "awr"); $obj->add_field("Harga_Jual", "Harga @", "r", "rupiah"); $obj->set_field_order("Kode_SKU", "A"); $obj->add_row_btn("save", "Pilih", "BeliJS.produk_select"); $obj->set_func_navi("BeliJS.data_query('brow-produk')"); $ajson[] = $obj->db_table("divBrowProduk"); } else if ( $data == "auto-produk" ) { $tcari = Param::Get("Auto_Query"); $ajson['autodata'] = []; $bcode = 0; $arec = []; // Cari by SKU $db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1"); if ($db->Next()) { $bcode = 1; $arec = $db->AllRow(); } // Cari by Barcode if ($bcode == 0) { $db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1"); if ($db->Next()) { $bcode = 1; $arec = $db->AllRow(); } } if ($bcode == 1) { $ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1]; } else { $db->Query("SELECT P.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',K.Harga_Jual) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50"); while ($db->Next()) { $ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>''.$db->Row("Kode_SKU").' '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")), 'data'=>$db->Row("Data2"), 'bc'=>0]; } } } else if ($data == "detail-produk") { $id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)]; if ($id > 0) { $db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1"); if ($db->Next()) $atabel = $db->AllRow(); } if ($atabel['InvID']>0 && $atabel['SatuanID']>0) { $db->Query("SELECT Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1"); if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow()); } $form = new Form($db); $tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik nama produk"); $tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double"); $tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double"); $tdisrp = $form->textbox("_", "Disk_Rupiah", $atabel['Disk_Rupiah'], true, true, "double"); $tdis1 = $form->textbox("_", "Disk_Persen1", $atabel['Disk_Persen1'], true, true, "double"); $tdis2 = $form->textbox("_", "Disk_Persen2", $atabel['Disk_Persen2'], true, true, "double"); $tdis3 = $form->textbox("_", "Disk_Persen3", $atabel['Disk_Persen3'], true, true, "double"); $tdis4 = $form->textbox("_", "Disk_Persen4", $atabel['Disk_Persen4'], true, true, "double"); $tdis5 = $form->textbox("_", "Disk_Persen5", $atabel['Disk_Persen5'], true, true, "double"); $ttot_dis = $form->textbox("_", "Total_Diskon", 0, false, false, "double"); $tjual = $form->textbox("_", "Harga_Jual", 0, false, false, "double"); $ttot = $form->textbox("_", "Jumlah", 0, false, false, "double"); $tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text"); $ajson['html'] = '
'.$tnama.'
'.$tqty.$tsat.'
'.$tbeli.'
Harga Jual @'.$tjual.'

'.$tdisrp.'
1'.$tdis1.'%
3'.$tdis3.'%
5'.$tdis5.'%
2'.$tdis2.'%
4'.$tdis4.'%
'.Form_Info("Silakan masukkan -10 pada Diskon 5, jika ada PPN.").'

'.$ttot_dis.'
'.$ttot.'
'; } else if ( $data == "detail-item" ) { $ajson['data'] = "kosong"; $db->Query("SELECT D.* FROM inv_detail D LEFT JOIN inv_beli B ON (D.No_Ref=B.No_Beli) WHERE B.Data_Beli=1 AND D.InvID='".Param::Get("InvID")."' ORDER BY D.Tgl_Ref DESC LIMIT 1"); if ($db->Next()) $ajson = $db->AllRow(); if (Param::Get("SatuanID",0) <> $ajson['SatuanID']) { $_bagi = 1; $db->Query("SELECT A.Qty/B.Qty Bagi FROM (SELECT InvID,Qty FROM inv_produk_kemasan WHERE InvID=".Param::Get("InvID")." AND SatuanID=".$ajson['SatuanID']."' LIMIT 1) A LEFT JOIN (SELECT InvID,Qty FROM inv_produk_kemasan WHERE InvID=".Param::Get("InvID")." AND SatuanID='".Param::Get("SatuanID",0)."' LIMIT 1) B ON (A.InvID=B.InvID)"); if ($db->Next()) $_bagi = $db->Row("Bagi", 1); $ajson['Harga_Beli'] /= $_bagi; $ajson['Disk_Rupiah'] /= $_bagi; } } else if ($data == "detail-total") { $form = new Form($db); $tbulat = $form->textbox("_", "popTotal_Bulat", 0, true, false, "double"); $thutang = $form->textbox("_", "popTotal_Hutang", 0, true, false, "double"); $ajson['html'] = '
'.$tbulat.'
'.$thutang.'
'; } else if ( $data == "default") { echo '
 
 
'; } send_json($ajson); ?>