checkLevelModal(9); // 기능 제한 (Admin : 1, Staff : 5, Accounting : 6, Driver : 9 만 가능) $permit = array("1", "3", "5", "6", "7", "9"); if (in_array($_SESSION['ss_LEVEL'], $permit)) { $setTag = "ENABLED"; } else { $setTag = "DISABLED"; $msg = "Sorry, You don't have permission. Please contact Administrator."; $func -> modalMsg ($msg, "/index_intranet.php"); exit(); } $APPLYDATE = "20260316000000"; $applyDay = substr($APPLYDATE, 0, 8); $fromRaw = isset($_REQUEST['fromDate']) ? preg_replace('/[^0-9]/', '', $_REQUEST['fromDate']) : ''; $toRaw = isset($_REQUEST['toDate']) ? preg_replace('/[^0-9]/', '', $_REQUEST['toDate']) : ''; 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'])); } 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; } $selectStr = ($searchDriver == "ALL") ? "selected" : ""; $c_driveruidSTR = ""; foreach ($drivers as $d) { $sel = ($d['dr_uid'] == $searchDriver) ? "selected" : ""; $c_driveruidSTR .= ""; } $getDriverInitial = ($searchDriver == "ALL") ? "ALL" : ""; $drFilter_d = ($searchDriver == "ALL") ? "" : " AND d_druid = '" . (int)$searchDriver . "' "; $drFilter_h = ($searchDriver == "ALL") ? "" : " AND h_druid = '" . (int)$searchDriver . "' "; 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 (!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; $drFilter_u = ($searchDriver == "ALL") ? "" : " AND druid = '" . (int)$searchDriver . "' "; $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 "; $qry_count = "SELECT COUNT(*) FROM ( $qry_union ) AS CNT "; $total_count = (int)$jdb->rQuery($qry_count, "count error"); $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"); $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); $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--; } if ($total_count == 0) { $strList = "No Data"; } $sumKey = $periodStart . '_' . $periodEnd . '_' . $searchDriver; $needCalc = true; if (isset($_SESSION['exp_sumkey']) && $_SESSION['exp_sumkey'] === $sumKey && isset($_SESSION['exp_sum'])) { $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; } 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, "report_expense", $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
No Date Driver Opening Balance Cash In Cash Out Cash Return Balance Gas