diff --git a/public_html/doc/report_expense.php b/public_html/doc/report_expense.php index 45e3f53..a3050f9 100644 --- a/public_html/doc/report_expense.php +++ b/public_html/doc/report_expense.php @@ -17,331 +17,275 @@ else { $APPLYDATE = "20260316000000"; +$applyDay = substr($APPLYDATE, 0, 8); -$add_srchquery = ""; -$add_query = ""; -$add_subqry = ""; -$add_hsubqry = ""; -$add_dsubqry = ""; +$fromRaw = isset($_REQUEST['fromDate']) ? preg_replace('/[^0-9]/', '', $_REQUEST['fromDate']) : ''; +$toRaw = isset($_REQUEST['toDate']) ? preg_replace('/[^0-9]/', '', $_REQUEST['toDate']) : ''; -// searching -if($key_word) { - - $key_wordStr = urldecode(trim($key_word)); - //$add_srchquery .= " AND ((m_userid LIKE '%$key_wordStr%') OR (m_firstname LIKE '%$key_wordStr%') OR (m_cell LIKE '%$key_wordStr%'))"; +if ($fromRaw === '' && isset($_REQUEST['fromYear'])) { + $fromRaw = preg_replace('/[^0-9]/','',$_REQUEST['fromYear']) + . sprintf("%02d",(int)preg_replace('/[^0-9]/','',$_REQUEST['fromMonth'])) + . sprintf("%02d",(int)preg_replace('/[^0-9]/','',$_REQUEST['fromDay'])); +} +if ($toRaw === '' && isset($_REQUEST['toYear'])) { + $toRaw = preg_replace('/[^0-9]/','',$_REQUEST['toYear']) + . sprintf("%02d",(int)preg_replace('/[^0-9]/','',$_REQUEST['toMonth'])) + . sprintf("%02d",(int)preg_replace('/[^0-9]/','',$_REQUEST['toDay'])); } -// sorting -if($switch) { - $switched = $func -> switchOrder($switch, $switched); - $add_query .= " ORDER BY $switch $switched "; - $switched = $switch . "^" . $switched; -}else if($switched) { - $switched1 = explode("^", $switched); - $add_query .= " ORDER BY $switched1[0] $switched1[1] "; -} else { - $add_query .= " ORDER BY d_orderdate DESC, m_initial ASC "; +if (strlen($fromRaw) !== 8) $fromRaw = date('Ym') . '01'; +if (strlen($toRaw) !== 8) $toRaw = date('Ymd'); + +$periodStart = $fromRaw; +$periodEnd = $toRaw; + +$fromDateVal = substr($fromRaw,0,4) . '-' . substr($fromRaw,4,2) . '-' . substr($fromRaw,6,2); +$toDateVal = substr($toRaw,0,4) . '-' . substr($toRaw,4,2) . '-' . substr($toRaw,6,2); + +if ($periodStart > $periodEnd) { + $tmp = $periodStart; $periodStart = $periodEnd; $periodEnd = $tmp; +} +$periodLabel = $periodStart . " ~ " . $periodEnd; + +$searchDriver = isset($_REQUEST['searchDriver']) ? $_REQUEST['searchDriver'] : 'ALL'; +if ($searchDriver !== 'ALL') $searchDriver = preg_replace('/[^0-9]/', '', $searchDriver); +if ($searchDriver === '') $searchDriver = 'ALL'; + +$drivers = array(); +$qry_dr = "SELECT dr_uid, dr_initial, dr_lastname, dr_firstname + FROM tbl_driver + WHERE dr_status = 'A' AND dr_type = 'UCO' + AND dr_initial <> 'I.N' + ORDER BY dr_initial ASC "; +$rt_dr = $jdb->nQuery($qry_dr, "driver list error"); +while ($lt_dr = mysqli_fetch_array($rt_dr, MYSQLI_ASSOC)) { + $drivers[] = $lt_dr; } -$getSWHStr = $switched; +$selectStr = ($searchDriver == "ALL") ? "selected" : ""; +$c_driveruidSTR = ""; +foreach ($drivers as $d) { + $sel = ($d['dr_uid'] == $searchDriver) ? "selected" : ""; + $c_driveruidSTR .= ""; +} +$getDriverInitial = ($searchDriver == "ALL") ? "ALL" : ""; -/* -SELECT COUNT(*) FROM ( -select d_orderdate, m_initial from tbl_daily -INNER JOIN tbl_member ON (d_driveruid = m_uid) -group by d_orderdate,d_driveruid -order by d_orderdate DESC, m_initial ASC -) as ORDERLIST -*/ -//SELECT d_orderdate,m_initial,d_driveruid, COUNT(*) FROM tbl_daily -//INNER JOIN tbl_member ON (d_driveruid = m_uid) -//GROUP BY d_orderdate,d_driveruid -//ORDER BY d_orderdate DESC, m_initial ASC +$drFilter_d = ($searchDriver == "ALL") ? "" : " AND d_druid = '" . (int)$searchDriver . "' "; +$drFilter_h = ($searchDriver == "ALL") ? "" : " AND h_druid = '" . (int)$searchDriver . "' "; -if ($startYear == "" || $startMonth == "") { - $startYear = date('Y'); - $startMonth = date('m'); +function calcDriverBalance($jdb, $APPLYDATE, $druid, $asOf) +{ + static $cache = array(); + + $druid = (int)$druid; + $asOf = preg_replace('/[^0-9]/', '', $asOf); + $applyDay = substr($APPLYDATE, 0, 8); + + if (!isset($cache[$druid])) { + $c = array( + 'out' => array(), + 'in' => array(), + 'r' => array(), + 'g' => array(), + 'days_out' => array(), + ); + + $q1 = "SELECT SUBSTRING(d_visitdate,1,8) AS dd, SUM(d_payamount) AS amt + FROM tbl_daily + WHERE d_druid = '$druid' + AND d_visitdate >= '$APPLYDATE' + AND d_paystatus = 'P' AND d_status = 'F' + GROUP BY SUBSTRING(d_visitdate,1,8) "; + $r1 = $jdb->nQuery($q1, "calc out err"); + while ($row = mysqli_fetch_array($r1, MYSQLI_ASSOC)) { + $c['out'][$row['dd']] = (float)$row['amt']; + } + + $q2 = "SELECT h_date, h_balance_in, h_balance_r, h_balance_g + FROM tbl_memberhis + WHERE h_druid = '$druid' AND h_date >= '$applyDay' + ORDER BY h_uid ASC "; + $r2 = $jdb->nQuery($q2, "calc his err"); + while ($row = mysqli_fetch_array($r2, MYSQLI_ASSOC)) { + $d = $row['h_date']; + + $c['in'][$d] = (float)$row['h_balance_in']; + $c['r'][$d] = (float)$row['h_balance_r']; + $c['g'][$d] = (float)$row['h_balance_g']; + } + + $cache[$druid] = $c; + } + + $c = $cache[$druid]; + + $cashoutTODAY = isset($c['out'][$asOf]) ? $c['out'][$asOf] : 0; + $cashinTODAY = isset($c['in'][$asOf]) ? $c['in'][$asOf] : 0; + $cashrtTODAY = isset($c['r'][$asOf]) ? $c['r'][$asOf] : 0; + $gasTODAY = isset($c['g'][$asOf]) ? $c['g'][$asOf] : 0; + + $cashoutSUM = 0; + foreach ($c['out'] as $d => $v) { if ($d < $asOf) $cashoutSUM += $v; } + $cashinSUM = 0; + foreach ($c['in'] as $d => $v) { if ($d < $asOf) $cashinSUM += $v; } + $cashrtSUM = 0; + foreach ($c['r'] as $d => $v) { if ($d < $asOf) $cashrtSUM += $v; } + + $balance = $cashinSUM + $cashinTODAY - $cashrtTODAY - $cashoutTODAY - $cashrtSUM - $cashoutSUM; + $openingbalance = $cashinSUM - $cashrtSUM - $cashoutSUM; + + if ($asOf < $applyDay) { + $balance = 0; + $openingbalance = 0; + } + + return array( + 'opening' => $openingbalance, + 'cashin' => $cashinTODAY, + 'cashout' => $cashoutTODAY, + 'cashrt' => $cashrtTODAY, + 'balance' => $balance, + 'gas' => $gasTODAY, + ); } -if ($searchDriver == "") $searchDriver = "ALL"; +if (!isset($page) || !$page) $page = isset($_REQUEST['page']) ? (int)$_REQUEST['page'] : 1; +if ($page < 1) $page = 1; +$list_count = 20; +if (!isset($page_count) || !$page_count) $page_count = isset($INIT_PAGEVIEWCNT) ? $INIT_PAGEVIEWCNT : 10; +$rowStart = ($page - 1) * $list_count; -if ($startYear != "" && $startMonth != "") $add_subqry = " AND (d_orderdate LIKE '$startYear$startMonth%') "; -else $add_subqry = "AND (d_orderdate LIKE '".date('Y').date('m')."%') "; +$drFilter_u = ($searchDriver == "ALL") ? "" : " AND druid = '" . (int)$searchDriver . "' "; -if ($searchDriver != "") { - if ($searchDriver == "ALL") { - $add_subqry .= ""; - $add_hsubqry .= ""; - $add_dsubqry .= ""; - } - else { - $add_subqry .= " AND m_currentdriver = '".$searchDriver."' "; - $add_hsubqry .= " AND h_druid = '".$searchDriver."' "; - $add_dsubqry .= " AND d_druid = '".$searchDriver."' "; - } -} -else { - $add_subqry .= ""; - $add_hsubqry .= ""; - $add_dsubqry .= ""; -} -// For Test -//$add_subqry = " AND m_uid = '17' "; +$qry_union = "SELECT orderdate, druid FROM ( + SELECT d_orderdate AS orderdate, d_druid AS druid + FROM tbl_daily + WHERE d_orderdate >= '$periodStart' AND d_orderdate <= '$periodEnd' + UNION + SELECT h_date AS orderdate, h_druid AS druid + FROM tbl_memberhis + WHERE h_date >= '$periodStart' AND h_date <= '$periodEnd' + ) AS U + INNER JOIN tbl_driver ON (U.druid = dr_uid AND dr_type = 'UCO') + WHERE 1=1 AND dr_initial <> 'I.N' $drFilter_u + GROUP BY orderdate, druid "; -//total record -$query = "SELECT COUNT(*) FROM ( - SELECT d_orderdate, m_initial from tbl_daily - INNER JOIN tbl_member ON (d_druid = m_currentdriver) - WHERE d_orderdate >= '".substr($APPLYDATE,0,8)."' AND d_orderdate <= '".date('Ymd')."' ". $add_subqry . " - GROUP BY d_orderdate,d_druid - ORDER BY d_orderdate DESC, m_initial ASC - ) AS ORDERLIST "; +$qry_count = "SELECT COUNT(*) FROM ( $qry_union ) AS CNT "; +$total_count = (int)$jdb->rQuery($qry_count, "count error"); -$total_count=$jdb->rQuery($query, "record query error"); -//echo "




[$total_count][$query]
"; +$qry_rows = "SELECT U2.orderdate AS d_orderdate, U2.druid AS d_druid, + dr_initial AS m_initial, dr_lastname AS m_lastname, dr_firstname AS m_firstname + FROM ( $qry_union ) AS U2 + INNER JOIN tbl_driver ON (U2.druid = dr_uid AND dr_type = 'UCO') + ORDER BY U2.orderdate DESC, dr_initial ASC + LIMIT $rowStart, $list_count "; +$rt_rows = $jdb->nQuery($qry_rows, "rows error"); -//페이징변수설정 -if(!$page) $page = 1; - -if(!$list_count) $list_count = $INIT_PAGECNT; //출력리스트 갯수 -if(!$page_count) $page_count = $INIT_PAGEVIEWCNT; //출력페이지 갯수 - -$list_number = $total_count - (($page-1)*$list_count); -$start_number = $list_count * ($page-1); - -$add_query .= " LIMIT $start_number, $INIT_PAGECNT"; -$query = "SELECT d_orderdate, d_druid, m_initial, m_lastname, m_firstname - FROM tbl_daily - INNER JOIN tbl_member ON (d_druid = m_currentdriver) - WHERE d_orderdate >= '".substr($APPLYDATE,0,8)."' AND d_orderdate <= '".date('Ymd')."' ". $add_subqry . " - GROUP BY d_orderdate,d_druid " . $add_allquery . $add_srchquery . $add_query; -//echo "[$query]"; - -$result=$jdb->nQuery($query, "list error"); - -while($list=mysqli_fetch_array($result, MYSQLI_ASSOC)) { - for($i=0; $i $value ) - $$key = $value; - } - - //$signupdateStr = $func -> convertFormat ($MSIGNUPDATE, 1); - - //$qry = "SELECT CNAME FROM tbl_company WHERE CUID = '$MCOMPANY' "; - //$rtd=$jdb->fQuery($qry, "fetch query error"); - //if ($MCOMPANY == "0" || $MCOMPANY == "") $companyStr = "-"; - //else $companyStr = $rtd[CNAME]; - - $d_orderdateSTR = $func -> convertFormat ($d_orderdate, 3); - - $todayqtySTR = number_format(floatval($todayqty)); - $todayestqtySTR = number_format(floatval($todayestqty)); - - //$qry_driver = "SELECT m_firstname, m_lastname FROM tbl_member WHERE m_uid = '$c_driveruid' "; - //$rt_driver = $jdb->fQuery($qry_driver, "fetch query error"); - - // tbl_memberhis 에 해당일,해당드라이버가 있는지 확인해서 있으면 update, 없으면 create - $qry_day = "SELECT COUNT(h_uid) FROM tbl_memberhis WHERE h_date = '".$d_orderdate."' AND h_druid = '".$d_druid."' "; - $rt_cnt_day = $jdb->rQuery($qry_day, "fetch query error"); - - - $h_departuretime = "-"; - $h_arrivaltime = "-"; - $h_balance_o = "-"; - $h_balance_in = "-"; - $h_balance_out = "-"; - $h_balance_t = "-"; - $h_balance_g = "-"; - - if ($rt_cnt_day > 0) { - $dailymode = "update"; - - // Get Information - $qry = "SELECT * FROM tbl_memberhis - WHERE h_druid = '".$d_druid."' AND h_date = '".$d_orderdate."' - ORDER BY h_uid DESC LIMIT 1 "; - $rt=$jdb->fQuery($qry, "fetch query error"); - //echo"$query"; - - for($i=0; $i $value ) - $$key = $value; - } - - $h_commentSTR = str_replace("\\", "", $h_comment); - } - else $dailymode = "create"; - - // Get Cash Out Today - $qry_cashouttoday = "SELECT SUM(d_payamount) FROM tbl_daily - WHERE d_druid = '".$d_druid."' - AND (d_visitdate LIKE '".$d_orderdate."%') - AND d_paystatus = 'P' AND d_status = 'F' "; - - $cashoutTODAY = $jdb->rQuery($qry_cashouttoday, "fetch query error"); - //echo"
[$qry_cashouttoday]
"; - - // Get Cash In Today - $qry_cashintoday = "SELECT h_balance_in FROM tbl_memberhis - WHERE h_druid = '".$d_druid."' AND (h_date = $d_orderdate) ORDER BY h_uid DESC LIMIT 1 "; - - $cashinTODAY = $jdb->rQuery($qry_cashintoday, "fetch query error"); - //echo"[$qry_cashintoday]
"; - - // Get Cash Retrun Today - $qry_cashrttoday = "SELECT h_balance_r FROM tbl_memberhis - WHERE h_druid = '".$d_druid."' AND (h_date = $d_orderdate) ORDER BY h_uid DESC LIMIT 1 "; - - $cashrtTODAY = $jdb->rQuery($qry_cashrttoday, "fetch query error"); - //echo"[$qry_cashintoday]
"; - - // Get Cash Out Total SUM (해당월) - $qry_cashout = "SELECT SUM(d_payamount) FROM tbl_daily - WHERE d_druid = '".$d_druid."' - AND (d_visitdate >= '".$APPLYDATE."' AND d_visitdate < ".$d_orderdate."000000) - AND d_paystatus = 'P' AND d_status = 'F' "; - - $cashoutSUM = $jdb->rQuery($qry_cashout, "fetch query error"); - //echo"[$qry_cashout]
"; - - // Get Cash Return Total SUM (해당월) - $qry_cashrt = "SELECT SUM(h_balance_r) FROM tbl_memberhis - WHERE h_druid = '".$d_druid."' - AND (h_date >= '".substr($APPLYDATE,0,8)."' AND h_date < $d_orderdate) "; - - $cashrtSUM = $jdb->rQuery($qry_cashrt, "fetch query error"); - //echo"[$qry_cashrt]
"; - - // Get Cash In Total SUM (해당월 ,해당일 포함) - $qry_cashin = "SELECT SUM(h_balance_in) FROM tbl_memberhis - WHERE h_druid = '".$d_druid."' - AND (h_date >= '".substr($APPLYDATE,0,8)."' AND h_date < $d_orderdate) "; - - $cashinSUM = $jdb->rQuery($qry_cashin, "fetch query error"); - //echo"[$qry_cashin]
"; - - $balance = floatval($cashinSUM) + floatval($cashinTODAY) - floatval($cashrtTODAY) - floatval($cashoutTODAY) - floatval($cashrtSUM) - floatval($cashoutSUM); - $openingbalance = floatval($cashinSUM) - floatval($cashrtSUM) - floatval($cashoutSUM); - - $cashoutTODAY = number_format(floatval($cashoutTODAY), 2, '.', ','); - $cashrtTODAY = number_format(floatval($cashrtTODAY), 2, '.', ','); - $balance = number_format(floatval($balance), 2, '.', ','); - $openingbalance = number_format(floatval($openingbalance), 2, '.', ','); - $h_balance_in = number_format(floatval($h_balance_in), 2, '.', ','); - - $cashoutSUM = number_format(floatval($cashoutSUM), 2, '.', ','); - $cashinSUM = number_format(floatval($cashinSUM), 2, '.', ','); - - - if ($d_orderdate < substr($APPLYDATE,0,8)) { - $openingbalance = "0.00"; - $balance = "0.00"; - } - - $strList .= " - - $list_number - $d_orderdateSTR - $m_lastname$m_firstname ($m_initial) - $openingbalance - $h_balance_in - $cashoutTODAY - $cashrtTODAY - $balance - $h_balance_g - - - "; - - $list_number--; - +$pageRows = array(); +while ($r = mysqli_fetch_array($rt_rows, MYSQLI_ASSOC)) { + $pageRows[] = $r; } +$strList = ""; +$list_number = $total_count - $rowStart; +foreach ($pageRows as $row) { + $asOf = $row['d_orderdate']; + $dateLabel = $func->convertFormat($asOf, 3); + $b = calcDriverBalance($jdb, $APPLYDATE, $row['d_druid'], $asOf); -if( $total_count < 1 ) { - $strList = " - No Data - "; + $driverShow = htmlspecialchars($row['m_lastname'] . $row['m_firstname'] . " (" . $row['m_initial'] . ")"); + + $strList .= " + + $list_number + $dateLabel + $driverShow + " . number_format($b['opening'], 2) . " + " . number_format($b['cashin'], 2) . " + " . number_format($b['cashout'], 2) . " + " . number_format($b['cashrt'], 2) . " + " . number_format($b['balance'], 2) . " + " . number_format($b['gas'], 2) . " + "; + $list_number--; } -// Get Cash In, Return, Gas SUM -$qry_sum = "SELECT - SUM(h_balance_in) AS CASHINSUM, - SUM(h_balance_r) AS CASHRETURNSUM, - SUM(h_balance_g) AS GASSUM - FROM tbl_memberhis - WHERE h_date >= '".substr($APPLYDATE,0,8)."' AND h_date LIKE '".$startYear.$startMonth."%' ". $add_hsubqry - ; -//echo "LIST_TOT[$qry_sum]
"; -$rt_sum = $jdb->fQuery($qry_sum, "fetch query error"); - -$getCASHINSUM = number_format(floatval($rt_sum['CASHINSUM']), 2, '.', ','); -$getCASHRETURNSUM = number_format(floatval($rt_sum['CASHRETURNSUM']), 2, '.', ','); -$getGASSUM = number_format(floatval($rt_sum['GASSUM']), 2, '.', ','); - -// Get Cash Out SUM -$qry_cashouttoday = "SELECT SUM(d_payamount) FROM tbl_daily - WHERE d_orderdate >= '".substr($APPLYDATE,0,8)."' AND (d_visitdate LIKE '".$startYear.$startMonth."%' ) - " . $add_dsubqry . " - AND d_paystatus = 'P' AND d_status = 'F' "; - -$getCASHOUTSUM = $jdb->rQuery($qry_cashouttoday, "fetch query error"); -$getCASHOUTSUM = number_format(floatval($getCASHOUTSUM), 2, '.', ','); - - - -// Get Driver Info -$qry_dr = "SELECT * FROM tbl_driver WHERE dr_status = 'A' ORDER by dr_initial ASC "; -$rt_dr = $jdb->nQuery($qry_dr, "list error"); - - -$c_driveruidSTR = " - "; - -while($lt_dr=mysqli_fetch_array($rt_dr, MYSQLI_ASSOC)) { - - if ($lt_dr['dr_uid'] == $searchDriver) $selectStr = "selected"; - else $selectStr = ""; - - $c_driveruidSTR .= " - "; - +if ($total_count == 0) { + $strList = "No Data"; } -//echo "




###[$searchDriver]###"; +$sumKey = $periodStart . '_' . $periodEnd . '_' . $searchDriver; +$needCalc = true; +if (isset($_SESSION['exp_sumkey']) && $_SESSION['exp_sumkey'] === $sumKey + && isset($_SESSION['exp_sum'])) { -if ($searchDriver == "ALL") $getDriverInitial = "ALL"; - - -// 년, 월 표시 로직 -for($i='2026'; $i<=date('Y'); $i++) { - if ($i == $startYear) $setTmp = "selected"; - else if ($startYear == "" && $i == date('Y')) { - $setTmp = "selected"; - //$startYear = date(Y); - } - else $setTmp = ""; - $strYear .= " "; + $s = $_SESSION['exp_sum']; + $sumIn = $s['in']; $sumRt = $s['rt']; $sumGas = $s['gas']; $sumOut = $s['out']; + $sumBal = $sumIn - $sumRt - $sumOut; + $sumEndBal = isset($s['endbal']) ? $s['endbal'] : 0; + $sumOpenBal = isset($s['openbal']) ? $s['openbal'] : 0; + $needCalc = false; } - -for($i=1; $i<=12; $i++) { - $j = sprintf("%02d", $i); - if ($i == $startMonth) $setTmp = "selected"; - else if ($startMonth == "" && $i == date('m')) { - $setTmp = "selected"; - //$startMonth = date(m); - } - else $setTmp = ""; - $strMonth .= " "; +if ($needCalc) { + + $qry_sum = "SELECT + SUM(h_balance_in) AS CASHINSUM, + SUM(h_balance_r) AS CASHRETURNSUM, + SUM(h_balance_g) AS GASSUM + FROM tbl_memberhis + WHERE h_date >= '$periodStart' AND h_date <= '$periodEnd' + $drFilter_h "; + $rt_sum = $jdb->fQuery($qry_sum, "sum error"); + + $sumIn = (float)$rt_sum['CASHINSUM']; + $sumRt = (float)$rt_sum['CASHRETURNSUM']; + $sumGas = (float)$rt_sum['GASSUM']; + + $qry_cashout = "SELECT SUM(d_payamount) FROM tbl_daily + WHERE (d_visitdate >= '" . $periodStart . "000000' + AND d_visitdate <= '" . $periodEnd . "235959') + $drFilter_d + AND d_paystatus = 'P' AND d_status = 'F' "; + $sumOut = (float)$jdb->rQuery($qry_cashout, "cashout sum error"); + + $sumBal = $sumIn - $sumRt - $sumOut; + + $sumEndBal = 0; + $sumOpenBal = 0; + $qry_enddr = "SELECT DISTINCT druid FROM ( + SELECT d_druid AS druid FROM tbl_daily + WHERE d_orderdate >= '$periodStart' AND d_orderdate <= '$periodEnd' + UNION + SELECT h_druid AS druid FROM tbl_memberhis + WHERE h_date >= '$periodStart' AND h_date <= '$periodEnd' + ) AS UD + INNER JOIN tbl_driver ON (UD.druid = dr_uid AND dr_type = 'UCO') + WHERE 1=1 AND dr_initial <> 'I.N' $drFilter_u "; + $rt_enddr = $jdb->nQuery($qry_enddr, "end-balance drivers error"); + while ($ed = mysqli_fetch_array($rt_enddr, MYSQLI_ASSOC)) { + $eb = calcDriverBalance($jdb, $APPLYDATE, $ed['druid'], $periodEnd); + $sumEndBal += $eb['balance']; + + // 기간초(periodStart) 시점 잔액 = 그날의 opening + $ob = calcDriverBalance($jdb, $APPLYDATE, $ed['druid'], $periodStart); + $sumOpenBal += $ob['opening']; + } + + $_SESSION['exp_sumkey'] = $sumKey; + $_SESSION['exp_sum'] = array('in'=>$sumIn,'rt'=>$sumRt,'gas'=>$sumGas,'out'=>$sumOut,'endbal'=>$sumEndBal,'openbal'=>$sumOpenBal); } +$getCASHINSUM = number_format($sumIn, 2); +$getCASHRETURNSUM = number_format($sumRt, 2); +$getGASSUM = number_format($sumGas, 2); +$getCASHOUTSUM = number_format($sumOut, 2); +$getBALANCESUM = number_format($sumBal, 2); +$getENDBALANCESUM = number_format($sumEndBal, 2); +$getOPENINGSUM = number_format($sumOpenBal, 2); +$getINOUTDIFF = number_format($sumIn - $sumOut, 2); -addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno); - +addLog("add", "EXPENSE LIST", "VIEW", $lguserid, "report_expense", $lgno); ?>
@@ -369,65 +313,246 @@ addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno);
- -
- - - - - - - - - - + - - - - - + + + + + + +
+ + + + '; + echo '
'.$label.'
'; + echo '
'.$value.'
'; + echo '
'; + } + function opSign($s) { + $color = '#b4bbb6'; + if ($s === '+') $color = '#7fae8c'; + if ($s === '−') $color = '#d4a5ad'; + $size = ($s === ',') ? '40px' : '26px'; + $w = ($s === ',') ? '44px' : '36px'; + if ($s === ',') { + $inner = ','; + } else { + $inner = $s; + } + echo '
'.$inner.'
'; + } + ?> + + + "> + + +
- - - - - - - -
+ + + + + + + + + +
+ + + + + + + + + + + + ~ + + + +
+ + +
+ + +
+ + +
+ + Summary + / From the driver's perspective + + PERIOD  ·  +
+ + +
+
+ + +
+ + + + + + + + + +
+ +
+ +
+ + +
+ +
+
+ + + +
+ CASH IN − CASH OUT +
+
+ +
+
+
+ +
+
+ +
+ +
+ -
- - - - - - - - - - - - - - - - - -
PERIODDRIVERCASH INCASH OUTCASH RETURNGAS
-
@@ -445,58 +570,25 @@ addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno); Gas - - - +
- - -
diff --git a/public_html/lib/runDailyMemberhis.php b/public_html/lib/runDailyMemberhis.php new file mode 100644 index 0000000..5c4c587 --- /dev/null +++ b/public_html/lib/runDailyMemberhis.php @@ -0,0 +1,274 @@ +"; +} + +// TEST=1 이면 실제 INSERT 없이 화면 출력만 +$TESTMODE = false; +if ($mode == "WEB" && !empty($_GET['TEST'])) $TESTMODE = true; +if ($mode == "SHELL" && (($argv[4] ?? "") == "TEST")) $TESTMODE = true; + +if ($ROWCNT != "" && $LIMITCNT != "") $add_qry = " LIMIT $ROWCNT, $LIMITCNT"; +else $add_qry = ""; + +echo "####[START][$getYesterday]" . ($TESTMODE ? "[TEST MODE - 저장 안 함]" : "[실제 저장]") . "####$ENT"; + +if (file_exists($GETDIR . "/include/function_class.php")) { + include_once $GETDIR . "/include/function_class.php"; +} +if (file_exists($GETDIR . "/include/arrayinfo.php")) { + include_once $GETDIR . "/include/arrayinfo.php"; +} + +$hasFunc = class_exists('Func'); +$func = $hasFunc ? new Func() : null; +$jdb = new JDB(); + +$logName = $GETDIR . "/lib/access.log"; +function writeLogSafe($func, $logName, $msg) { + if ($func !== null && method_exists($func, 'PwriteLog')) { + $func->PwriteLog($logName, $msg); + } +} + +writeLogSafe($func, $logName, "ACTION[Cron - Start - Daily Memberhis Fill]"); + +$qry = "SELECT dr_uid + FROM tbl_driver + WHERE dr_status = 'A' AND dr_type = 'UCO' + ORDER BY dr_uid ASC + $add_qry "; +$result = $jdb->nQuery($qry, "driver list error"); +echo "[$qry]$ENT"; + +$insertCnt = 0; +$skipCnt = 0; + +while ($list = mysqli_fetch_array($result, MYSQLI_ASSOC)) { + + $druid = $list['dr_uid']; + + $qry_chk = "SELECT h_uid FROM tbl_memberhis + WHERE h_druid = '" . $druid . "' AND h_date = '" . $getYesterday . "' + LIMIT 1 "; + $rt_chk = $jdb->fQuery($qry_chk, "check error"); + + if (!empty($rt_chk['h_uid'])) { + echo "[SKIP][druid=$druid] already exists (h_uid=" . $rt_chk['h_uid'] . ")$ENT"; + $skipCnt++; + continue; + } + + // opening = 대상일 이전 가장 최근 레코드의 h_balance_t (없으면 0) + $qry_prev = "SELECT h_balance_t FROM tbl_memberhis + WHERE h_druid = '" . $druid . "' AND h_date < '" . $getYesterday . "' + ORDER BY h_date DESC, h_uid DESC + LIMIT 1 "; + $rt_prev = $jdb->fQuery($qry_prev, "prev balance error"); + + $opening = (!empty($rt_prev['h_balance_t'])) ? $rt_prev['h_balance_t'] : 0; + + unset($columns); + unset($values); + $columns = array(); + $values = array(); + + $columns[] = "h_druid"; $values[] = $druid; + $columns[] = "h_driveruid"; $values[] = ""; + $columns[] = "h_date"; $values[] = $getYesterday; + $columns[] = "h_balance_o"; $values[] = $opening; + $columns[] = "h_balance_in"; $values[] = "0"; + $columns[] = "h_balance_out"; $values[] = "0"; + $columns[] = "h_balance_r"; $values[] = "0"; + $columns[] = "h_balance_g"; $values[] = "0"; + $columns[] = "h_balance_e"; $values[] = "0"; + $columns[] = "h_balance_t"; $values[] = $opening; + $columns[] = "h_createddate"; $values[] = date("YmdHis"); + $columns[] = "h_comment"; $values[] = ""; + + if ($TESTMODE) { + echo "[TEST/dry-run][druid=$druid][date=$getYesterday][opening=$opening]$ENT"; + } else { + $jdb->iQuery("tbl_memberhis", $columns, $values); + echo "[INSERT][druid=$druid][date=$getYesterday][opening=$opening]$ENT"; + } + $insertCnt++; +} + +$funcMsg = "ACTION[Cron - Finished - Daily Memberhis Fill] insert=$insertCnt, skip=$skipCnt\n"; +writeLogSafe($func, $logName, $funcMsg); + +$time_end = microtime(true); +$timeStr = "Running Time: " . ($time_end - $time_start) + . " / INSERT: $insertCnt / SKIP: $skipCnt"; + +echo "####[END][$timeStr]####$ENT"; + +?> + + +HostName = $DB_HOST; + $this->UserName = $DB_USER; + $this->UserPass = $DB_PASSWORD; + $this->DBName = $DB_NAME; + + $this->CONNECT(); + } + + function CONNECT() { + $this->DBConn = mysqli_connect($this->HostName, $this->UserName, $this->UserPass, $this->DBName); + if (!$this->DBConn) + $this->errMsg("Database Connection Error !!!", ""); + else + if (!(mysqli_select_db($this->DBConn, $this->DBName))) + $this->errMsg("Database Select Error !!!", ""); + mysqli_query($this->DBConn, "SET NAMES UTF8"); + } + + function nQuery($query, $msg) { + if (!($rlt = mysqli_query($this->DBConn, $query))) + $this->errMsg($msg, $query); + return $rlt; + } + + function mysqli_result($res, $row = 0, $col = 0) { + $numrows = mysqli_num_rows($res); + if ($numrows && $row <= ($numrows - 1) && $row >= 0) { + mysqli_data_seek($res, $row); + $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res); + if (isset($resrow[$col])) { + return $resrow[$col]; + } + } + return false; + } + + function rQuery($query, $msg) { + if (!($rlt = mysqli_query($this->DBConn, $query))) + $this->errMsg($msg, $query); + return $this->mysqli_result($rlt, 0, 0); + } + + function fQuery($query, $msg) { + if (!($rlt = mysqli_query($this->DBConn, $query))) $this->errMsg($msg, $query); + return mysqli_fetch_array($rlt); + } + + function numQuery($query, $msg) { + if (!($rlt = mysqli_query($this->DBConn, $query))) $this->errMsg($msg, $query); + return mysqli_num_rows($rlt); + } + + function iQuery($table, $fields, $values) { + $fields_count = count($fields); + $values_count = count($values); + if ($fields_count != $values_count) + $this->errMsg("Input Data Error.", "Fields # : $fields_count, Value # : $values_count"); + + $fields_que = ""; + $values_que = ""; + for ($i = 0; $i < $fields_count; $i++) { + if (0 < $i) { + $fields_que .= ","; + $values_que .= ","; + } + $fields_que .= $fields[$i]; + $values_que .= "'" . addslashes($values[$i]) . "'"; + } + $this->nQuery("insert into $table ($fields_que) values ($values_que)", "[ $table ] Table Input Error"); + } + + function uQuery($table, $fields, $values, $where = "") { + if (is_array($fields) & is_array($values)) { + $fields_count = count($fields); + $values_count = count($values); + if ($fields_count != $values_count) + $this->errMsg("Input Data Error.", "Fields # : $fields_count, Value # : $values_count"); + + $sub_que = ""; + for ($i = 0; $i < $fields_count; $i++) { + if (0 < $i) + $sub_que .= ","; + $sub_que .= $fields[$i] . "='" . addslashes($values[$i]) . "'"; + } + } + else if (!is_array($fields) & !is_array($values)) + $sub_que = " " . $fields . "='" . addslashes($values) . "' "; + else + $this->errMsg("Input Data Error.", "Fields # : $fields_count, Value # : $values_count"); + + if ($where) $sub_que .= " " . $where; + $this->nQuery("update $table set $sub_que", "[ $table ] Table Input Error"); + } + + function CLOSE() { + mysqli_close($this->DBConn); + $this->DELETE(); + } + + function DELETE() { + unset($this->DBConn); unset($this->UserName); + unset($this->UserPass); unset($this->HostName); + unset($this->DBName); + } + + function errMsg($msg, $query) { + echo("JDB Error Message !!

"); + $msg = mysqli_errno($this->DBConn) . " : " . mysqli_error($this->DBConn) . "

User Message :
" . $msg . "

Query String :
" . $query; + echo("$msg"); + exit; + } +} + +?> \ No newline at end of file