393 lines
17 KiB
PHP
393 lines
17 KiB
PHP
<?php
|
|
require_once("include/globals.php");
|
|
|
|
if (SessionActive() != 1 || ! UserLoggedIn()) {
|
|
header("Location: /");
|
|
exit();
|
|
}
|
|
|
|
|
|
//
|
|
// Generate an order for each active student in the selected classes
|
|
//
|
|
unset($selected_classes);
|
|
if (array_key_exists('selected_classes',$_POST) && is_array($_POST['selected_classes'])) $selected_classes = $_POST['selected_classes'];
|
|
|
|
$cWhere = "";
|
|
if (count($selected_classes)) {
|
|
$classes = implode(",",$selected_classes);
|
|
$cWhere = "AND class_num IN ($classes)";
|
|
}
|
|
|
|
// Get set of active students
|
|
$students = db_query("SELECT * FROM people WHERE school_num = $base_school_num AND people_type = 'Student' AND status != 'Inactive' $cWhere ORDER BY last_name,first_name");
|
|
$ordered_by_type = 'Student';
|
|
|
|
if (db_num_rows($students)) {
|
|
$num_orders_generated = 0;
|
|
$num_orders_found = 0;
|
|
$num_students = db_num_rows($students);
|
|
$num_errors = 0;
|
|
|
|
$hotlunch_order_header = new Table("hotlunch_order_header");
|
|
$hotlunch_order_items = new Table("hotlunch_order_items");
|
|
|
|
$processResults = array();
|
|
|
|
while ($row = db_fetch_assoc($students)) {
|
|
$ordered_by_num = $row['record_num'];
|
|
$user_num = $row['user_num'];
|
|
$current_name = $row['first_name'] . ' ' . $row['last_name'];
|
|
|
|
// Check if this person has an order for this schedule
|
|
$query = "select * from hotlunch_order_header " .
|
|
"where school_num = $school_num " .
|
|
"and ordered_by_num = $ordered_by_num " .
|
|
"and schedule_num = $schedule_num " .
|
|
"order by record_num desc limit 0,1";
|
|
$results = db_query($query);
|
|
if (db_num_rows($results) > 0) {
|
|
$num_orders_found++;
|
|
$processResults[] = array($current_name,getLanguageText('TEXT-ORDER-FOUND'),$currencySymbol.'0.00');
|
|
continue;
|
|
}
|
|
|
|
|
|
// Process each menu and menu item in the schedule
|
|
$query = "select * from hotlunch_menu_dates " .
|
|
"where school_num = $school_num " .
|
|
"and schedule_num = $schedule_num " .
|
|
"order by sequence,menu_date";
|
|
$menu_dates = db_query($query);
|
|
|
|
$num_items = 0;
|
|
|
|
|
|
while ($menu_date = db_fetch_array($menu_dates)) {
|
|
$menu_num = $menu_date['record_num'];
|
|
$menu_code = $schedule_num . "_" . $menu_num;
|
|
|
|
// Get menu items for this menu date
|
|
$query = "select * from hotlunch_menu_items " .
|
|
"where school_num = $school_num " .
|
|
"and menu_num = $menu_num " .
|
|
"AND active != 'N' " .
|
|
"order by sequence";
|
|
$menu_items = db_query($query);
|
|
|
|
$order_num = 0;
|
|
|
|
while ($menu_item = db_fetch_array($menu_items)) {
|
|
$menu_item_num = $menu_item['record_num'];
|
|
$options = trim($menu_item['options']);
|
|
$options2 = trim($menu_item['options2']);
|
|
$options3 = trim($menu_item['options3']);
|
|
$taxable_item = $menu_item['taxable_item'];
|
|
|
|
$curr_code = $schedule_num . "_" . $menu_num . "_" . $menu_item_num;
|
|
$qty = $_POST["qty_$curr_code"];
|
|
$price = $_POST["price_$curr_code"];
|
|
|
|
$price = str_replace(".","",$menu_item['online_price']);
|
|
|
|
if ($qty > 0) {
|
|
// Handle item options
|
|
$options_ordered = "";
|
|
if (strlen($options) > 0) {
|
|
$item_options = explode("\n",$options);
|
|
for ($i = 0; $i < count($item_options); $i++) {
|
|
$option = trim($item_options[$i]);
|
|
$option_f = str_replace(" ","_",substr($option,0,30));
|
|
$option_f = str_replace("&","and",$option_f);
|
|
$option_f = preg_replace("/[\"'%/()\.,\?\!:-]/","",$option_f);
|
|
$opt_name = "option_$curr_code" . "_$option_f";
|
|
if (array_key_exists($opt_name, $_POST) && $_POST[$opt_name] == 'Y') $options_ordered .= "$option\n";
|
|
}
|
|
}
|
|
|
|
// Handle item options2
|
|
$options2_ordered = "";
|
|
if (strlen($options2) > 0) {
|
|
$item_options = explode("\n",$options2);
|
|
for ($i = 0; $i < count($item_options); $i++) {
|
|
$option = trim($item_options[$i]);
|
|
$option_f = str_replace(" ","_",substr($option,0,30));
|
|
$option_f = str_replace("&","and",$option_f);
|
|
$option_f = preg_replace("/[\"'%/()\.,\?\!:-]/","",$option_f);
|
|
$opt_name = "option2_$curr_code" . "_$option_f";
|
|
if (array_key_exists($opt_name, $_POST) && $_POST[$opt_name] == 'Y') $options2_ordered .= "$option\n";
|
|
}
|
|
}
|
|
|
|
// Handle item options3
|
|
$options3_ordered = "";
|
|
if (strlen($options3) > 0) {
|
|
$item_options = explode("\n",$options3);
|
|
for ($i = 0; $i < count($item_options); $i++) {
|
|
$option = trim($item_options[$i]);
|
|
$option_f = str_replace(" ","_",substr($option,0,30));
|
|
$option_f = str_replace("&","and",$option_f);
|
|
$option_f = preg_replace("/[\"'%/()\.,\?\!:-]/","",$option_f);
|
|
$opt_name = "option3_$curr_code" . "_$option_f";
|
|
if (array_key_exists($opt_name, $_POST) && $_POST[$opt_name] == 'Y') $options3_ordered .= "$option\n";
|
|
}
|
|
}
|
|
|
|
// Calculate the extended price and save the data
|
|
$extended_price = intval($qty * $price) / 100;
|
|
$active = 'Y';
|
|
$menu_item_price = $price;
|
|
$query = $hotlunch_order_items->BuildInsert();
|
|
db_query($query);
|
|
$num_items++;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Get order total
|
|
$query = "select sum(qty) as num, sum(extended_price) as order_subtotal " .
|
|
"from hotlunch_order_items " .
|
|
"where school_num = $school_num " .
|
|
"and ordered_by_num = $ordered_by_num " .
|
|
"and schedule_num = $schedule_num " .
|
|
"and active != 'N'";
|
|
$results = db_query($query);
|
|
$row = db_fetch_array($results);
|
|
|
|
$number_items = $row['num'];
|
|
$order_subtotal = $row['order_subtotal'];
|
|
$ordertotal = $order_subtotal;
|
|
$order_total = $order_subtotal;
|
|
|
|
$processResults[] = array($current_name,getLanguageText('TEXT-ORDER-SAVED'),$currencySymbol.$order_total);
|
|
$num_orders_generated++;
|
|
|
|
if (!isset($discount_amount)) $discount_amount = 0;
|
|
if (!isset($source) || strlen($source) == 0) $source = 'On-Line';
|
|
|
|
// Handle any discounts
|
|
$today = date("Y-m-d",time());
|
|
if ($ordered_by_type != 'Concession' && $source == 'On-Line' &&
|
|
isset($hotlunch_schedule['discount_offered']) && $hotlunch_schedule['discount_offered'] > 0 &&
|
|
$hotlunch_schedule['discount_expiry_date'] >= $today) {
|
|
$discount_offered = $hotlunch_schedule['discount_offered'];
|
|
$discount_type = $hotlunch_schedule['discount_type'];
|
|
$discount_order_minimum = $hotlunch_schedule['discount_order_minimum'];
|
|
|
|
if ($order_total >= $discount_order_minimum) {
|
|
if ($discount_type == 'Amount') {
|
|
$discount_amount = $discount_offered;
|
|
}
|
|
else {
|
|
$discount_amount = $order_subtotal * $discount_offered / 100;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Apply the discount amount
|
|
$order_total = $order_subtotal - $discount_amount;
|
|
|
|
|
|
// Calculate any taxes
|
|
$tax_charge_amount = 0;
|
|
if ($hotlunch_schedule['tax_rate'] > 0.00) {
|
|
$tax_rate = $hotlunch_schedule['tax_rate'];
|
|
$tax_description = $hotlunch_schedule['tax_description'];
|
|
|
|
switch($school_record['taxable_items']) {
|
|
case 'All':
|
|
$taxable_total = $order_total;
|
|
break;
|
|
|
|
case 'Some':
|
|
$query = "select sum(extended_price) " .
|
|
"from hotlunch_order_items " .
|
|
"where school_num = $school_num " .
|
|
"and ordered_by_num = $ordered_by_num " .
|
|
"and schedule_num = $schedule_num " .
|
|
"and active != 'N' " .
|
|
"and taxable_item = 'Y'";
|
|
$taxable_total = db_getVal($query);
|
|
break;
|
|
|
|
case 'None':
|
|
$taxable_total = 0;
|
|
break;
|
|
}
|
|
$tax_charge_amount = round($tax_rate * $taxable_total / 100,2);
|
|
}
|
|
|
|
|
|
// Create an order header record if required
|
|
$added_time = time();
|
|
$added_date = date("Y-m-d",$added_time);
|
|
$updated_date = $added_date;
|
|
$amount_paid = 0;
|
|
|
|
// Create new order header on insert
|
|
$entered_by = $_SESSION['UserInfo']['record_num'];
|
|
$status = $school_record['default_order_status'];
|
|
$query = $hotlunch_order_header->BuildInsert();
|
|
db_query($query);
|
|
$order_num = db_insert_id();
|
|
|
|
// Update hotlunch_order_items with order_num
|
|
$query = "update hotlunch_order_items " .
|
|
"set order_num = $order_num, " .
|
|
"active = 'Y' " .
|
|
"where school_num = $school_num " .
|
|
"and ordered_by_num = $ordered_by_num " .
|
|
"and schedule_num = $schedule_num " .
|
|
"and order_num in (0,$order_num)";
|
|
db_query($query);
|
|
|
|
|
|
$datetime = date("Y-m-d H:i:s",time());
|
|
$entered_time = time();
|
|
$current_name = str_replace("'",""",$current_name);
|
|
|
|
// Create user_account entry for current order
|
|
$query = "INSERT INTO user_account (school_num,user_num,schedule_num,order_num,people_num,transaction_datetime,transaction_type,note,transaction_amount,deleted,entered_time,transaction_status) " .
|
|
"VALUES ($school_num,$user_num,$schedule_num,$order_num,$ordered_by_num,'$datetime','Order','Order for $current_name',$order_total,'N',$entered_time,'Open')";
|
|
db_query($query);
|
|
|
|
// Delete any incorrect entries for this order
|
|
$query = "DELETE FROM user_account " .
|
|
"WHERE school_num = $school_num " .
|
|
"AND user_num != $user_num " .
|
|
"AND schedule_num = $schedule_num " .
|
|
"AND people_num = $ordered_by_num " .
|
|
"AND transaction_type = 'Order'";
|
|
db_query($query);
|
|
|
|
|
|
// Create late charge entry if required
|
|
if ($late_charge_amount > 0) {
|
|
// Determine if there is already a late charge for this order
|
|
$results = db_query("SELECT * FROM user_account WHERE school_num = $school_num AND user_num = $user_num AND order_num = $order_num AND transaction_type = 'Late Charge' AND deleted = 'N'");
|
|
|
|
if (db_num_rows($results) == 0) {
|
|
$datetime = date("Y-m-d H:i:s",time());
|
|
$entered_time = time();
|
|
$entered_user_num = intval($_SESSION['UserInfo']['record_num']);
|
|
$query = "INSERT INTO user_account (school_num,user_num,schedule_num,order_num,people_num,transaction_datetime,transaction_type,note,transaction_amount," .
|
|
"deleted,entered_time,entered_by_user_num) " .
|
|
"VALUES ($school_num,$user_num,$schedule_num,$order_num,$ordered_by_num,'$datetime','Late Charge','Order Entered $today',$late_charge_amount," .
|
|
"'N',$entered_time,$entered_user_num)";
|
|
db_query($query);
|
|
}
|
|
}
|
|
|
|
|
|
// Create tax charge entry if required
|
|
if ($tax_charge_amount > 0) {
|
|
// Determine if there is already a tax charge for this order
|
|
$results = db_query("SELECT * FROM user_account WHERE school_num = $school_num AND user_num = $user_num AND order_num = $order_num AND transaction_type = 'Tax Charge' AND deleted = 'N'");
|
|
$tdescription = db_escape_string($tax_description) . ' - Order (#' . $order_num . ')';
|
|
|
|
if (db_num_rows($results) == 0) {
|
|
$datetime = date("Y-m-d H:i:s",time());
|
|
$entered_time = time();
|
|
$entered_user_num = intval($_SESSION['UserInfo']['record_num']);
|
|
$query = "INSERT INTO user_account (school_num,user_num,schedule_num,order_num,people_num,transaction_datetime,transaction_type,note,transaction_amount," .
|
|
"deleted,entered_time,entered_by_user_num) " .
|
|
"VALUES ($school_num,$user_num,$schedule_num,$order_num,$ordered_by_num,'$datetime','Tax Charge','$tdescription',$tax_charge_amount," .
|
|
"'N',$entered_time,$entered_user_num)";
|
|
db_query($query);
|
|
}
|
|
else {
|
|
db_query("UPDATE user_account SET transaction_amount = $tax_charge_amount,note = '$tdescription' " .
|
|
"WHERE school_num = $school_num AND user_num = $user_num AND order_num = $order_num AND transaction_type = 'Tax Charge' AND deleted = 'N'");
|
|
}
|
|
}
|
|
|
|
|
|
// Create additional order fee entry if required
|
|
$additional_charge = $hotlunch_schedule['additional_charge'];
|
|
$additional_charge_message = db_escape_string($hotlunch_schedule['additional_charge_message']);
|
|
if ($additional_charge > 0) {
|
|
// Determine if there is already an additional order fee for this order
|
|
$results = db_query("SELECT * FROM user_account WHERE school_num = $school_num AND user_num = $user_num AND order_num = $order_num AND transaction_type = 'Additional Order Fee' AND deleted = 'N'");
|
|
|
|
if (db_num_rows($results) == 0) {
|
|
$datetime = date("Y-m-d H:i:s",time());
|
|
$entered_time = time();
|
|
$entered_user_num = intval($_SESSION['UserInfo']['record_num']);
|
|
$query = "INSERT INTO user_account (school_num,user_num,schedule_num,order_num,people_num,transaction_datetime,transaction_type,note,transaction_amount," .
|
|
"deleted,entered_time,entered_by_user_num) " .
|
|
"VALUES ($school_num,$user_num,$schedule_num,$order_num,$ordered_by_num,'$datetime','Additional Order Fee','$additional_charge_message',$additional_charge," .
|
|
"'N',$entered_time,$entered_user_num)";
|
|
db_query($query);
|
|
}
|
|
}
|
|
|
|
|
|
// Send parent an email if required
|
|
if (isset($user_num) && $user_num > 0) {
|
|
$email_message = trim($hotlunch_schedule['email_message']);
|
|
if (strlen($email_message) > 0) {
|
|
// Get parent record
|
|
$results = db_query("SELECT * FROM users WHERE school_num = $base_school_num AND record_num = $user_num");
|
|
$parent = db_fetch_array($results);
|
|
|
|
// Get account balance
|
|
$balance = db_getVal("select sum(transaction_amount) as balance from user_account where school_num = $school_num and user_num = $user_num AND (deleted != 'Y' OR deleted IS NULL)");
|
|
|
|
if (strlen($parent['email']) > 0) {
|
|
include_once("include/queuemail.php");
|
|
|
|
$emailRecipient = $parent['userid'];
|
|
$emailTo = $parent['email'];
|
|
$emailReply = $school_record['reply_description'];
|
|
$emailFrom = setReplyAddress($school_record['reply_email']);
|
|
$emailSubject = $school_record['school_name'] . " " . getLanguageText('TEXT-ORDER-DETAILS');
|
|
|
|
$sign = "";
|
|
if ($balance < 0) $sign = "-";
|
|
$emailMessage = getLanguageText('TEXT-ORDER-DETAILS') . ":\n" .
|
|
" - " . $current_name . "\n" .
|
|
" - " . getLanguageText('TEXT-ORDER-TOTAL') . ": $currencySymbol" . number_format($ordertotal,2) . "\n" .
|
|
" - " . getLanguageText('TEXT-ACCOUNT-BALANCE') . ": $sign$currencySymbol" . number_format(abs($balance),2) . "\n\n" .
|
|
$email_message;
|
|
|
|
// Send the email
|
|
QueueEmail($emailTo, $emailFrom, $emailSubject, $emailMessage, $emailReply, $emailRecipient);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Display page
|
|
include "hotlunch_reports.menu.php";
|
|
include "hotlunch_orders.options.php";
|
|
echo("<br>\n");
|
|
include "form.messages.php";
|
|
|
|
$columnHeaders = array(getLanguageText('TEXT-STUDENT-NAME'),
|
|
getLanguageText('TEXT-RESULT'),
|
|
getLanguageText('TEXT-AMOUNT')
|
|
);
|
|
$columnAlign = array('left','center','right');
|
|
$TableWidth = 450;
|
|
listDataCustom($processResults,$columnHeaders,'',array(),'N',$columnAlign);
|
|
|
|
echo("<br>\n");
|
|
|
|
$data = array();
|
|
$data[] = array(getLanguageText('TEXT-ORDER-FOUND'),$num_orders_found);
|
|
$data[] = array(getLanguageText('TEXT-ORDER-SAVED'),$num_orders_generated);
|
|
|
|
$columnHeaders = array(getLanguageText('TEXT-RESULT'),
|
|
getLanguageText('TEXT-NUMBER')
|
|
);
|
|
$columnAlign = array('left','center');
|
|
$TableWidth = 450;
|
|
listDataCustom($data,$columnHeaders,'',array(),'N',$columnAlign);
|
|
|
|
echo("</center>\n");
|
|
|
|
?>
|