Files
HotLunches/multi-menu.supplier.gen-csv.php
T
2026-10-19 15:22:52 -07:00

328 lines
13 KiB
PHP

<?php
$ValidAccess = 2010;
require_once("include/globals.php");
if (SessionActive() != 1 || ! UserLoggedIn()) {
header("Location: /");
exit();
}
$action = "home";
// Ensure that only valid user types have access to this module
$AllowedUserTypes = array('SuperUser','System Administrator','Application Administrator','Application Volunteer','Schedule Volunteer','Administration Team','Schedule Team','Supplier','Financial Team');
if (checkPermission($AllowedUserTypes) != 1) {
header("Location: /?action=$action&error_code=NOACCESS");
return;
}
$moduleName = "multi-menu.supplier.gen-csv.php";
// startLog($moduleName);
// Get parameters
if (array_key_exists('supplier_num',$_GET)) $selected_supplier_num = intval($_GET['supplier_num']);
if (array_key_exists('supplier_num',$_POST)) $selected_supplier_num = intval($_POST['supplier_num']);
if (array_key_exists('selected_menus',$_GET)) $selected_menus = $_GET['selected_menus'];
if (array_key_exists('selected_menus',$_POST)) $selected_menus = $_POST['selected_menus'];
if (array_key_exists('selected_menu_date',$_GET)) $selected_menu_date = $_GET['selected_menu_date'];
if (array_key_exists('selected_menu_date',$_POST)) $selected_menu_date = $_POST['selected_menu_date'];
if (array_key_exists('format',$_GET)) $format = $_GET['format'];
if (array_key_exists('format',$_POST)) $format = $_POST['format'];
if (array_key_exists('staff',$_GET)) $staff = $_GET['staff'];
if (array_key_exists('staff',$_POST)) $staff = $_POST['staff'];
if (!isset($mode)) $mode = 'detail';
unset($schedule_num);
if (isset($selected_menu_date)) writeLog("selected_menu_date: $selected_menu_date");
if (isset($selected_menu_date)) {
$menus = db_query("SELECT hlmd.* FROM hotlunch_menu_dates AS hlmd, hotlunch_schedules AS hls " .
"WHERE hlmd.school_num = $school_num " .
"AND hls.school_num = $school_num " .
"AND hlmd.schedule_num = hls.record_num " .
"AND hls.status NOT IN ('Inactive','Deleted') " .
"AND menu_date = '$selected_menu_date' " .
"ORDER BY schedule_name,menu_title");
$selected_menus = array();
$menu_titles = array();
while ($row = db_fetch_assoc($menus)) {
$selected_menus[] = $row['record_num'];
$menu_titles[] = $row['menu_title'];
}
}
// Get schedules numbers
if (isset($selected_menus) && is_array($selected_menus) && count($selected_menus) > 0) {
$menuNumbers = implode(',',$selected_menus);
writeLog("menuNumbers: $menuNumbers");
$results = db_query("SELECT DISTINCT schedule_num FROM hotlunch_menu_dates WHERE record_num IN ($menuNumbers)");
if (db_num_rows($results)) {
$schedule_nums = "";
$selected_schedules = array();
while ($row = db_fetch_assoc($results)) {
if ($schedule_nums) $schedule_nums .= ",";
$schedule_nums .= $row['schedule_num'];
$selected_schedules[] = $row['schedule_num'];
}
}
$scheduleNums = $schedule_nums;
}
else {
header("Location: /?action=$action&error_code=NOSCHED");
return;
}
// Check that there are orders for these schedules
writeLog("scheduleNums: $scheduleNums");
$query = "select count(*) from hotlunch_order_header " .
"where school_num = $school_num " .
"and schedule_num IN ($scheduleNums) " .
"and ordered_by_type != 'Concession' " .
"and status NOT IN ('Inactive','Deleted')";
$num = db_getVal($query);
writeLog("num: $num");
if ($num == 0) {
header("Location: /?action=$action&error_code=NOORDERS");
return;
}
// Post supplier orders for each schedule
for ($i = 0; $i < count($selected_menus); $i++) {
$curr_menu_num = $selected_menus[$i];
$schedule_num = db_getVal("SELECT schedule_num FROM hotlunch_menu_dates WHERE record_num = $curr_menu_num");
writeLog("schedule_num: $schedule_num -> supplier_orders.post.php");
include "supplier_orders.post.php";
}
$numMenuDates = count($selected_menus);
$firstMenuDate = $selected_menus[0];
$menuNumbers = implode(',',$selected_menus);
// Check the class_num value for staff to ensure that every staff person has a valid class number
$query = "SELECT * FROM people WHERE school_num = $base_school_num AND class_num IS NULL";
writeLog($query);
$results = db_query($query);
if (db_num_rows($results)) {
while ($row = db_fetch_assoc($results)) {
$rnum = $row['record_num'];
db_query("UPDATE people SET class_num = 0 WHERE school_num = $base_school_num AND class_num IS NULL AND record_num = $rnum");
}
}
// Get set of suppliers to process
$swhere = "";
if (isset($selected_supplier_num) && $selected_supplier_num > 0) $swhere = "and soh.supplier_num = $selected_supplier_num ";
$query = "SELECT DISTINCT supplier_name,supplier_num,hlmd.menu_date " .
"FROM supplier_order_header AS soh, suppliers AS s, hotlunch_menu_dates AS hlmd " .
"WHERE soh.school_num = $school_num " .
"AND s.school_num = $supplier_school_num " .
"AND soh.schedule_num IN ($scheduleNums) " .
"AND soh.menu_num IN ($menuNumbers) " .
"AND soh.menu_num = hlmd.record_num " .
"AND soh.supplier_num = s.record_num " .
$swhere .
"ORDER BY supplier_name,hlmd.menu_date";
writeLog($query);
$orders = db_query($query);
// Ensure that there are supplier orders to process
if (db_num_rows($orders) == 0) {
$error_message = "Error: No Orders Found";
header("Location: /?action=home&error_code=NOORDERS");
return;
}
// Initialize the spreadsheet document type
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header("Content-type: application/octet-stream; charset=utf-8");
header("Content-Disposition: attachment; filename=multi-menu-supplier-orders.csv");
header('Content-Transfer-Encoding: text');
echo("\xEF\xBB\xBF");
// Process each order
$today = date("D M jS, Y",time());
$prev_supplier = 0;
$totals = array();
$products = array();
while ($order = db_fetch_assoc($orders)) {
extract($order);
$order_subtotal = 0;
$mdate = date("D M jS, Y",strtotime($menu_date));
// Print supplier info if this is a new supplier
if ($supplier_num != $prev_supplier) {
if ($prev_supplier > 0) {
echo("\"$prev_supplier_name\",".getLanguageText('TEXT-TOTALS')."," . $totals['qty'] . ",,," . $totals['units'] . "," . $totals['cost'] . "\n");
echo("\n\n\n");
}
$prev_supplier = $supplier_num;
$totals = array();
$totals['qty'] = 0;
$totals['units'] = 0;
$totals['cost'] = 0;
// Get supplier info
$query = "select * from suppliers " .
"where school_num = $supplier_school_num " .
"AND status = 'Active' " .
"and record_num = $supplier_num";
$results = db_query($query);
$supplier = db_fetch_assoc($results);
extract($supplier);
$prev_supplier_name = $supplier_name;
switch ($format) {
case 'order':
echo("\"$supplier_name\"\n");
echo(getLanguageText('TEXT-ITEM').",".
getLanguageText('TEXT-ORDERED').",".
getLanguageText('TEXT-PACKAGE-QUANTITY').",".
getLanguageText('TEXT-PACKAGE-COST').",".
getLanguageText('TEXT-UNITS').",".
getLanguageText('TEXT-TOTAL')."\n");
break;
case 'production':
echo("\"$supplier_name\"\n");
echo(getLanguageText('TEXT-ITEM').",");
$n = count($selected_menus);
for ($i = 0; $i < count($selected_menus); $i++) {
$menu_num = $selected_menus[$i];
$schedule_name = db_getVal("SELECT schedule_name FROM hotlunch_schedules AS hls, hotlunch_menu_dates AS hlmd " .
"WHERE hls.school_num = $school_num " .
"AND hlmd.school_num = $school_num " .
"AND hls.record_num = hlmd.schedule_num " .
"AND hlmd.record_num = $menu_num");
echo($schedule_name.' - '.$menu_titles[$i].",");
if ($staff == 'separate') echo($schedule_name.' - '.$GlobalText['Staff'].",");
}
echo(getLanguageText('TEXT-TOTAL'));
echo("\n");
break;
}
}
// Get and process the order items
$query = "SELECT sp.product_name,supplier_product_num,SUM(online_qty) AS online_qty,sp.package_qty,package_cost " .
"FROM supplier_order_items as soi, supplier_products as sp " .
"WHERE soi.school_num = $school_num " .
"AND sp.school_num = $supplier_school_num " .
"AND soi.supplier_num = $supplier_num " .
"AND soi.supplier_product_num = sp.record_num " .
"AND soi.menu_num in ($menuNumbers) " .
"GROUP BY 1,2,4,5 " .
"ORDER BY sp.sequence,product_name";
$order_items = db_query($query);
while ($row = db_fetch_assoc($order_items)) {
extract($row);
switch ($format) {
case 'order':
writeLog("online_qty: $online_qty - package_qty: $package_qty");
$units = intval(($online_qty + $package_qty - 1) / $package_qty);
$cost = number_format($units * $package_cost,2);
echo("\"$product_name\",$online_qty,$package_qty,$package_cost,$units,$cost\n");
$totals['qty'] += $online_qty;
$totals['units'] += $units;
$totals['cost'] += $cost;
if (!array_key_exists($supplier_product_num, $products)) {
$products[$supplier_product_num] = array();
$products[$supplier_product_num]['qty'] = 0;
}
$products[$supplier_product_num]['qty'] += $online_qty;
$products[$supplier_product_num]['product_name'] = $product_name;
break;
case 'production':
echo("\"$product_name\",");
$itotal = 0;
for ($i = 0; $i < count($selected_menus); $i++) {
$menu_num = $selected_menus[$i];
$items = db_query("SELECT hlmp.* FROM hotlunch_menu_products AS hlmp, hotlunch_menu_items AS hlmi " .
"WHERE hlmp.school_num = $school_num " .
"AND hlmi.school_num = $school_num " .
"AND hlmi.menu_num = $menu_num " .
"AND hlmp.menu_item_num = hlmi.record_num " .
"AND hlmp.supplier_product_num = $supplier_product_num");
$cItems = "";
while ($row = db_fetch_assoc($items)) {
if (strlen($cItems)) $cItems .= ",";
$cItems .= $row['menu_item_num'];
}
switch ($staff) {
case 'included':
if (strlen($cItems)) $qty = db_getVal("SELECT sum(qty) FROM hotlunch_order_items WHERE school_num = $school_num AND menu_item_num IN ($cItems)");
if ($qty) echo("$qty,");
else echo("0,");
$itotal += $qty;
break;
case 'separate':
// Get student quantities
$qty = 0;
if (strlen($cItems)) $qty = db_getVal("SELECT sum(qty) FROM hotlunch_order_items " .
"WHERE school_num = $school_num AND menu_item_num IN ($cItems) AND ordered_by_type = 'Student'");
if ($qty) echo("$qty,");
else echo("0,");
$itotal += $qty;
// Get non-student quantities
if (strlen($cItems)) $qty = db_getVal("SELECT sum(qty) FROM hotlunch_order_items " .
"WHERE school_num = $school_num AND menu_item_num IN ($cItems) AND ordered_by_type != 'Student'");
if ($qty) echo("$qty,");
else echo("0,");
$itotal += $qty;
break;
}
}
echo("$itotal\n");
break;
}
}
echo("\n");
}
if ($format == 'order') {
echo("\"$supplier_name\",".getLanguageText('TEXT-TOTALS')."," . $totals['qty'] . ",,," . $totals['units'] . "," . $totals['cost'] . "\n");
echo("\n");
echo(getLanguageText('TEXT-TOTALS').":\n");
echo(getLanguageText('TEXT-PRODUCT').",".getLanguageText('TEXT-ORDERED')."\n");
foreach ($products as $key => $value) {
echo("\"" . $products[$key]['product_name'] . "\",".$products[$key]['qty'] . "\n");
}
}
echo("\n");
?>