Files
crm.twinpol.com/modules/EcmReportsBackUp20151106/mzStockOperationsCheck.php
2025-05-12 15:44:39 +00:00

172 lines
6.2 KiB
PHP
Executable File

<?php
/*
* author: Michał Zieliński, mz@bim-it.pl
* created: 24.08.2015
* last modified date: 31.08.2015 by MZ
*/
$process = false;
if ($_REQUEST['process'] == "1") $process = true;
$db = $GLOBALS['db'];
//create search form
$ss = new Sugar_Smarty ();
//group accounts
if ($_REQUEST['group_accounts'] == "on") {
$group_accounts = true;
$ss->assign("GROUP_ACCOUNTS", "1");
}
//get Stocks
$stocks = "";
if ($_REQUEST['stocks']) $stocks = $_REQUEST['stocks'];
$s_res = $db->query("SELECT DISTINCT o.stock_id as id, s.name FROM ecmstockoperations AS o INNER JOIN ecmstocks AS s ON s.id=o.stock_id WHERE o.deleted='0'");
$stocks_tpl = '<select multiple id="stocks" name="stocks[]">';
$s_stocks = "";
while ($s_row = $db->fetchByAssoc($s_res)) {
$stocks_tpl .= '<option value="'.$s_row['id'].'"';
if ($stocks=="" || in_array($s_row['id'], $stocks)) {
$stocks_tpl .= " selected ";
$s_stocks.= $s_row['name'].", ";
}
$stocks_tpl .= '>'.$s_row['name'].'</option>';
}
$stocks_tpl .= '</select>';
$s_stocks = substr($s_stocks,0,-2);
if (is_array($stocks) && sizeof($stocks) == $s_res->num_rows)
$s_stocks = "Wszystkie";
$ss->assign("STOCKS", $stocks_tpl);
//dates
if ($_REQUEST['date_from'])
$date_from = $_REQUEST['date_from'];
else {
$date_from = new DateTime("first day of last month");
$date_from = $date_from->format('d.m.Y');
}
$date_from_db = implode('-', array_reverse(explode('.', $date_from)));
$ss->assign("DATE_FROM", $date_from);
if ($_REQUEST['date_to'])
$date_to = $_REQUEST['date_to'];
else {
$date_to = new DateTime("last day of last month");
$date_to = $date_to->format('d.m.Y');
}
$date_to_db = implode('-', array_reverse(explode('.', $date_to)));
$ss->assign("DATE_TO", $date_to);
$ss->display ( 'modules/EcmReports/mz_tpl/StockOperationsCheck/StockOperationsCheckSearch.tpl' );
if (!$process == true) {
return;
}
//do your job!
//get documents
$doc_res = $db->query("SELECT parent_type, type FROM ecmstockoperations WHERE deleted='0' AND stock_id IN ('".implode("','", $stocks)."') GROUP BY parent_type, type");
$documents = array();
while ($doc_row = $db->fetchByAssoc($doc_res))
$documents[$doc_row['parent_type'].'_'.$doc_row['type']] = 0;
$data = array();
$prod_res = $db->query("SELECT distinct product_id FROM ecmstockoperations WHERE stock_id IN ('".implode("','", $stocks)."') ORDER BY product_code");
while ($row = $db->fetchByAssoc($prod_res)) {
$tmp = array();
$p = new EcmProduct();
$p->retrieve($row['product_id']);
$tmp['code'] = $p->code;
$tmp['id'] = $p->id;
$tmp['start_state'] = getStockStateByDate($p->id, $date_from_db." 00:00:00", $stocks);
$tmp['end_state'] = getStockStateByDate($p->id, $date_to_db." 23:59:59", $stocks);
$tmp['calc_state'] = $tmp['start_state'];
$doc_tmp = $documents;
$max = 0;
$docs_tmp = array();
foreach ($documents as $k=>$v) {
$par = explode("_", $k);
$op_res = $db->query("SELECT sum(quantity) as quantity, parent_id, parent_name, parent_type FROM ecmstockoperations WHERE product_id = '".$p->id."' AND deleted='0' AND parent_type='".$par[0]."' AND type='".$par[1]."' AND date_modified > '$date_from_db 00:00:00' AND date_modified < '$date_to_db 23:59:59' AND stock_id IN ('".implode("','", $stocks)."') GROUP BY parent_id ORDER BY date_entered");
$op_qty = 0;
if ($op_res->num_rows > $max)
$max = $op_res->num_rows;
while ($op = $db->fetchByAssoc($op_res)) {
$op_qty += $op['quantity'];
$docs_tmp[$k][] = $op;
}
$doc_tmp[$k] = floatval($op_qty);
if ($par[1] == '0')
$tmp['calc_state'] += $op_qty;
if ($par[1] == '1')
$tmp['calc_state'] -= $op_qty;
}
$tmp['doc_details'] = array();
for ($i = 0; $i<$max; $i++) {
$tmp2 = array();
foreach ($documents as $k=>$v) {
$tmp2[$k] = "";
if (isset($docs_tmp[$k][$i]))
$tmp2[$k] = $docs_tmp[$k][$i];
}
$tmp['doc_details'][] = $tmp2;
}
//echo '<pre>'; var_dump($tmp['doc_details']); echo '</pre>';
$tmp['error'] = abs($tmp['end_state'] - $tmp['calc_state']);
$tmp['op'] = $doc_tmp;
$data[] = $tmp;
unset($tmp);
unset($p);
}
$module_names = array (
'EcmStockDocIns' => 'PZ',
'EcmStockDocOuts' => 'WZ',
'EcmStockDocInsideIns' => 'PW',
'EcmStockDocInsideOuts' => 'RW',
'EcmStockDocMoves' => 'MM',
'EcmStockDocCorrects' => 'KS',
'EcmInvoiceOuts' => 'FV',
);
//create document and show it
$ss_pdf = new Sugar_Smarty();
$ss_pdf->assign("DATA", $data);
$ss_pdf->assign("DOCUMENTS", $documents);
$ss_pdf->assign("MOD_NAMES", $module_names);
//header stuff
$cur_date = new DateTime("now");
$cur_date = $cur_date->format('d.m.Y H:m:s');
$ss_pdf->assign("CUR_DATE", $cur_date);
$ss_pdf->assign("DATE_FROM", $date_from);
$ss_pdf->assign("DATE_TO", $date_to);
$ss_pdf->assign("S_STOCK", $s_stocks);
include_once ("modules/EcmSysInfos/EcmSysInfo.php");
$EcmSysInfo = new EcmSysInfo();
$ss_pdf->assign("COMPANY_NAME", $EcmSysInfo->getName());
$content = $ss_pdf->fetch ( 'modules/EcmReports/mz_tpl/StockOperationsCheck/StockOperationsCheck.tpl' );
echo $content;
//include_once ("include/MPDF57/mpdf.php");
//$p = new mPDF ( '', 'A4', null, 'helvetica', 5, 5, 30, 5, 5, 5 );
//$p->writeHTML ($content) ;
//$p->setTitle ( "Analiza ruchu magazynowego" );
//$p->output("mag.pdf", "I");
//helper
function getStockStateByDate($product_id, $date, $stocks) {
$db = $GLOBALS['db'];
//get current stock state
$cur = $db->fetchByAssoc($db->query("SELECT sum(quantity) AS qty FROM ecmstockstates WHERE product_id='$product_id' AND deleted='0' AND quantity IS NOT NULL AND stock_id IN ('".implode("','", $stocks)."')"));
$quantity = $cur['qty'];
//get + operations
$in = $db->fetchByAssoc($db->query("SELECT sum(quantity) AS qty FROM ecmstockoperations WHERE product_id = '$product_id' AND deleted='0' AND type='0' AND date_modified> '$date' AND stock_id IN ('".implode("','", $stocks)."')"));
$quantity-=$in['qty'];
//get - operations
$out = $db->fetchByAssoc($db->query("SELECT sum(quantity) AS qty FROM ecmstockoperations WHERE product_id = '$product_id' AND deleted='0' AND type='1' AND date_modified > '$date' AND stock_id IN ('".implode("','", $stocks)."')"));
$quantity+=$out['qty'];
return $quantity;
}