From 80ca088be2280044381a440c03b6c86ef8ee2703 Mon Sep 17 00:00:00 2001
From: dave <dave>
Date: Mon, 26 Mar 2007 01:54:18 +0000
Subject: [PATCH] - This will break things, but I need to get these home so I
 can work on 'em.   WIth luck, I'll have a new report generator commiteed
 witha proper DB update   tonight.

---
 admin/reports.inc.php            | 21 +++++++---
 admin/reports_awards.inc.php     |  2 +-
 admin/reports_committees.inc.php |  2 +-
 admin/reports_judges.inc.php     | 11 ++---
 admin/reports_students.inc.php   | 69 ++++++++++++++++++++++++--------
 5 files changed, 73 insertions(+), 32 deletions(-)

diff --git a/admin/reports.inc.php b/admin/reports.inc.php
index f844b922..b34d6c3e 100644
--- a/admin/reports.inc.php
+++ b/admin/reports.inc.php
@@ -432,13 +432,22 @@ foreach($stock as $n=>$v) {
 		$group_query = "";
 	}
 	
-	
- 	$q = '';
+	$components = array();
+	foreach($report['col'] as $c) {
+		if(!is_array($fields[$c]['select_component'])) continue;
+		$components = array_merge($components, $fields[$c]['select_component']);
+	}
+	foreach($report['group'] as $c) {
+		if(!is_array($fields[$c]['select_component'])) continue;
+		$components = array_merge($components, $fields[$c]['select_component']);
+	}
+
+	$q = '';
 	switch($report['type']) {
-	case 'student': $q = report_students_fromwhere($report); break;
-	case 'judge': $q = report_judges_fromwhere($report); break;
-	case 'award': $q = report_awards_fromwhere($report); break;
-	case 'committee': $q = report_committees_fromwhere($report); break;
+	case 'student': $q = report_students_fromwhere($report, $components); break;
+	case 'judge': $q = report_judges_fromwhere($report, $components); break;
+	case 'award': $q = report_awards_fromwhere($report, $components); break;
+	case 'committee': $q = report_committees_fromwhere($report, $components); break;
 	}
 
 	$q = "SELECT $sel  $q  $group_query ORDER BY $order";
diff --git a/admin/reports_awards.inc.php b/admin/reports_awards.inc.php
index 1c82f16c..0006ee7b 100644
--- a/admin/reports_awards.inc.php
+++ b/admin/reports_awards.inc.php
@@ -81,7 +81,7 @@ $report_awards_fields = array(
 
 );
 
