470 lines
18 KiB
PHP
470 lines
18 KiB
PHP
<?php
|
|
require_once("include/globals.php");
|
|
|
|
if (SessionActive() != 1 || ! UserLoggedIn()) {
|
|
header("Location: /");
|
|
exit();
|
|
}
|
|
|
|
|
|
//
|
|
// Process all actions to list and edit records
|
|
//
|
|
$action = "user-balances";
|
|
$CurrentTable = "user_balance_save";
|
|
$TitleText = getLanguageText('TEXT-USER-ACCOUNT-BALANCES');
|
|
$OrderBy = "last_name,first_name";
|
|
|
|
|
|
// Start the template and output buffering
|
|
startTemplate();
|
|
$templatePageTitle = "$TitleText " . getLanguageText('TEXT-ADMINISTRATION');
|
|
|
|
|
|
$moduleName = "user_balances.php";
|
|
// if ($_SESSION['UserInfo']['type'] == 'SuperUser') startLog($moduleName);
|
|
writeLog(print_r($_SESSION, true));
|
|
|
|
|
|
// Ensure that only valid user types have access to this module
|
|
$AllowedUserTypes = array('SuperUser','System Administrator');
|
|
if (checkPermission($AllowedUserTypes) != 1) {
|
|
$error_message = getLanguageText('ERRORMSG-ACCESS-DENIED');
|
|
include "form.messages.php";
|
|
endTemplate();
|
|
exit();
|
|
}
|
|
|
|
|
|
$school_num = $school_record['record_num'];
|
|
|
|
if (array_key_exists('naction',$_GET)) $naction = $_GET['naction'];
|
|
if (array_key_exists('naction',$_POST)) $naction = $_POST['naction'];
|
|
|
|
switch (strtolower($naction)) {
|
|
case "save":
|
|
$linked_sites = $school_record['linked_sites'];
|
|
$query = "SELECT email,userid,first_name,last_name,type,status,receive_emails,sum(ua.transaction_amount) as balance,trx_status,u.record_num " .
|
|
"FROM users AS u LEFT JOIN user_account AS ua ON user_num = u.record_num and (ua.deleted != 'Y' or ua.deleted is null) " .
|
|
"WHERE u.school_num = $base_school_num " .
|
|
"AND ua.school_num IN ($linked_sites) " .
|
|
"AND u.record_num = ua.user_num " .
|
|
"GROUP BY 1,2,3,4,5,6,7,9,10 " .
|
|
"HAVING sum(ua.transaction_amount) != 0 " .
|
|
"ORDER BY $OrderBy";
|
|
writeLog($query);
|
|
$results = db_query($query);
|
|
$num = db_num_rows($results);
|
|
writeLog("Num Balances: $num");
|
|
|
|
if (db_num_rows($results)) {
|
|
db_query("DELETE FROM user_balance_save WHERE school_num = $school_num");
|
|
$ubs = new Table($CurrentTable);
|
|
$balance_year = date("Y",time());
|
|
$posted = 'N';
|
|
$saved_date = date("Y-m-d", time());
|
|
|
|
$count = 0;
|
|
while ($row = db_fetch_array($results)) {
|
|
extract($row);
|
|
writeLog("$userid - $first_name $last_name");
|
|
|
|
$original_user_num = $record_num;
|
|
$original_userid = db_escape_string($userid);
|
|
$original_type = $type;
|
|
|
|
// Get account history
|
|
if ($balance > 0) {
|
|
$query = "SELECT * FROM user_account " .
|
|
"WHERE school_num = $school_num " .
|
|
"AND user_num = $original_user_num " .
|
|
"AND transaction_status = 'Open' " .
|
|
"AND transaction_amount > 0 " .
|
|
"AND abs(amount_paid) < transaction_amount";
|
|
$trx = db_query($query);
|
|
|
|
$trx_history = "";
|
|
while ($row = db_fetch_assoc($trx)) {
|
|
extract($row);
|
|
|
|
$sname = "";
|
|
if ($schedule_num > 0) {
|
|
$sname = "(" . db_getVal("SELECT schedule_name FROM hotlunch_schedules WHERE school_num = $school_num AND record_num = $schedule_num") . ") ";
|
|
}
|
|
$transaction_amount = '$' . number_format($transaction_amount,2);
|
|
$trx_history .= "$transaction_type: $transaction_amount - $sname$note\n";
|
|
}
|
|
}
|
|
|
|
$query = $ubs->BuildInsert();
|
|
writeLog($query);
|
|
writeLog("---------------------------");
|
|
db_query($query);
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
$form_message = getLanguageText('MSG-USER-BALANCES-SAVED');
|
|
$naction = 'list';
|
|
header("Location: /?action=$action&naction=$naction&form_message=" . urlencode($form_message) . "&error_message=" . urlencode($error_message));
|
|
exit();
|
|
|
|
case "delete":
|
|
$dTitle = getLanguageText('TEXT-ALL-RECORDS');
|
|
include "delete.form.php";
|
|
break;
|
|
|
|
case "delete-confirmed":
|
|
db_query("DELETE FROM $CurrentTable WHERE school_num = $school_num");
|
|
$form_message = getLanguageText('MSG-USER-BALANCES-DELETED');
|
|
$naction = 'list';
|
|
header("Location: /?action=$action&naction=$naction&form_message=" . urlencode($form_message) . "&error_message=" . urlencode($error_message));
|
|
exit();
|
|
}
|
|
|
|
$cMonth = date("m",time());
|
|
switch ($cMonth) {
|
|
case '04':
|
|
case '05':
|
|
$days = 0;
|
|
break;
|
|
|
|
case '06':
|
|
case '07':
|
|
case '08':
|
|
case '09':
|
|
case '10':
|
|
$days = 150;
|
|
break;
|
|
|
|
case '11':
|
|
case '12':
|
|
$days = 210;
|
|
break;
|
|
|
|
case '01':
|
|
$days = 250;
|
|
break;
|
|
|
|
case '02':
|
|
$days = 270;
|
|
break;
|
|
|
|
case '03':
|
|
$days = 300;
|
|
break;
|
|
}
|
|
|
|
|
|
$cutoff = date("Y-m-d",time() - 60 * 60 * 24 * 5);
|
|
|
|
$numSaved = db_getVal("SELECT count(*) FROM user_balance_save WHERE school_num = $school_num");
|
|
$numPosted = db_getVal("SELECT count(*) FROM user_balance_save WHERE school_num = $school_num AND posted = 'Y'");
|
|
|
|
if ($numSaved > 0) $saved_date = db_getVal("SELECT max(saved_date) FROM user_balance_save WHERE school_num = $school_num");
|
|
if (isset($saved_date)) {
|
|
$numParents = db_getVal("SELECT count(*) FROM users WHERE school_num = $base_school_num AND type = 'Parent' AND date_added < '$saved_date'");
|
|
}
|
|
else {
|
|
$numParents = db_getVal("SELECT count(*) FROM users WHERE school_num = $base_school_num AND type = 'Parent' AND date_added < '$cutoff'");
|
|
$numParents = db_getVal("SELECT count(*) FROM users WHERE school_num = $base_school_num AND type = 'Parent'");
|
|
}
|
|
|
|
include "form.messages.php";
|
|
?>
|
|
<br>
|
|
<?php if (!isset($naction) && $numSaved) echo(" <p>" . getLanguageText('TEXT-USER-ACCOUNT-BALANCES') . ": $numSaved ($saved_date)</p>\n"); ?>
|
|
<table cellpadding='5' cellspacing='2' border='0'>
|
|
<tr>
|
|
<?php if ($numParents > 0 && (!isset($saved_date) || $saved_date < $cutoff)) { ?>
|
|
<td align='center'><a href='?action=user-balances&naction=save' id='save-balances' class='btn btn--primary'><?php displayLanguageText('TEXT-SAVE-BALANCES'); ?></a></td>
|
|
<?php if ($numSaved == 0) { ?>
|
|
<td align='center'><a href='#' id='clear-selected-balances' class='btn btn--primary'><?php displayLanguageText('TEXT-CLEAR-SELECTED-USER-BALANCES'); ?></a></td>
|
|
<?php } ?>
|
|
<?php } ?>
|
|
<?php if ($numSaved > 0) { ?>
|
|
<td align='center'><a href='?action=user-balances&naction=list' class='btn btn--primary'><?php displayLanguageText('TEXT-LIST-BALANCES'); ?></a></td>
|
|
<td align='center'><a href='?action=user-balances&naction=delete' class='btn btn--primary' onclick='return confirm(\"$deleteConfirmationMsg\")'><?php displayLanguageText('TEXT-CLEAR-BALANCES'); ?></a></td>
|
|
<?php } ?>
|
|
<?php if ($numParents == 0 && $numSaved == 0) { ?>
|
|
<td align='center'><p><b><?php displayLanguageText('TEXT-NO-SAVED-BALANCES-MSG') ?></b></p></td>
|
|
<?php } ?>
|
|
</tr>
|
|
</table>
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
$(document).on('click', '#save-balances', function(e) {
|
|
if (confirm("<?php displayLanguageText('TEXT-CONFIRM'); ?>")) {
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<?php
|
|
|
|
switch (strtolower($naction)) {
|
|
case "list":
|
|
$post_icon = "<img src='images/icons/next24.png' alt='Post Balance'>";
|
|
$flag_icon = "<img src='images/icons/accept24.png' alt='Flag as Posted'>";
|
|
|
|
$query = "SELECT * " .
|
|
"FROM user_balance_save " .
|
|
"WHERE school_num = $school_num " .
|
|
"ORDER BY $OrderBy";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances list");
|
|
$balances = db_query($query);
|
|
|
|
$data = array();
|
|
$count = 0;
|
|
$confirm = getLanguageText('TEXT-CONFIRM-STATUS-CHANGE');
|
|
while ($row = db_fetch_array($balances)) {
|
|
extract($row);
|
|
|
|
$rnum = $record_num;
|
|
$name = "$first_name $last_name";
|
|
|
|
$obalance = $balance;
|
|
if (isset($posted_method) && $posted_method == 'Manual') $balance = "<span class='notice'>$balance</span>";
|
|
|
|
$commands = "";
|
|
|
|
$ewhere = "";
|
|
if (strlen($email)) $ewhere .= "email = '".db_escape_string($email)."' ";
|
|
if (strlen($ewhere)) $ewhere .= "OR ";
|
|
$ewhere .= "userid = '".db_escape_string($original_userid)."' ";
|
|
|
|
$fname = db_escape_string($first_name);
|
|
$lname = db_escape_string($last_name);
|
|
$fwhere = "";
|
|
if (strlen($fname) || strlen($lname)) $fwhere = "(first_name = '$fname' AND last_name = '$lname') ";
|
|
if (strlen($fwhere)) $fwhere .= "OR ";
|
|
$fwhere .= $ewhere;
|
|
|
|
// Lookup in users table for a matching name or email
|
|
$userFound = false;
|
|
$query = "SELECT * FROM users " .
|
|
"WHERE school_num = $base_school_num " .
|
|
"AND type IN ('Parent','Guest','Administration Team','Schedule Team','Financial Team','Staff') " .
|
|
"AND ($fwhere)";
|
|
$results = db_query($query);
|
|
if (db_num_rows($results)) {
|
|
$r = db_fetch_assoc($results);
|
|
$userFound = true;
|
|
$unum = $r['record_num'];
|
|
$eclass = 'notice';
|
|
if ($posted == 'N') $eclass = 'error';
|
|
else {
|
|
$transaction_type = 'Charge Adjustment';
|
|
if ($obalance < 0) $transaction_type = 'Credit Adjustment';
|
|
$note = $school_record['previous_balances_post_message'];
|
|
$query = "SELECT * FROM user_account " .
|
|
"WHERE school_num = $school_num " .
|
|
"AND user_num = $unum " .
|
|
"AND note = '$note' " .
|
|
"AND transaction_type = '$transaction_type' " .
|
|
"AND transaction_amount = $obalance";
|
|
$res = db_query($query);
|
|
if (db_num_rows($res) == 0) $balance = "<span class='error'>$obalance</span>";
|
|
}
|
|
$original_userid = "<a href='?action=user-account&naction=list&user_num=$unum'><span class='$eclass'>$original_userid</span></a>";
|
|
// $commands = "<a href='?action=user-balances&naction=post&rnum=$rnum' title='Post Balance'>$post_icon</a> ";
|
|
}
|
|
|
|
$commands .= "<a href='?action=user-balances&naction=flag&rnum=$rnum' onClick=\"return(confirm('$confirm'));\" title='Flag as Posted'>$flag_icon</a>";
|
|
|
|
|
|
$ptime = "";
|
|
if ($posted == 'Y') $ptime = date("Y-m-d H:ia",$posted_time);
|
|
if (strlen($email)) $email = "<a href='mailto:$email'>$email</a>";
|
|
|
|
$data[$count] = array($original_userid,$original_type,$name,$email,$balance_year,$balance,$posted,$ptime,$commands);
|
|
$count++;
|
|
}
|
|
|
|
$columnHeaders = array('UserID','Type','Name','Email','Year','Balance','Posted','Posted Time','');
|
|
$columnAlign = array('left','left','left','left','center','right','center','center','center');
|
|
|
|
listDataCustom($data,$columnHeaders,$action,array(),'N',$columnAlign);
|
|
|
|
echo("<br>\n");
|
|
echo("<p>");
|
|
|
|
if ($school_record['previous_balances_post'] == 'Post Manually' || $_SESSION['UserInfo']['type'] == 'SuperUser') {
|
|
$msg = getLanguageText('TEXT-USER-BALANCE-POST-MSG') . "\\n --> " . getLanguageText('TEXT-CONTINUE');
|
|
echo("<a href='?action=user-balances&naction=post-matching' onclick='return confirm(\"$msg\");' class='btn btn--primary'>" . getLanguageText('TEXT-POST-USER-BALANCES') . "</a>");
|
|
if ($_SESSION['UserInfo']['type'] == 'SuperUser') {
|
|
$cyear = date("Y",time());
|
|
$msg = "Clear balance posted flags for $cyear";
|
|
echo("<a href='?action=user-balances&naction=unpost' onclick='return confirm(\"$msg\");' class='btn btn--primary'>Unpost Balances</a>");
|
|
|
|
$msg = "Post Balances to Current DB";
|
|
if ($currentDBMode != 'Current') echo("<a href='?action=user-balances&naction=post-forward' onclick='return confirm(\"$msg\");' class='btn btn--primary'>Post Balances to Current DB</a>");
|
|
}
|
|
}
|
|
echo("<a href='?action=user-balances-csv' class='btn btn--primary'>" . getLanguageText('TEXT-GENERATE-CSV') . "</a>");
|
|
echo("</p>");
|
|
break;
|
|
|
|
case "unpost":
|
|
$cyear = date("Y",time());
|
|
$query = "UPDATE user_balance_save SET posted = 'N', posted_time = NULL WHERE school_num = $school_num";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances unpost");
|
|
db_query($query);
|
|
break;
|
|
|
|
case "post-forward":
|
|
$balances = array();
|
|
$cyear = date("Y",time());
|
|
$query = "SELECT * FROM user_balance_save WHERE school_num = $school_num";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances post-forward");
|
|
$results = db_query($query);
|
|
if (db_num_rows($results)) {
|
|
while ($row = db_fetch_assoc($results)) {
|
|
$balances[] = $row;
|
|
}
|
|
|
|
db_query("use hotlunch");
|
|
$table = new Table("user_balance_save");
|
|
db_query("DELETE FROM user_balance_save WHERE school_num = $school_num");
|
|
|
|
for ($i = 0; $i < count($balances); $i++) {
|
|
extract($balances[$i]);
|
|
$query = $table->BuildInsert($balances[$i]);
|
|
$query .= " ON DUPLICATE KEY UPDATE balance = $balance, balance_year = '$balance_year'";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances post-forward");
|
|
db_query($query);
|
|
}
|
|
}
|
|
header("Location: /?action=user-balances");
|
|
exit();
|
|
|
|
case "post-matching":
|
|
$rwhere = "";
|
|
$rnum = 0;
|
|
if (array_key_exists('rnum',$_GET)) $rnum = $_GET['rnum'];
|
|
if ($rnum > 0) {
|
|
$rwhere = "AND record_num = $rnum ";
|
|
}
|
|
|
|
$query = "SELECT original_userid,original_type,first_name,last_name,email,balance_year,balance,posted,posted_time,record_num " .
|
|
"FROM user_balance_save " .
|
|
"WHERE school_num = $school_num " .
|
|
"AND posted = 'N' " .
|
|
$rwhere .
|
|
"ORDER BY $OrderBy";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances post-matching-users");
|
|
$balances = db_query($query);
|
|
|
|
// User account defaults
|
|
$ua = new Table("user_account");
|
|
$note = $school_record['previous_balances_post_message'];
|
|
$entered_time = time();
|
|
$transaction_datetime = date("Y-m-d H:i:s",$entered_time);
|
|
|
|
|
|
$data = array();
|
|
$count = 0;
|
|
$posted_count = 0;
|
|
while ($row = db_fetch_assoc($balances)) {
|
|
extract($row);
|
|
|
|
$rnum = $record_num;
|
|
$name = "$first_name $last_name";
|
|
|
|
$ewhere = "";
|
|
if (strlen($email)) {
|
|
$ewhere = "email = '".db_escape_string($email)."'";
|
|
$email = "<a href='mailto:$email'>$email</a>";
|
|
}
|
|
|
|
$fname = db_escape_string($first_name);
|
|
$lname = db_escape_string($last_name);
|
|
$fwhere = "";
|
|
if (strlen($fname) || strlen($lname)) $fwhere = "(first_name = '$fname' AND last_name = '$lname') ";
|
|
if (strlen($fwhere)) $fwhere .= "OR ";
|
|
$fwhere .= $ewhere;
|
|
|
|
// Lookup in users table for a matching name or email
|
|
$query = "SELECT * FROM users " .
|
|
"WHERE school_num = $base_school_num " .
|
|
"AND type IN ('Parent','Guest','Administration Team','Schedule Team','Financial Team','Staff') " .
|
|
"AND ($fwhere)";
|
|
$results = db_query($query);
|
|
|
|
$new_name = "";
|
|
$paction = "";
|
|
if (db_num_rows($results)) {
|
|
$row = db_fetch_assoc($results);
|
|
$user_num = $row['record_num'];
|
|
$new_name = $row['first_name'] . ' ' . $row['last_name'];
|
|
$paction = "->";
|
|
|
|
// Post saved balance
|
|
$transaction_type = 'Charge Adjustment';
|
|
if ($balance < 0) $transaction_type = 'Credit Adjustment';
|
|
$transaction_amount = $balance;
|
|
|
|
// Create a new transaction
|
|
$query = $ua->BuildInsert();
|
|
db_query($query);
|
|
$trx_num = db_insert_id();
|
|
|
|
// Update the saved balance record
|
|
$query = "UPDATE user_balance_save SET posted = 'Y', posted_time = $entered_time, posted_method = 'Post', user_num = $user_num, trx_num = $trx_num " .
|
|
"WHERE school_num = $school_num AND record_num = $rnum";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances post-matching-users");
|
|
db_query($query);
|
|
|
|
if ($school_record['balance_post_limit'] > 0.00 && $balance > $school_record['balance_post_limit']) {
|
|
$query = "UPDATE users SET can_order = 'Balance' WHERE school_num = $school_num AND record_num = $user_num";
|
|
db_query($query);
|
|
}
|
|
|
|
$posted_count++;
|
|
}
|
|
|
|
$data[$count] = array($original_type,$name,$email,$balance_year,$balance,$paction,$new_name);
|
|
$count++;
|
|
}
|
|
|
|
echo("<p><b>" . getLanguageText('TEXT-BALANCES-POSTED') . ": $posted_count</b></p>\n");
|
|
$columnHeaders = array('Type','Name','Email','Year','Balance','','New Name');
|
|
$columnAlign = array('left','left','left','center','right','center','left');
|
|
|
|
listDataCustom($data,$columnHeaders,$action,array(),'N',$columnAlign);
|
|
|
|
break;
|
|
|
|
case "flag":
|
|
$rnum = $_GET['rnum'];
|
|
$entered_time = time();
|
|
if ($rnum > 0) {
|
|
$query = "SELECT * FROM user_balance_save WHERE school_num = $school_num AND record_num = $rnum";
|
|
$results = db_query($query);
|
|
if (db_num_rows($results)) {
|
|
$row = db_fetch_assoc($results);
|
|
if ($row['posted'] != 'Y') {
|
|
$query = "UPDATE user_balance_save SET posted = 'Y', posted_time = $entered_time, user_num = $user_num WHERE school_num = $school_num AND record_num = $rnum";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances flag-manually-y");
|
|
db_query($query);
|
|
}
|
|
else {
|
|
$query = "UPDATE user_balance_save SET posted = 'N', posted_time = 0, user_num = 0 WHERE school_num = $school_num AND record_num = $rnum";
|
|
logQuery($school_num,"user_balance_save",$query,"user-balances flag-manually-n");
|
|
db_query($query);
|
|
}
|
|
}
|
|
header("Location: /?action=user-balances&naction=list&form_message=".urlencode(getLanguageText('TEXT-TRANSACTION-POSTED')));
|
|
exit();
|
|
}
|
|
break;
|
|
}
|
|
|
|
endTemplate();
|
|
?>
|