parent
195feeb1d8
commit
2352624821
|
|
@ -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;
|
||||
|
||||
/*
|
||||
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
|
||||
|
||||
if ($startYear == "" || $startMonth == "") {
|
||||
$startYear = date('Y');
|
||||
$startMonth = date('m');
|
||||
$selectStr = ($searchDriver == "ALL") ? "selected" : "";
|
||||
$c_driveruidSTR = "<option value='ALL' $selectStr>ALL</option>";
|
||||
foreach ($drivers as $d) {
|
||||
$sel = ($d['dr_uid'] == $searchDriver) ? "selected" : "";
|
||||
$c_driveruidSTR .= "<option value='" . $d['dr_uid'] . "' $sel>" . htmlspecialchars($d['dr_lastname'] . $d['dr_firstname'] . " (" . $d['dr_initial'] . ")") . "</option>";
|
||||
}
|
||||
$getDriverInitial = ($searchDriver == "ALL") ? "ALL" : "";
|
||||
|
||||
if ($searchDriver == "") $searchDriver = "ALL";
|
||||
$drFilter_d = ($searchDriver == "ALL") ? "" : " AND d_druid = '" . (int)$searchDriver . "' ";
|
||||
$drFilter_h = ($searchDriver == "ALL") ? "" : " AND h_druid = '" . (int)$searchDriver . "' ";
|
||||
|
||||
if ($startYear != "" && $startMonth != "") $add_subqry = " AND (d_orderdate LIKE '$startYear$startMonth%') ";
|
||||
else $add_subqry = "AND (d_orderdate LIKE '".date('Y').date('m')."%') ";
|
||||
function calcDriverBalance($jdb, $APPLYDATE, $druid, $asOf)
|
||||
{
|
||||
static $cache = array();
|
||||
|
||||
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' ";
|
||||
$druid = (int)$druid;
|
||||
$asOf = preg_replace('/[^0-9]/', '', $asOf);
|
||||
$applyDay = substr($APPLYDATE, 0, 8);
|
||||
|
||||
//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 ";
|
||||
if (!isset($cache[$druid])) {
|
||||
$c = array(
|
||||
'out' => array(),
|
||||
'in' => array(),
|
||||
'r' => array(),
|
||||
'g' => array(),
|
||||
'days_out' => array(),
|
||||
);
|
||||
|
||||
$total_count=$jdb->rQuery($query, "record query error");
|
||||
//echo "<br><br><br><br><br>[$total_count][$query]<br>";
|
||||
|
||||
//페이징변수설정
|
||||
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
|
||||
$q1 = "SELECT SUBSTRING(d_visitdate,1,8) AS dd, SUM(d_payamount) AS amt
|
||||
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<sizeof($list); $i++) {
|
||||
//list($key, $value) = each($list);
|
||||
foreach ( (Array) $list as $key => $value )
|
||||
$$key = $value;
|
||||
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'];
|
||||
}
|
||||
|
||||
//$signupdateStr = $func -> convertFormat ($MSIGNUPDATE, 1);
|
||||
$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'];
|
||||
|
||||
//$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<sizeof($rt); $i++)
|
||||
{
|
||||
//list($key, $value) = each($result);
|
||||
foreach ( (Array) $rt as $key => $value )
|
||||
$$key = $value;
|
||||
$c['in'][$d] = (float)$row['h_balance_in'];
|
||||
$c['r'][$d] = (float)$row['h_balance_r'];
|
||||
$c['g'][$d] = (float)$row['h_balance_g'];
|
||||
}
|
||||
|
||||
$h_commentSTR = str_replace("\\", "", $h_comment);
|
||||
$cache[$druid] = $c;
|
||||
}
|
||||
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' ";
|
||||
$c = $cache[$druid];
|
||||
|
||||
$cashoutTODAY = $jdb->rQuery($qry_cashouttoday, "fetch query error");
|
||||
//echo"<br>[$qry_cashouttoday]<br>";
|
||||
$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;
|
||||
|
||||
// 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 ";
|
||||
$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; }
|
||||
|
||||
$cashinTODAY = $jdb->rQuery($qry_cashintoday, "fetch query error");
|
||||
//echo"[$qry_cashintoday]<br>";
|
||||
$balance = $cashinSUM + $cashinTODAY - $cashrtTODAY - $cashoutTODAY - $cashrtSUM - $cashoutSUM;
|
||||
$openingbalance = $cashinSUM - $cashrtSUM - $cashoutSUM;
|
||||
|
||||
// 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]<br>";
|
||||
|
||||
// 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]<br>";
|
||||
|
||||
// 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]<br>";
|
||||
|
||||
// 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]<br>";
|
||||
|
||||
$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";
|
||||
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 .= "
|
||||
<tr>
|
||||
<td>$list_number</td>
|
||||
<td>$d_orderdateSTR</td>
|
||||
<td>$m_lastname$m_firstname ($m_initial)</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">$openingbalance</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">$h_balance_in</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">$cashoutTODAY</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">$cashrtTODAY</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">$balance</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">$h_balance_g</td>
|
||||
</tr>
|
||||
|
||||
";
|
||||
|
||||
<td>$dateLabel</td>
|
||||
<td>$driverShow</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">" . number_format($b['opening'], 2) . "</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">" . number_format($b['cashin'], 2) . "</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">" . number_format($b['cashout'], 2) . "</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">" . number_format($b['cashrt'], 2) . "</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">" . number_format($b['balance'], 2) . "</td>
|
||||
<td style=\"text-align:right; padding-right:20px;\">" . number_format($b['gas'], 2) . "</td>
|
||||
</tr>";
|
||||
$list_number--;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if( $total_count < 1 ) {
|
||||
$strList = "
|
||||
<tr><td colspan='9' align=center height='30'><B>No Data</B></td></tr>
|
||||
";
|
||||
if ($total_count == 0) {
|
||||
$strList = "<tr><td colspan='9' align='center' height='30'><b>No Data</b></td></tr>";
|
||||
}
|
||||
|
||||
// Get Cash In, Return, Gas SUM
|
||||
$qry_sum = "SELECT
|
||||
$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 >= '".substr($APPLYDATE,0,8)."' AND h_date LIKE '".$startYear.$startMonth."%' ". $add_hsubqry
|
||||
;
|
||||
//echo "LIST_TOT[$qry_sum]<br>";
|
||||
$rt_sum = $jdb->fQuery($qry_sum, "fetch query error");
|
||||
WHERE h_date >= '$periodStart' AND h_date <= '$periodEnd'
|
||||
$drFilter_h ";
|
||||
$rt_sum = $jdb->fQuery($qry_sum, "sum 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, '.', ',');
|
||||
$sumIn = (float)$rt_sum['CASHINSUM'];
|
||||
$sumRt = (float)$rt_sum['CASHRETURNSUM'];
|
||||
$sumGas = (float)$rt_sum['GASSUM'];
|
||||
|
||||
// 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 . "
|
||||
$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");
|
||||
|
||||
$getCASHOUTSUM = $jdb->rQuery($qry_cashouttoday, "fetch query error");
|
||||
$getCASHOUTSUM = number_format(floatval($getCASHOUTSUM), 2, '.', ',');
|
||||
$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'];
|
||||
|
||||
|
||||
// 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 = "
|
||||
<option value='ALL' $selectStr>ALL</option>";
|
||||
|
||||
while($lt_dr=mysqli_fetch_array($rt_dr, MYSQLI_ASSOC)) {
|
||||
|
||||
if ($lt_dr['dr_uid'] == $searchDriver) $selectStr = "selected";
|
||||
else $selectStr = "";
|
||||
|
||||
$c_driveruidSTR .= "
|
||||
<option value='".$lt_dr['dr_uid']."' $selectStr>".$lt_dr['dr_lastname'].$lt_dr['dr_firstname']." (".$lt_dr['dr_initial'].")</option>";
|
||||
|
||||
}
|
||||
|
||||
//echo "<br><br><br><br><br>###[$searchDriver]###";
|
||||
|
||||
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);
|
||||
// 기간초(periodStart) 시점 잔액 = 그날의 opening
|
||||
$ob = calcDriverBalance($jdb, $APPLYDATE, $ed['druid'], $periodStart);
|
||||
$sumOpenBal += $ob['opening'];
|
||||
}
|
||||
else $setTmp = "";
|
||||
$strYear .= " <option value='$i' $setTmp>$i</option>";
|
||||
|
||||
$_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);
|
||||
|
||||
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 .= " <option value='$j' $setTmp>$j</option>";
|
||||
}
|
||||
|
||||
|
||||
addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno);
|
||||
|
||||
addLog("add", "EXPENSE LIST", "VIEW", $lguserid, "report_expense", $lgno);
|
||||
?>
|
||||
|
||||
<main id="main" class="main">
|
||||
|
|
@ -370,64 +314,245 @@ addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno);
|
|||
|
||||
<div class="wrap-border">
|
||||
|
||||
<FORM METHOD=POST NAME=form2 action='<?=$_SERVER["PHP_SELF"]?>'>
|
||||
<INPUT TYPE=HIDDEN NAME=view VALUE='report_expense'>
|
||||
<style>
|
||||
|
||||
<table class="table-search-customer-2">
|
||||
.qbtn{
|
||||
display:inline-block;
|
||||
padding:5px 10px;
|
||||
margin:0;
|
||||
border:1px solid #f5821f;
|
||||
background:#fff;
|
||||
color:#f5821f;
|
||||
border-radius:4px;
|
||||
font-size:14px;
|
||||
cursor:pointer;
|
||||
vertical-align:middle;
|
||||
white-space:nowrap;
|
||||
box-sizing:border-box;
|
||||
}
|
||||
.qbtn:hover{ background:#fde6d2; }
|
||||
.qbtn.active{ background:#f5821f; color:#fff; }
|
||||
|
||||
.sumcard{ transition:background 0.15s, box-shadow 0.15s; cursor:default; }
|
||||
.sumcard:hover{ background:#f3f7f4 !important; box-shadow:0 2px 10px rgba(16,24,40,0.10); }
|
||||
.sumcard-strong:hover{ background:#e4efe7 !important; box-shadow:0 2px 10px rgba(46,83,64,0.16); }
|
||||
.sumcard-gas:hover{ background:#fdecd9 !important; box-shadow:0 2px 10px rgba(245,130,31,0.20); }
|
||||
</style>
|
||||
|
||||
<?php /* 검색 폼은 아래 요약 영역 오른쪽으로 이동됨 */ ?>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
(function(){
|
||||
var fromEl = document.getElementById('fromDate');
|
||||
var toEl = document.getElementById('toDate');
|
||||
|
||||
var ref = document.getElementById('searchBtn');
|
||||
var qbtns = document.querySelectorAll('.qbtn');
|
||||
if (ref) {
|
||||
var h = ref.offsetHeight;
|
||||
if (h > 0) {
|
||||
for (var x=0; x<qbtns.length; x++){ qbtns[x].style.height = h + 'px'; qbtns[x].style.boxSizing = 'border-box'; }
|
||||
|
||||
var drv = document.getElementById('searchDriver');
|
||||
if (drv) { drv.style.height = h + 'px'; drv.style.boxSizing = 'border-box'; }
|
||||
if (fromEl) { fromEl.style.height = h + 'px'; fromEl.style.boxSizing = 'border-box'; }
|
||||
if (toEl) { toEl.style.height = h + 'px'; toEl.style.boxSizing = 'border-box'; }
|
||||
}
|
||||
}
|
||||
function fmt(d){
|
||||
var y=d.getFullYear(), m=('0'+(d.getMonth()+1)).slice(-2), dd=('0'+d.getDate()).slice(-2);
|
||||
return y+'-'+m+'-'+dd;
|
||||
}
|
||||
var btns = document.querySelectorAll('.qbtn');
|
||||
for (var i=0;i<btns.length;i++){
|
||||
btns[i].addEventListener('click', function(){
|
||||
var n=new Date(), s, e, r=this.getAttribute('data-range');
|
||||
if(r==='today'){ s=new Date(n); e=new Date(n); }
|
||||
else if(r==='yesterday'){ s=new Date(n); s.setDate(n.getDate()-1); e=new Date(s); }
|
||||
else if(r==='thismonth'){ s=new Date(n.getFullYear(),n.getMonth(),1); e=new Date(n); }
|
||||
else if(r==='lastmonth'){ s=new Date(n.getFullYear(),n.getMonth()-1,1); e=new Date(n.getFullYear(),n.getMonth(),0); }
|
||||
else if(r==='twomonths'){ s=new Date(n.getFullYear(),n.getMonth()-2,1); e=new Date(n.getFullYear(),n.getMonth()-1,0); }
|
||||
else if(r==='last7'){ s=new Date(n); s.setDate(n.getDate()-6); e=new Date(n); }
|
||||
else if(r==='thisyear'){ s=new Date(n.getFullYear(),0,1); e=new Date(n); }
|
||||
if(fromEl) fromEl.value=fmt(s);
|
||||
if(toEl) toEl.value=fmt(e);
|
||||
for(var k=0;k<btns.length;k++){ btns[k].classList.remove('active'); }
|
||||
this.classList.add('active');
|
||||
document.getElementById('form2').submit();
|
||||
});
|
||||
}
|
||||
|
||||
(function(){
|
||||
if(!fromEl || !toEl) return;
|
||||
var n=new Date();
|
||||
function fmt2(d){ var y=d.getFullYear(),m=('0'+(d.getMonth()+1)).slice(-2),dd=('0'+d.getDate()).slice(-2); return y+'-'+m+'-'+dd; }
|
||||
|
||||
var y1=new Date(); y1.setDate(n.getDate()-1);
|
||||
var l7=new Date(); l7.setDate(n.getDate()-6);
|
||||
var ranges = {
|
||||
today: [fmt2(n), fmt2(n)],
|
||||
yesterday: [fmt2(y1), fmt2(y1)],
|
||||
last7: [fmt2(l7), fmt2(n)],
|
||||
thismonth: [fmt2(new Date(n.getFullYear(),n.getMonth(),1)), fmt2(n)],
|
||||
lastmonth: [fmt2(new Date(n.getFullYear(),n.getMonth()-1,1)), fmt2(new Date(n.getFullYear(),n.getMonth(),0))],
|
||||
twomonths: [fmt2(new Date(n.getFullYear(),n.getMonth()-2,1)), fmt2(new Date(n.getFullYear(),n.getMonth()-1,0))],
|
||||
thisyear: [fmt2(new Date(n.getFullYear(),0,1)), fmt2(n)]
|
||||
};
|
||||
var cur = fromEl.value + '|' + toEl.value;
|
||||
for(var key in ranges){
|
||||
if(ranges[key][0] + '|' + ranges[key][1] === cur){
|
||||
for(var k=0;k<btns.length;k++){
|
||||
if(btns[k].getAttribute('data-range') === key){ btns[k].classList.add('active'); }
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
})();
|
||||
})();
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="container section-oil-history-details" data-aos="fade-up" style="margin-top:-32px;">
|
||||
|
||||
<?php $diffNum = (float)str_replace(',', '', $getINOUTDIFF); $diffNeg = ($diffNum < 0); ?>
|
||||
|
||||
<?php
|
||||
function sumCard($label, $value, $variant='') {
|
||||
$strong = ($variant === 'strong');
|
||||
$gas = ($variant === 'gas');
|
||||
if ($gas) {
|
||||
$border = '#fbd9b6'; $bg = '#fff7ef'; $valColor = '#f5821f';
|
||||
$cls = 'sumcard sumcard-gas';
|
||||
} elseif ($strong) {
|
||||
$border = '#cfe0d4'; $bg = '#f7faf8'; $valColor = '#2e5340';
|
||||
$cls = 'sumcard sumcard-strong';
|
||||
} else {
|
||||
$border = '#ebeeec'; $bg = '#fff'; $valColor = '#2f3a33';
|
||||
$cls = 'sumcard';
|
||||
}
|
||||
$labelColor = $gas ? '#f5821f' : '#9aa4a0';
|
||||
$valWeight = '500';
|
||||
echo '<div class="'.$cls.'" style="flex:0 0 auto; width:172px; height:132px; box-sizing:border-box; display:flex; flex-direction:column; align-items:center; background:'.$bg.'; border:1px solid '.$border.'; border-radius:14px; padding:24px 12px; text-align:center; box-shadow:0 1px 3px rgba(16,24,40,0.04);">';
|
||||
echo '<div style="height:32px; display:flex; align-items:center; justify-content:center; font-size:10.5px; font-weight:500; letter-spacing:0.09em; text-transform:uppercase; line-height:1.4; color:'.$labelColor.';">'.$label.'</div>';
|
||||
echo '<div style="flex:1 1 auto; display:flex; align-items:center; color:'.$valColor.'; font-size:21px; font-weight:'.$valWeight.'; letter-spacing:0.01em; font-variant-numeric:tabular-nums;">'.$value.'</div>';
|
||||
echo '</div>';
|
||||
}
|
||||
function opSign($s) {
|
||||
$color = '#b4bbb6';
|
||||
if ($s === '+') $color = '#7fae8c';
|
||||
if ($s === '−') $color = '#d4a5ad';
|
||||
$size = ($s === ',') ? '40px' : '26px';
|
||||
$w = ($s === ',') ? '44px' : '36px';
|
||||
if ($s === ',') {
|
||||
$inner = '<span style="display:inline-block; transform:translateY(-0.35em);">,</span>';
|
||||
} else {
|
||||
$inner = $s;
|
||||
}
|
||||
echo '<div style="flex:0 0 auto; width:'.$w.'; align-self:center; display:flex; align-items:center; justify-content:center; height:132px; font-size:'.$size.'; color:'.$color.'; font-weight:600;">'.$inner.'</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 검색 (원본 형태) -->
|
||||
<form method="post" name="form2" id="form2" action="<?=$_SERVER["PHP_SELF"]?>">
|
||||
<input type="hidden" name="view" value="report_expense">
|
||||
|
||||
<table class="table-search-customer-2" style="width:100%; margin-left:0;">
|
||||
<tr>
|
||||
<td class="td-title">
|
||||
<select name="searchDriver" id="searchDriver" class="custom-select">
|
||||
<td class="td-title" style="width:1%; white-space:nowrap;">
|
||||
<button type="button" class="qbtn" data-range="today">Today</button>
|
||||
<button type="button" class="qbtn" data-range="yesterday">Yesterday</button>
|
||||
<button type="button" class="qbtn" data-range="last7">Last 7 Days</button>
|
||||
<button type="button" class="qbtn" data-range="thismonth">This Month</button>
|
||||
<button type="button" class="qbtn" data-range="lastmonth">Last Month</button>
|
||||
<button type="button" class="qbtn" data-range="twomonths">2 Months Ago</button>
|
||||
<button type="button" class="qbtn" data-range="thisyear">This Year</button>
|
||||
</td>
|
||||
|
||||
<td class="td-title" style="width:1%; white-space:nowrap; padding-left:14px;">
|
||||
<select name="searchDriver" id="searchDriver" class="custom-select" style="width:200px; font-size:15px;">
|
||||
<?=$c_driveruidSTR?>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td class="td-title">
|
||||
<select name="startYear" id="startYear" class="custom-select">
|
||||
<?=$strYear?>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td class="td-title">
|
||||
<select name="startMonth" id="startMonth" class="custom-select">
|
||||
<?=$strMonth?>
|
||||
</select>
|
||||
<td class="td-title" style="width:1%; white-space:nowrap; padding-left:14px;">
|
||||
<input type="date" name="fromDate" id="fromDate" class="custom-select"
|
||||
value="<?=$fromDateVal?>" style="width:150px; font-size:15px;">
|
||||
<span style="margin:0 4px;">~</span>
|
||||
<input type="date" name="toDate" id="toDate" class="custom-select"
|
||||
value="<?=$toDateVal?>" style="width:150px; font-size:15px;">
|
||||
</td>
|
||||
|
||||
<td align="right">
|
||||
<button type="submit" class="btn-add">SEARCH</button>
|
||||
<button type="submit" class="btn-add" id="searchBtn">SEARCH</button>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
</FORM>
|
||||
|
||||
</div><!--wrap-border-->
|
||||
|
||||
|
||||
<div class="container section-oil-history-details" data-aos="fade-up">
|
||||
<table class="tb-info-box oil-qty-tb">
|
||||
<tr>
|
||||
<td class="td-title-info">PERIOD</td>
|
||||
<td class="td-title-info">DRIVER</td>
|
||||
<td class="td-title-info">CASH IN</td>
|
||||
<td class="td-title-info">CASH OUT</td>
|
||||
<td class="td-title-info">CASH RETURN</td>
|
||||
<td class="td-title-info">GAS</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td-text-info"><?=$startYear?>-<?=$startMonth?></td>
|
||||
<td class="td-text-info"><?=$getDriverInitial?></td>
|
||||
<td class="td-text-info"><span class="sp-oil"><?=$getCASHINSUM?></span></td>
|
||||
<td class="td-text-info"><span class="sp-oil"><?=$getCASHOUTSUM?></span></td>
|
||||
<td class="td-text-info"><span class="sp-oil"><?=$getCASHRETURNSUM?></span></td>
|
||||
<td class="td-text-info"><span class="sp-oil"><?=$getGASSUM?></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<div style="height:28px;"></div>
|
||||
|
||||
<!-- 요약 패널 -->
|
||||
<div style="background:#fafbfa; border:1px solid #eef0ee; border-radius:16px; padding:22px 24px 26px;">
|
||||
|
||||
<!-- 패널 헤더: SUMMARY (좌) + PERIOD (우) -->
|
||||
<div style="display:flex; align-items:baseline; justify-content:space-between; margin-bottom:20px; padding:0 2px;">
|
||||
<span style="display:inline-flex; align-items:baseline; gap:10px;">
|
||||
<span style="font-size:12px; font-weight:400; letter-spacing:0.12em; text-transform:uppercase; color:#6b7770;">Summary</span>
|
||||
<span style="font-size:11px; font-weight:400; letter-spacing:0.03em; color:#adb4af;">/ From the driver's perspective</span>
|
||||
</span>
|
||||
<span style="font-size:12px; letter-spacing:0.04em; color:#9aa0a6;">PERIOD · <?=$periodLabel?></span>
|
||||
</div>
|
||||
|
||||
<!-- 카드 섹션 전체를 가운데 정렬: 안쪽은 고정폭 기준으로 정렬 일치 -->
|
||||
<div style="display:flex; justify-content:center;">
|
||||
<div style="display:inline-block;">
|
||||
|
||||
<!-- 가로 카드 줄 (연산자 포함) -->
|
||||
<div style="display:flex; gap:14px; align-items:center; justify-content:flex-start; flex-wrap:nowrap;">
|
||||
<?php sumCard('OPENING BALANCE', $getOPENINGSUM); ?>
|
||||
<?php opSign('+'); ?>
|
||||
<?php sumCard('CASH IN', $getCASHINSUM); ?>
|
||||
<?php opSign('−'); ?>
|
||||
<?php sumCard('CASH OUT', $getCASHOUTSUM); ?>
|
||||
<?php opSign('−'); ?>
|
||||
<?php sumCard('CASH RETURN', $getCASHRETURNSUM); ?>
|
||||
<?php opSign('='); ?>
|
||||
<?php sumCard('CASH ON HAND', $getENDBALANCESUM, 'strong'); ?>
|
||||
<div style="flex:0 0 auto; width:16px;"></div>
|
||||
<?php opSign(','); ?>
|
||||
<div style="flex:0 0 auto; width:4px;"></div>
|
||||
<?php sumCard('GAS', $getGASSUM, 'gas'); ?>
|
||||
</div>
|
||||
|
||||
<!-- CASH IN − CASH OUT: 왼쪽 기준 정렬이라 위 카드줄과 x좌표 일치 -->
|
||||
<div style="display:flex; align-items:flex-start;">
|
||||
<!-- OPENING(172) + gap(14) + '+'(36) + gap(14) = 236 → CASH IN 시작 -->
|
||||
<div style="flex:0 0 auto; width:236px;"></div>
|
||||
<div style="flex:0 0 auto; width:408px; position:relative;">
|
||||
<svg width="408" height="46" viewBox="0 0 408 46" style="display:block;">
|
||||
<path d="M86 2 L86 20 Q86 32 98 32 L306 32 Q318 32 318 20 L318 2"
|
||||
fill="none" stroke="#c4c9c5" stroke-width="2" stroke-dasharray="0.1 7" stroke-linecap="round"/>
|
||||
</svg>
|
||||
<div style="position:absolute; left:50%; top:24px; transform:translateX(-50%); background:#fafbfa; padding:0 12px; white-space:nowrap;">
|
||||
<span style="font-size:11px; letter-spacing:0.05em; color:#8a9095;">CASH IN − CASH OUT</span>
|
||||
</div>
|
||||
<div style="text-align:center; margin-top:2px;">
|
||||
<span style="font-size:18px; font-weight:500; font-variant-numeric:tabular-nums; color:<?=($diffNeg?'#c0392b':'#2e5340')?>;"><?=$getINOUTDIFF?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="height:8px;"></div>
|
||||
|
||||
</div>
|
||||
<!-- /요약 패널 -->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -445,58 +570,25 @@ addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno);
|
|||
<th style="text-align:right; padding-right:20px;">Gas</th>
|
||||
</tr>
|
||||
|
||||
<?=$strList?>
|
||||
|
||||
<!--
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>2023-09-20</td>
|
||||
<td>D.S</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>2023-09-20</td>
|
||||
<td>D.S</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
<td style="text-align:right; padding-right:20px;">$ 200.00</td>
|
||||
</tr>
|
||||
-->
|
||||
<?=$strList?>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="container-inner">
|
||||
<div class="pagination">
|
||||
<!--a href="#" ><i class="bi bi-arrow-left"></i></a>
|
||||
<a href="#"class="active">1</a>
|
||||
<a href="#">2</a>
|
||||
<a href="#">3</a>
|
||||
<a href="#">4</a>
|
||||
<a href="#">5</a>
|
||||
<a href="#">6</a>
|
||||
<a href="#"><i class="bi bi-arrow-right"></i></a-->
|
||||
|
||||
<?
|
||||
|
||||
$page_string = "view=$view&key_word=$key_word&key_CTGSEQ=$key_CTGSEQ&column=$column&mode=$mode&switched=$getSWHStr&startYear=$startYear&startMonth=$startMonth&searchDriver=$searchDriver";
|
||||
$paging = new PAGE('page',$total_count,$list_count,$page_count,$page,$page_string,'#c71930','','','#c71930','');
|
||||
|
||||
?>
|
||||
<?php
|
||||
$page_string = "view=report_expense"
|
||||
. "&searchDriver=" . $searchDriver
|
||||
. "&fromDate=" . $fromDateVal
|
||||
. "&toDate=" . $toDateVal
|
||||
. "&s_in=" . $sumIn . "&s_rt=" . $sumRt
|
||||
. "&s_gas=" . $sumGas . "&s_out=" . $sumOut;
|
||||
|
||||
if ($total_count > $list_count && class_exists('PAGE')) {
|
||||
$paging = new PAGE('page', $total_count, $list_count, $page_count, $page, $page_string, '#c71930', '', '', '#c71930', '');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,274 @@
|
|||
<?php
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// CRON - 매일 새벽 실행
|
||||
//
|
||||
// dr_status='A' + dr_type='UCO' 드라이버 중, 대상일에 tbl_memberhis
|
||||
// 기록이 없는 사람에게 "무거래" 레코드를 만들어 잔액을 이어준다.
|
||||
//
|
||||
// 실행:
|
||||
// CLI : /usr/local/bin/php -q /var/www/html/lib/runDailyMemberhis.php
|
||||
// 웹 : https://goi.ifreshy.com/lib/runDailyMemberhis.php?PUTDAY=20250612
|
||||
//
|
||||
// 테스트(저장 안 함):
|
||||
// 웹 : ...?PUTDAY=20250612&TEST=1
|
||||
// CLI : ...runDailyMemberhis.php "0" "2000" "20250612" "TEST"
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
date_default_timezone_set('America/Toronto');
|
||||
|
||||
$time_start = microtime(true);
|
||||
|
||||
$mode = (PHP_SAPI === 'cli') ? "SHELL" : "WEB";
|
||||
|
||||
if ($mode == "SHELL") {
|
||||
$GETDIR = "/var/www/html";
|
||||
$ROWCNT = $argv[1] ?? "";
|
||||
$LIMITCNT = $argv[2] ?? "";
|
||||
$getYesterday = $argv[3] ?? date('Ymd', strtotime('-1 days'));
|
||||
$ENT = "\n";
|
||||
} else {
|
||||
$GETDIR = getenv("DOCUMENT_ROOT");
|
||||
$ROWCNT = $_GET['ROWCNT'] ?? "";
|
||||
$LIMITCNT = $_GET['LIMITCNT'] ?? "";
|
||||
if (!empty($_GET['PUTDAY'])) {
|
||||
$getYesterday = $_GET['PUTDAY'];
|
||||
} else {
|
||||
$getYesterday = date('Ymd', strtotime('-1 days'));
|
||||
}
|
||||
$ENT = "<br>";
|
||||
}
|
||||
|
||||
// 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";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
class JDB {
|
||||
VAR $HostName = "";
|
||||
VAR $UserName = "";
|
||||
VAR $UserPass = "";
|
||||
VAR $DBName = "";
|
||||
VAR $DBConn = "";
|
||||
|
||||
function __construct() {
|
||||
$DB_HOST = "mis-mysql";
|
||||
$DB_NAME = "goiintra_db";
|
||||
$DB_USER = "goiintra_root";
|
||||
$DB_PASSWORD = "==";
|
||||
|
||||
$this->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)", "[ <i>$table</i> ] 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", "[ <i>$table</i> ] 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("<b>JDB Error Message !!</b><p>");
|
||||
$msg = mysqli_errno($this->DBConn) . " : " . mysqli_error($this->DBConn) . "<p><b>User Message</b> :<br> " . $msg . "<p><b>Query String</b> :<br> " . $query;
|
||||
echo("$msg");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Reference in New Issue