Files
HotLunches/ajax.MenuDates.Update.php
2026-10-19 15:22:52 -07:00

451 lines
17 KiB
PHP

<?php
$ValidAccess = 2010;
require_once("include/globals.php");
$moduleName = "ajax.MenuDates.Update.php";
// if ($_SESSION['UserInfo']['type'] == 'SuperUser') startLog($moduleName);
// CSRF token validation
include "include/ajax.csrfToken.php";
if (SessionActive() != 1 || ! UserLoggedIn()) {
logExit("Session is not active",$moduleName);
exit();
}
// Set userType
$userType = "Parent";
if (array_key_exists('type', $_SESSION['UserInfo']) && in_array($_SESSION['UserInfo']['type'],$AllAdminUserTypes)) $userType = "Admin";
if ($userType != 'Admin') logExit('Invalid access');
// Set default timezone
date_default_timezone_set("Canada/Pacific");
$now = date("Y-m-d H:i:s",time());
$return_data = array();
// Get parameters
if (array_key_exists('schedule_num', $_GET)) $schedule_num = intval($_GET['schedule_num']);
if (array_key_exists('action', $_GET)) $action = db_escape_string($_GET['action']);
if (!isset($schedule_num)) logExit("Schedule Num is not set");
if (!isset($action)) logExit("Action is not set");
writeLog("schedule_num: $schedule_num");
writeLog("action: $action");
// Validate the schedule number
$swhere = "";
if ($_SESSION['UserInfo']['type'] == 'Supplier') $swhere = " and supplier_num = " . $_SESSION['UserInfo']['supplier_num'];
$query = "select * from hotlunch_schedules " .
"where record_num = $schedule_num " .
"and school_num = $school_num $swhere";
$results = db_query($query);
if (db_num_rows($results) == 0) {
$return_data['error_message'] = getLanguageText('ERRORMSG-INVALID-SCHEDULE-NUM');
$return_data['ajax_return_code'] = -1;
echo(json_encode($return_data));
logExit($error_message);
exit();
}
$hotlunch_schedule = db_fetch_array($results);
$return_data['reload_data'] = 'Y';
$return_data['ajax_return_code'] = 0;
$return_data['ajax_message'] = '';
switch ($action) {
case 'delete-all-menus':
$query = "DELETE FROM hotlunch_menu_items " .
"WHERE school_num = $school_num " .
"AND menu_num IN (SELECT record_num FROM hotlunch_menu_dates " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num)";
db_query($query);
$query = "DELETE FROM hotlunch_menu_dates " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num";
db_query($query);
break;
case 'delete-selected-menus':
if (array_key_exists('selected_menus', $_GET)) $selected_menus = db_escape_string($_GET['selected_menus']);
if (!isset($selected_menus) || strlen($selected_menus) == 0) {
$return_data['error_message'] = getLanguageText('ERRORMSG-NO-MENU-DATES-SELECTED');
$return_data['ajax_return_code'] = -1;
echo(json_encode($return_data));
logExit($error_message);
exit();
}
$query = "DELETE FROM hotlunch_menu_items " .
"WHERE school_num = $school_num " .
"AND menu_num IN ($selected_menus)";
writeLog($query);
db_query($query);
$query = "DELETE FROM hotlunch_menu_dates " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num " .
"AND record_num IN ($selected_menus)";
writeLog($query);
db_query($query);
break;
case 'generate-menus':
// Process lunch menu dates
$menu_dates = new Table("hotlunch_menu_dates");
if (strlen($hotlunch_schedule['lunch_days']) == 0) {
$error_message = getLanguageText('ERRORMSG-NO-MENU-DATES-DEFINED');
$return_data['error_message'] = $error_message;
$return_data['ajax_return_code'] = -1;
echo(json_encode($return_data));
logExit($error_message);
exit();
}
// writeLog($hotlunch_schedule['lunch_days']);
$lunch_days = explode(",",$hotlunch_schedule['lunch_days']);
$schedule_start_date = $hotlunch_schedule['schedule_start_date'];
$schedule_end_date = $hotlunch_schedule['schedule_end_date'];
$processing_date = $hotlunch_schedule['schedule_start_date'];
$processing_time = strtotime($processing_date) + 12 * 60 * 60;
$newDays = 0;
$sequence = intval(db_getVal("SELECT max(sequence) FROM hotlunch_menu_dates WHERE school_num = $school_num AND schedule_num = $schedule_num"));
// writeLog("processing_date: $processing_date");
// writeLog("schedule_end_date: $schedule_end_date");
while ($processing_date <= $schedule_end_date) {
$day = date("D",$processing_time);
// writeLog("day: $day");
if (in_array($day,$lunch_days)) {
$entry = initializeTableArray("hotlunch_menu_dates");
$entry['menu_title'] = $hotlunch_schedule['default_menu_title'];
$entry['menu_date'] = $processing_date;
$entry['menu_end_order_datetime'] = $processing_date . " 23:59:00";
$entry['menu_end_order_datetime'] = $processing_date . " 09:00:00";
$entry['order_format'] = $hotlunch_schedule['default_order_format'];
// Check if an entry exists for this date
$query = "SELECT * FROM hotlunch_menu_dates WHERE school_num = $school_num AND schedule_num = $schedule_num AND menu_date = '$processing_date'";
// writeLog($query);
$results = db_query($query);
if (db_num_rows($results) == 0) {
$sequence++;
$entry['sequence'] = $sequence;
$query = $menu_dates->BuildInsert($entry);
// writeLog($query);
db_query($query);
$newDays++;
}
}
$processing_time += 24 * 60 * 60;
$processing_date = date("Y-m-d",$processing_time);
}
$return_data['ajax_message'] = getLanguageText('TEXT-MENU-DATES-CREATED') . ": $newDays";
break;
case 'sort-menus-by-date':
$query = "SELECT * FROM hotlunch_menu_dates WHERE school_num = $school_num AND schedule_num = $schedule_num ORDER BY menu_type,menu_date";
$results = db_query($query);
$sequence = 1;
while ($row = db_fetch_assoc($results)) {
$rnum = $row['record_num'];
db_query("UPDATE hotlunch_menu_dates SET sequence = $sequence WHERE record_num = $rnum");
$sequence++;
}
break;
case 'set-all-menus-to-checkboxes':
$query = "UPDATE hotlunch_menu_dates " .
"SET order_format = 'Checkbox' " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num";
writeLog($query);
db_query($query);
$query = "UPDATE hotlunch_menu_items " .
"SET menu_item_format = 'C' " .
"WHERE school_num = $school_num " .
"AND item_type = 'Item' " .
"AND menu_num IN " .
"(SELECT record_num FROM hotlunch_menu_dates WHERE school_num = $school_num AND schedule_num = $schedule_num)";
writeLog($query);
db_query($query);
$return_data['reload_data'] = 'N';
break;
case 'set-all-menus-to-quantity':
$query = "UPDATE hotlunch_menu_dates " .
"SET order_format = 'Quantity' " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num";
writeLog($query);
db_query($query);
$query = "UPDATE hotlunch_menu_items " .
"SET menu_item_format = 'Q' " .
"WHERE school_num = $school_num " .
"AND item_type = 'Item' " .
"AND menu_num IN " .
"(SELECT record_num FROM hotlunch_menu_dates WHERE school_num = $school_num AND schedule_num = $schedule_num)";
writeLog($query);
db_query($query);
$return_data['reload_data'] = 'N';
break;
case 'modify-menu-links':
if (array_key_exists('new_menu_link', $_GET)) $new_link = db_escape_string($_GET['new_menu_link']);
if (isset($new_link)) {
switch ($new_link) {
case 'Admin':
case 'Paper':
case 'All':
case 'No':
$query = "UPDATE hotlunch_menu_dates SET menu_link = '$new_link' " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num " .
"AND menu_link != 'No'";
db_query($query);
break;
}
}
else {
$return_data['error_message'] = getLanguageText('ERRORMSG-INVALID-PARAMETERS');
$return_data['ajax_return_code'] = -1;
}
break;
case 'change-menu-link':
if (array_key_exists('menu_num', $_GET)) $menu_num = intval($_GET['menu_num']);
if (array_key_exists('new_menu_link', $_GET)) $new_link = db_escape_string($_GET['new_menu_link']);
if (isset($new_link)) {
switch ($new_link) {
case 'Admin':
case 'Paper':
case 'All':
case 'No':
$query = "UPDATE hotlunch_menu_dates SET menu_link = '$new_link' " .
"WHERE school_num = $school_num " .
"AND schedule_num = $schedule_num " .
"AND record_num = $menu_num " .
"AND menu_link != 'No'";
db_query($query);
break;
}
}
break;
case 'copy-menu':
$copy_menu_title = 'Y';
if (array_key_exists('schedule_num', $_GET)) $schedule_num = intval($_GET['schedule_num']);
if (array_key_exists('menu_num', $_GET)) $menu_num = intval($_GET['menu_num']);
if (array_key_exists('menu_link', $_GET)) $menu_link = db_escape_string($_GET['menu_link']);
if (array_key_exists('menu_dates', $_GET)) $menu_dates = $_GET['menu_dates'];
if (array_key_exists('copy_menu_title', $_GET)) $copy_menu_title = $_GET['copy_menu_title'];
if (!isset($menu_dates) || !is_array($menu_dates) || count($menu_dates) == 0 || !isset($menu_num) || intval($menu_num) == 0) {
$return_data['error_message'] = getLanguageText('ERRORMSG-NO-DATES-SELECTED');
$return_data['ajax_return_code'] = -1;
echo(json_encode($return_data));
logExit($return_data['error_message']);
exit();
}
// startLog("copy-menu");
// writeLog("copy_menu_title: $copy_menu_title");
// writeLog("schedule_num: $schedule_num");
// Get source menu record
$source = db_getVal("SELECT * FROM hotlunch_menu_dates WHERE school_num = $school_num AND record_num = $menu_num");
if (!is_array($source)) {
$return_data['error_message'] = getLanguageText('ERRORMSG-INVALID-MENU');
$return_data['ajax_return_code'] = -1;
echo(json_encode($return_data));
logExit($return_data['error_message']);
exit();
}
$source_schedule_num = $source['schedule_num'];
// writeLog("source_schedule_num: $source_schedule_num");
if ($source_schedule_num != $schedule_num) $copy_menu_title = 'Y';
// Get menu items and products for the source menu
$sourceItems = array();
$sourceProducts = array();
$sourceClasses = array();
$sourceItemClasses = array();
// Get source menu items
$query = "SELECT * FROM hotlunch_menu_items WHERE school_num = $school_num AND menu_num = $menu_num ORDER BY sequence";
$items = db_query($query);
while ($row = db_fetch_assoc($items)) {
$sourceItems[] = $row;
$menu_item_num = $row['record_num'];
// Get products for this item
$query = "SELECT * FROM hotlunch_menu_products " .
"WHERE school_num = $school_num " .
"AND menu_item_num = $menu_item_num " .
"ORDER BY product_sequence";
$products = db_query($query);
$itemProducts = array();
while ($row = db_fetch_assoc($products)) {
$itemProducts[] = $row;
}
$sourceProducts[$menu_item_num] = $itemProducts;
// Get classes for this menu item
$query = "SELECT * FROM hotlunch_menu_items_classes " .
"WHERE school_num = $school_num " .
"AND menu_num = $menu_num " .
"AND menu_item_num = $menu_item_num";
$classes = db_query($query);
$itemClasses = array();
while ($row = db_fetch_assoc($classes)) {
$itemClasses[] = $row;
}
$sourceItemClasses[$menu_item_num] = $itemClasses;
}
// Get classes for the source menu date
$query = "SELECT * FROM hotlunch_menu_dates_classes WHERE school_num = $school_num AND menu_num = $menu_num";
$classes = db_query($query);
while ($row = db_fetch_assoc($classes)) {
$sourceClasses[] = $row;
}
$hotlunch_menu_dates = new Table('hotlunch_menu_dates');
$hotlunch_menu_items = new Table('hotlunch_menu_items');
$hotlunch_menu_products = new Table('hotlunch_menu_products');
$hotlunch_menu_dates_classes = new Table('hotlunch_menu_dates_classes');
$hotlunch_menu_items_classes = new Table('hotlunch_menu_items_classes');
for ($i = 0; $i < count($menu_dates); $i++) {
$curr_menu_num = $menu_dates[$i];
// writeLog("$i curr_menu_num: $curr_menu_num");
$query = "SELECT * FROM hotlunch_menu_dates WHERE school_num = $school_num AND schedule_num = $schedule_num AND record_num = $curr_menu_num";
$current_menu_record = db_getVal($query);
// Delete any current menu items for this menu
$query = "DELETE FROM hotlunch_menu_products " .
"WHERE school_num = $school_num " .
"AND menu_item_num IN (SELECT record_num FROM hotlunch_menu_items WHERE school_num = $school_num AND menu_num = $curr_menu_num)";
// writeLog($query);
db_query($query);
$query = "DELETE FROM hotlunch_menu_items WHERE school_num = $school_num AND menu_num = $curr_menu_num";
// writeLog($query);
db_query($query);
// Create menu_date entry
$entry = $current_menu_record;
// writeLog("copy_menu_title: $copy_menu_title");
// writeLog("menu_title: ".$current_menu_record['menu_title']);
$entry['record_num'] = $curr_menu_num;
$entry['schedule_num'] = $schedule_num;
if (isset($copy_menu_title) && $copy_menu_title == 'Y') $entry['menu_title'] = $source['menu_title'];
$entry['menu_date'] = $current_menu_record['menu_date'];
$entry['sequence'] = $current_menu_record['sequence'];
$menu_end_order_datetime = $current_menu_record['menu_end_order_datetime'];
if ($menu_end_order_datetime == '0000-00-00 00:00:00') $menu_end_order_datetime = $current_menu_record['menu_date'] . " 06:00:00";
$entry['menu_end_order_datetime'] = $menu_end_order_datetime;
$entry['menu_link'] = $menu_link;
$entry['source_menu'] = $menu_num;
$entry['order_revenue'] = 0.00;
$entry['other_revenue'] = 0.00;
$entry['supplier_costs'] = 0.00;
$entry['other_costs'] = 0.00;
$entry['net_revenue'] = 0.00;
$entry['record_num'] = $current_menu_record['record_num'];
$query = $hotlunch_menu_dates->BuildUpdate($entry);
// writeLog($query);
db_query($query);
$new_menu_num = $current_menu_record['record_num'];
// Save the menu items for the new menu
for ($j = 0; $j < count($sourceItems); $j++) {
$row = $sourceItems[$j];
$row['menu_num'] = $new_menu_num;
$row['source_item'] = $row['record_num'];
// writeLog("source_item: ".$row['source_item']);
$original_item_num = $row['record_num'];
$query = $hotlunch_menu_items->BuildInsert($row);
// writeLog($query);
db_query($query);
$new_item_num = db_insert_id();
// Save the menu item products for the new menu item
$itemProducts = $sourceProducts[$original_item_num];
for ($m = 0; $m < count($itemProducts); $m++) {
$row = $itemProducts[$m];
$row['menu_item_num'] = $new_item_num;
$query = $hotlunch_menu_products->BuildInsert($row);
// writeLog($query);
db_query($query);
}
// Save menu item classes
$itemClasses = $sourceItemClasses[$original_item_num];
for ($m = 0; $m < count($itemClasses); $m++) {
$row = $itemClasses[$m];
$row['schedule_num'] = $schedule_num;
$row['menu_num'] = $new_menu_num;
$row['menu_item_num'] = $new_item_num;
$query = $hotlunch_menu_items_classes->BuildInsert($row);
// writeLog($query);
db_query($query);
}
}
// Save menu date classes
for ($j = 0; $j < count($sourceClasses); $j++) {
$row = $sourceClasses[$j];
$row['schedule_num'] = $schedule_num;
$row['menu_num'] = $new_menu_num;
$query = $hotlunch_menu_dates_classes->BuildInsert($row);
// writeLog($query);
db_query($query);
}
}
$return_data['ajax_message'] = getLanguageText('TEXT-MENU-DATES-COPIED') . ": " . count($menu_dates);
break;
}
echo(json_encode($return_data));
writeLog("completed\n");