science-ation/admin/reports_awards.inc.php
2025-02-10 19:54:20 +00:00

453 lines
14 KiB
PHP

<?
/*
* This file is part of the Science-ation project
* Science-ation Website: https://science-ation.ca
*
* This file was part of the 'Science Fair In A Box' project
*
*
* Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
* Copyright (C) 2005 James Grant <james@lightbox.org>
* Copyright (C) 2024 AlgoLibre Inc. <science-ation@algolibre.io>
* Copyright (C) 2024 AlgoLibre Inc. <science-ation@algolibre.io>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
function report_awards_fr($report, $field, $text)
{
return i18n($text, array(), array(), 'fr');
}
function report_cash_words($report, $field, $text)
{
return wordify($text, true);
}
$report_awards_fields = array(
'name' => array(
'start_option_group' => 'Award Information',
'name' => 'Award -- Name',
'header' => 'Award Name',
'width' => 3.0,
'table' => 'award_awards.name'
),
'name_fr' => array(
'name' => 'Award -- Name (French)',
'header' => 'Award Name',
'width' => 3.0,
'table' => 'award_awards.name',
'exec_function' => 'report_awards_fr'
),
'criteria' => array(
'name' => 'Award -- Criteria',
'header' => 'Award Criteria',
'width' => 3.0,
'table' => 'award_awards.criteria'
),
'criteria_fr' => array(
'name' => 'Award -- Criteria (French)',
'header' => 'Award Criteria',
'width' => 3.0,
'table' => 'award_awards.criteria',
'exec_function' => 'report_awards_fr'
),
'presenter' => array(
'name' => 'Award -- Presenter',
'header' => 'Award Presenter',
'width' => 1.5,
'table' => 'award_awards.presenter'
),
'order' => array(
'name' => 'Award -- Order',
'header' => 'Award Order',
'width' => 0.5,
'table' => 'award_awards.order'
),
'cwsfaward' => array(
'name' => 'Award -- CWSF Award',
'header' => 'CWSF',
'width' => 0.5,
'table' => 'award_awards.cwsfaward',
'value_map' => array('0' => 'No', '1' => 'Yes')
),
'type' => array(
'name' => 'Award -- Type',
'header' => 'Award Type',
'width' => 1.0,
'table' => 'award_types.type'
),
'empty_winner_box' => array(
'name' => 'Award -- Empty Winner Box (for hand entry on printed reports)',
'header' => 'Winner',
'width' => 1.0,
'table' => "CONCAT('')"
),
'sponsor_organization' => array(
'start_option_group' => 'Sponsor Information',
'name' => 'Sponsor -- Organization',
'header' => 'Sponsor Organization',
'width' => 2.0,
'table' => 'sponsors.organization'
),
'sponsor_phone' => array(
'name' => 'Sponsor -- Phone',
'header' => 'Sp. Phone',
'width' => 1,
'table' => 'sponsors.phone'
),
'sponsor_fax' => array(
'name' => 'Sponsor -- Fax',
'header' => 'Sp. Fax',
'width' => 1,
'table' => 'sponsors.fax'
),
'sponsor_address' => array(
'name' => 'Sponsor -- Street Address',
'header' => 'Sponsor Address',
'width' => 2.0,
'table' => 'sponsors.address'
),
'sponsor_city' => array(
'name' => 'Sponsor -- City',
'header' => 'Sp. City',
'width' => 1.5,
'table' => 'sponsors.city'
),
'sponsor_province' => array(
'name' => 'Sponsor -- ' . $config['provincestate'],
'header' => 'Sp. ' . $config['provincestate'],
'width' => 0.75,
'table' => 'sponsors.province_code'
),
'sponsor_postal' => array(
'name' => 'Sponsor -- ' . $config['postalzip'],
'header' => 'Sp. ' . $config['postalzip'],
'width' => 0.75,
'table' => 'sponsors.postalcode'
),
'sponsor_notes' => array(
'name' => 'Sponsor -- Notes',
'header' => 'Sponsor Notes',
'width' => 3,
'table' => 'sponsors.notes'
),
'sponsorship_status' => array(
'name' => 'Sponsorship -- Status',
'header' => 'Sp. Status',
'width' => 0.5,
'table' => 'sponsorships.status',
'value_map' => array('pending' => 'Pending', 'confirmed' => 'Confirmed'),
'received' => 'Received'
),
'pcontact_salutation' => array(
'start_option_group' => 'Sponsor Primary Contact',
'name' => 'Primary Contact -- Salutation',
'header' => 'Cnct. Salutation',
'width' => 1.0,
'table' => 'PRIMARYCONTACTUSER.salutation'
),
'pcontact_last_name' => array(
'name' => 'Primary Contact -- Last Name',
'header' => 'Cnct. Last Name',
'width' => 1.0,
'table' => 'PRIMARYCONTACTUSER.lastname'
),
'pcontact_first_name' => array(
'name' => 'Primary Contact -- First Name',
'header' => 'Cnct. First Name',
'width' => 1.0,
'table' => 'PRIMARYCONTACTUSER.firstname'
),
'pcontact_name' => array(
'name' => 'Primary Contact -- Full Name (last, first)',
'header' => 'Contact Name',
'width' => 1.75,
'table' => "CONCAT(PRIMARYCONTACTUSER.lastname, ', ', PRIMARYCONTACTUSER.firstname)",
'table_sort' => 'PRIMARYCONTACTUSER.lastname'
),
'pcontact_namefl' => array(
'name' => 'Primary Contact -- Full Name (salutation first last)',
'header' => 'Contact Name',
'width' => 1.75,
'table' => "CONCAT(PRIMARYCONTACTUSER.salutation, ' ', PRIMARYCONTACTUSER.firstname, ' ', PRIMARYCONTACTUSER.lastname)",
'table_sort' => 'PRIMARYCONTACTUSER.lastname'
),
'pcontact_position' => array(
'name' => 'Primary Contact -- Position',
'header' => 'Cnct. Position',
'width' => 1.25,
'table' => 'PRIMARYCONTACT.position'
),
'pcontact_email' => array(
'name' => 'Primary Contact -- Email',
'header' => 'Cnct. Email',
'width' => 2.0,
'table' => 'PRIMARYCONTACTUSER.email'
),
'pcontact_hphone' => array(
'name' => 'Primary Contact -- Home Phone',
'header' => 'Cnct. Home',
'width' => 1,
'table' => 'PRIMARYCONTACTUSER.phonehome'
),
'pcontact_wphone' => array(
'name' => 'Primary Contact -- Work Phone',
'header' => 'Cnct. Work',
'width' => 1,
'table' => 'PRIMARYCONTACTUSER.phonework'
),
'pcontact_cphone' => array(
'name' => 'Primary Contact -- Cell Phone',
'header' => 'Cnct. Cell',
'width' => 1,
'table' => 'PRIMARYCONTACTUSER.phonecell'
),
'pcontact_fax' => array(
'name' => 'Primary Contact -- Fax',
'header' => 'Cnct. Fax',
'width' => 1,
'table' => 'PRIMARYCONTACTUSER.fax'
),
'pcontact_notes' => array(
'name' => 'Primary Contact -- Notes',
'header' => 'Contact Notes',
'width' => 3,
'table' => 'PRIMARYCONTACT.notes'
),
'pcontact_address' => array(
'name' => 'Primary Contact Address -- Street',
'header' => 'Address',
'width' => 2.0,
'table' => "CONCAT(PRIMARYCONTACTUSER.address, ' ', PRIMARYCONTACTUSER.address2)"
),
'pcontact_city' => array(
'name' => 'Primary Contact Address -- City',
'header' => 'City',
'width' => 1.5,
'table' => 'PRIMARYCONTACTUSER.city'
),
'pcontact_province' => array(
'name' => 'Primary Contact Address -- ' . $config['provincestate'],
'header' => $config['provincestate'],
'width' => 0.75,
'table' => 'PRIMARYCONTACTUSER.province'
),
'pcontact_postal' => array(
'name' => 'Primary Contact Address -- ' . $config['postalzip'],
'header' => $config['postalzip'],
'width' => 0.75,
'table' => 'PRIMARYCONTACTUSER.postalcode'
),
'pcontact_city_prov' => array(
'name' => 'Primary Contact Address -- City, ' . $config['provincestate'] . ' (for mailing)',
'header' => 'City',
'width' => 1.5,
'table' => "CONCAT(PRIMARYCONTACTUSER.city, ', ', PRIMARYCONTACTUSER.province)"
),
'judgeteamname' => array(
'start_option_group' => 'Judging Team',
'components' => array('judgingteam'),
'name' => 'Judging Team -- Name',
'header' => 'Judging Team',
'width' => 3.0,
'table' => 'judges_teams.name'
),
'judgeteamnum' => array(
'components' => array('judgingteam'),
'name' => 'Judging Team -- Number',
'header' => 'Team',
'width' => 0.5,
'table' => 'judges_teams.num'
),
'judgeteammembers_name' => array(
'components' => array('judgingteam', 'judgingteammembers'),
'name' => 'Judging Team -- Judge Name',
'header' => 'Judge Name',
'width' => 1.5,
'table' => "CONCAT(judges.firstname, ' ', judges.lastname)"
),
'judgeteammembers' => array(
'components' => array('judgingteam', 'judgingteammembers'),
'name' => 'Judging Team -- Members (REQUIRES MySQL 5.0)',
'header' => 'Team Members',
'width' => 3.0,
'table' => "GROUP_CONCAT(judges.firstname, ' ', judges.lastname ORDER BY judges.lastname SEPARATOR ', ')",
'group_by' => array('award_awards.id', 'judges_teams.num')
),
'prize_name' => array(
'start_option_group' => 'Prize Info (Duplicates award data for each prize, omits awards with no prizes)',
'name' => 'Prize -- Name',
'header' => 'Prize Name',
'width' => 2,
'table' => 'award_prizes.prize',
'components' => array('prizes')
),
'prize_cash' => array(
'name' => 'Prize -- Cash Amount',
'header' => 'Cash',
'width' => 0.5,
'table' => 'award_prizes.cash',
'components' => array('prizes')
),
'prize_cash_words' => array(
'name' => 'Prize -- Cash Amount In Words',
'header' => 'Cash',
'width' => 0.5,
'table' => 'award_prizes.cash',
'components' => array('prizes'),
'exec_function' => 'report_cash_words'
),
'prize_scholarship' => array(
'name' => 'Prize -- Scholarship Amount',
'header' => 'Scholarship',
'width' => 0.75,
'table' => 'award_prizes.scholarship',
'components' => array('prizes')
),
'prize_value' => array(
'name' => 'Prize -- Value Amount',
'header' => 'Value',
'width' => 0.5,
'table' => 'award_prizes.value',
'components' => array('prizes')
),
/*
* Don't have projectcategories and projectdivisions
* 'prize_fullname' => array(
* 'name' => 'Prize -- Name, Category, Division',
* 'header' => 'Prize Name',
* 'width' => 4,
* 'table' => "CONCAT(award_prizes.prize,' in ',projectcategories.category,' ', projectdivisions.division)",
* 'table_sort' => 'award_prizes.order',
* 'components' => array('prizes')),
*/
'prize_trophy_any' => array(
'name' => "Prize -- Trophy ('Yes' if the award has a trophy)",
'header' => 'Trophy',
'width' => 0.5,
'table' => "IF ( award_prizes.trophystudentkeeper=1
OR award_prizes.trophystudentreturn=1
OR award_prizes.trophyschoolkeeper=1
OR award_prizes.trophyschoolreturn=1, 'Yes', 'No')",
'components' => array('prizes')
),
'prize_trophy_return' => array(
'name' => "Prize -- Annual Trophy ('Yes' if the award has a school or student trophy that isn't a keeper)",
'header' => 'Trophy',
'width' => 0.5,
'table' => "IF ( award_prizes.trophystudentreturn=1
OR award_prizes.trophyschoolreturn=1, 'Yes', 'No')",
'components' => array('prizes')
),
'prize_trophy_return_student' => array(
'name' => "Prize -- Annual Student Trophy ('Yes' if the award has astudent trophy that isn't a keeper)",
'header' => 'Ind.',
'width' => 0.5,
'table' => "IF ( award_prizes.trophystudentreturn=1, 'Yes', 'No')",
'components' => array('prizes')
),
'prize_trophy_return_school' => array(
'name' => "Prize -- Annual School Trophy ('Yes' if the award has a school trophy that isn't a keeper)",
'header' => 'Sch.',
'width' => 0.5,
'table' => "IF ( award_prizes.trophyschoolreturn=1, 'Yes', 'No')",
'components' => array('prizes')
),
'prize_all' => array(
'name' => 'Prize -- Lists all prize data (name, cash, scholarship, value, trophies)',
'header' => 'Prize',
'width' => 2,
'table' => "CONCAT(
IF(award_prizes.prize != '', CONCAT(award_prizes.prize,'
', ''),''),
IF(award_prizes.cash != '', CONCAT('\$',award_prizes.cash,'
'), ''),
IF(award_prizes.scholarship != '', CONCAT('\$',award_prizes.scholarship,' scholarship
'), ''),
IF(award_prizes.value != '', CONCAT('\$',award_prizes.value,' value
'), ''),
IF(award_prizes.trophystudentkeeper != '', CONCAT('Student Keeper Trophy
'), ''),
IF(award_prizes.trophystudentreturn != '', CONCAT('Student Annual-Return Trophy
'), ''),
IF(award_prizes.trophyschoolkeeper != '', CONCAT('School Keeper Trophy
'), ''),
IF(award_prizes.trophyschoolreturn != '', CONCAT('School Annual-Return Trophy
'), '')
)",
'components' => array('prizes')
),
);
function report_awards_fromwhere($report, $components)
{
global $config, $report_awards_fields;
$fields = $report_awards_fields;
$year = $report['year'];
$judges_join = '';
$judges_where = '';
if (in_array('judgingteam', $components)) {
$judges_join = 'LEFT JOIN judges_teams_awards_link ON judges_teams_awards_link.award_awards_id=award_awards.id
LEFT JOIN judges_teams ON judges_teams.id=judges_teams_awards_link.judges_teams_id';
$judges_where = "AND judges_teams_awards_link.year='$year'
AND judges_teams.year='$year'";
}
$judges_members_join = '';
$judges_members_where = '';
if (in_array('judgingteammembers', $components)) {
$judges_members_join = 'LEFT JOIN judges_teams_link ON judges_teams_link.judges_teams_id=judges_teams.id
LEFT JOIN judges ON judges.id=judges_teams_link.judges_id';
$judges_members_where = "AND judges_teams_link.year='$year'";
}
$prizes_join = '';
if (in_array('prizes', $components)) {
$prizes_join = 'LEFT JOIN award_prizes ON award_prizes.award_awards_id=award_awards.id';
/*
* Don't need a where filter, the prize is attached by unique ID to an award
* that is already from the correct year.
*/
}
$q = " FROM award_awards
LEFT JOIN sponsors ON (
sponsors.id=award_awards.sponsors_id)
LEFT JOIN award_types ON award_types.id=award_types_id
LEFT JOIN users_sponsor AS PRIMARYCONTACT ON (
PRIMARYCONTACT.sponsors_id=sponsors.id
AND PRIMARYCONTACT.`primary`='yes')
LEFT JOIN users AS PRIMARYCONTACTUSER ON (
PRIMARYCONTACT.users_id=PRIMARYCONTACTUSER.id)
$judges_join
$judges_members_join
$prizes_join
WHERE
award_awards.year='$year'
AND award_types.year='$year'
$judges_where
$judges_members_where
";
return $q;
}