- function report_awards_fromwhere($report)
+ function report_awards_fromwhere($report, $components)
  {
  	global $config, $report_awards_fields;
 	
diff --git a/admin/reports_committees.inc.php b/admin/reports_committees.inc.php
index e87d71a2..0db5e071 100644
--- a/admin/reports_committees.inc.php
+++ b/admin/reports_committees.inc.php
@@ -66,7 +66,7 @@ $report_committees_fields = array(
 
 );
 
- function report_committees_fromwhere($report)
+ function report_committees_fromwhere($report, $components)
  {
  	global $config, $report_committees_fields;
 	
diff --git a/admin/reports_judges.inc.php b/admin/reports_judges.inc.php
index be121701..79407749 100644
--- a/admin/reports_judges.inc.php
+++ b/admin/reports_judges.inc.php
@@ -21,6 +21,8 @@
    Boston, MA 02111-1307, USA.
 */
 
+/* Components:  languages, teams */
+
 $report_judges_fields = array(
 	'last_name' =>  array(
 		'name' => 'Judge -- Last Name',
@@ -141,20 +143,13 @@ $report_judges_fields = array(
 
 );
 
- function report_judges_fromwhere($report)
+ function report_judges_fromwhere($report, $components)
  {
  	global $config, $report_judges_fields;
 	
 	$fields = $report_judges_fields;
 	$year = $report['year'];
 
-	$components = array();
-	foreach($report['col'] as $c) {
-		if(!is_array($fields[$c]['select_component'])) continue;
-		$components = array_merge($components, $fields[$c]['select_component']);
-	}
-		
-
 	$languages_from = '';
 	$languages_where = '';
 	if(in_array('languages', $components)) {
diff --git a/admin/reports_students.inc.php b/admin/reports_students.inc.php
index d9c76deb..deb60f04 100644
--- a/admin/reports_students.inc.php
+++ b/admin/reports_students.inc.php
@@ -65,7 +65,7 @@ $report_students_fields = array(
 		'header' => 'Student(s)',
 		'width' => 3.0,
 		'table' => "CONCAT(students.firstname, ' ', students.lastname, IF(students2.lastname IS NULL,'', CONCAT(', ', students2.firstname, ' ', students2.lastname)))",
-		'table_sort' => 'students.lastnmae'),
+		'table_sort' => 'students.lastname'),
 
 	'grade' =>  array(
 		'name' => 'Student -- Grade',
@@ -209,10 +209,11 @@ $report_students_fields = array(
 		'width' => 0.75,
 		'table' => 'schools.postalcode' ),
 
-
-
-
-		
+	'school_board' =>  array(
+		'name' => 'School -- Board ID',
+		'header' => 'Board',
+		'width' => 0.75,
+		'table' => 'schools.board' ),
 
 	'paid' => array(
 		'name' => 'Paid',
@@ -235,14 +236,32 @@ $report_students_fields = array(
 		'width' => 4,
 		'table' => "CONCAT(IF(award_types.type='Other','Special',award_types.type),
  ' ', award_awards.name)",
-		'table_sort' => 'award_awards.order'),
+		'table_sort' => 'award_awards.order',
+		'select_component' => array('awards')),
 
 	'pn_awards' =>  array(
 		'name' => 'Project Num + Award (will be unique)',
 		'header' => 'Award Name',
 		'width' => 4,
 		'table' => "CONCAT(projects.projectnumber,' ', award_awards.name)",
-		'table_sort' => 'award_awards.order'),
+		'table_sort' => 'award_awards.order',
+		'select_component' => array('awards')),
+
+	'nom_awards' => array(
+		'name' => 'Award Nominations -- Award Name (warning: duplicates student for multiple awards!)',
+		'header' => 'Award Name',
+		'width' => 4,
+		'table' => "CONCAT(award_types.type,' ',award_awards.name)",
+		'table_sort' => 'award_awards.order',
+		'select_component' => array('awards_nominations')),
+
+	'nom_pn_awards' =>  array(
+		'name' => 'Award Nominations -- Project Num + Award Name(will be unique)',
+		'header' => 'Award Name',
+		'width' => 4,
+		'table' => "CONCAT(projects.projectnumber,' ', award_awards.name)",
+		'table_sort' => 'award_awards.order',
+		'select_component' => array('awards_nominations')),
 
 	'req_elec' => array(
 		'name' => 'If the project requires electricity',
@@ -268,19 +287,22 @@ $report_students_fields = array(
 		'name' => 'Emergency Contact -- Name',
 		'header' => 'Emerg. Name',
 		'width' => 1.5,
-		'table' => "CONCAT(emergencycontact.firstname, ' ', emergencycontact.lastname)"),
+		'table' => "CONCAT(emergencycontact.firstname, ' ', emergencycontact.lastname)",
+		'select_component' => array('emergencycontacts')),
 
 	'emerg_relation' => array(
 		'name' => 'Emergency Contact -- Relationship',
 		'header' => 'Emerg. Rlt',
 		'width' => 1,
-		'table' => "emergencycontact.relation"),
+		'table' => "emergencycontact.relation",
+		'select_component' => array('emergencycontacts')),
 
 	'emerg_phone' => array(
 		'name' => 'Emergency Contact -- Phone',
 		'header' => 'Emerg. Phone',
 		'width' => 1,
-		'table' => "CONCAT(emergencycontact.phone1, ' ', emergencycontact.phone2, ' ', emergencycontact.phone3, ' ', emergencycontact.phone4)"),
+		'table' => "CONCAT(emergencycontact.phone1, ' ', emergencycontact.phone2, ' ', emergencycontact.phone3, ' ', emergencycontact.phone4)",
+		'select_component' => array('emergencycontacts')),
 
 	'static_text' => array (
 		'name' => 'Static Text (useful for labels)',
@@ -298,7 +320,7 @@ $report_students_fields = array(
 
 );
 
- function report_students_fromwhere($report)
+ function report_students_fromwhere($report, $components)
  {
  	global $config, $report_students_fields;
 	
@@ -308,8 +330,7 @@ $report_students_fields = array(
 	$awards_join = '';
 	$awards_where = '';
 	
-	if(in_array('awards', $report['col']) || in_array('pn_awards', $report['col']) 
-	   || in_array('awards', $report['group']) || in_array('pn_awards', $report['group']) ) {
+	if(in_array('awards', $components)) {
 		/* This requires some extra gymnastics */
 		$awards_join = "LEFT JOIN winners ON(winners.projects_id = projects.id),award_prizes,award_awards,award_types";
 		$awards_where = " AND winners.awards_prizes_id=award_prizes.id
@@ -321,6 +342,16 @@ $report_students_fields = array(
 					AND award_types.year='$year' ";
 	}
 
+	if(in_array('awards_nominations', $components)) {
+		$awards_join = "LEFT JOIN project_specialawards_link 
+					ON(projects.id=project_specialawards_link.projects_id),
+					award_awards,award_types";
+		$awards_where = " AND project_specialawards_link.award_awards_id=award_awards_id
+					AND award_types.id=award_awards.award_types_id
+					AND award_awards.year='$year'
+					AND award_types.year='$year' ";
+	}
+
 	$partner_join = '';
 	if(in_array('bothnames', $report['col']) || in_array('partner', $report['col'])) {
 		$partner_join = "LEFT JOIN students AS students2 
@@ -328,10 +359,18 @@ $report_students_fields = array(
 					AND students2.id != students.id)";
 	} 
 
+	$emergencycontact_join = '';
+	if(in_array('emergencycontacts', $components)) {
+		/* No need to put the year in here, students.id is unique across years */
+		$emergencycontact_join = "LEFT JOIN emergencycontact ON (
+					students.id=emergencycontact.students_id )";
+	}
+
 	$q = "	FROM 
 			students $partner_join, 
 			schools, projects $awards_join, projectdivisions, 
-			projectcategories, registrations, emergencycontact
+			projectcategories, registrations
+			$emergencycontact_join
 		WHERE
 			schools.id=students.schools_id
 			AND projects.registrations_id=students.registrations_id
@@ -339,13 +378,11 @@ $report_students_fields = array(
 			AND projectcategories.id=projects.projectcategories_id
 			AND registrations.id=students.registrations_id
 			AND (registrations.status='complete' OR registrations.status='paymentpending')
-			AND emergencycontact.students_id=students.id 
 			AND students.year='$year'
 			AND projects.year='$year'
 			AND registrations.year='$year'
 			AND projectcategories.year='$year'
 			AND projectdivisions.year='$year'
-			AND emergencycontact.year='$year'
 			$awards_where
 		";