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

327 lines
12 KiB
PHP

<?
/*
* This file is part of the 'Science Fair In A Box' project
* Science-ation Website: https://science-ation.ca/
*
* Copyright (C) 2009 James Grant <james@lightbox.org>
*
* 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.
*/
?>
<?
require('../common.inc.php');
require_once('../user.inc.php');
user_auth_required('committee', 'admin');
if (get_value_from_array($_GET, 'action') == 'refresh') {
?>
<h3><?= i18n('Fundraising Purposes and Progress Year to Date') ?></h3>
<?
$q = $pdo->prepare("SELECT * FROM fundraising_goals WHERE fiscalyear='{$config['FISCALYEAR']}' ORDER BY deadline");
$q->execute();
?>
<table class="tableview">
<thead>
<tr>
<th><?= i18n('Purpose') ?></th>
<th><?= i18n('Goal') ?></th>
<th><?= i18n('Amount Received') ?></th>
<th><?= i18n('% to Budget') ?></th>
<th><?= i18n('Deadline') ?></th>
</tr>
</thead>
<?
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
// lookup all donations made towards this goal
$recq = $pdo->prepare("SELECT SUM(value) AS received FROM fundraising_donations WHERE fundraising_goal='$r->goal' AND fiscalyear='{$config['FISCALYEAR']}' AND status='received'");
$recq->execute();
show_pdo_errors_if_any($pdo);
$recr = $recq->fetch(PDO::FETCH_OBJ);
$received = $recr->received;
if ($r->budget)
$percent = round($received / $r->budget * 100, 1);
else
$percent = 0;
echo "<tr><td>$r->name</td>";
echo '<td style="text-align: right;">' . format_money($r->budget, false) . '</td>';
echo '<td style="text-align: right;">' . format_money($received, false) . '</td>';
$col = colour_to_percent($percent);
echo "<td style=\"text-align: center; background-color: $col;\">{$percent}%</td>";
echo '<td>' . format_date($r->deadline) . "</td></tr>\n";
}
?>
</table>
<br />
<h3><?= i18n('Current Appeals') ?></h3>
<table class="tableview">
<thead>
<tr>
<th><?= i18n('Name') ?></th>
<th><?= i18n('Type') ?></th>
<th><?= i18n('Start Date') ?></th>
<th><?= i18n('End Date') ?></th>
<th><?= i18n('Target($)') ?></th>
<th><?= i18n('Received') ?></th>
<th><?= i18n('% to Budget') ?></th>
<th><?= i18n('Purpose') ?></th>
</tr>
</thead>
<?
$q = $pdo->prepare("SELECT * FROM fundraising_campaigns WHERE fiscalyear='{$config['FISCALYEAR']}'");
$q->execute();
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
$goalq = $pdo->prepare("SELECT * FROM fundraising_goals WHERE goal='{$r->fundraising_goal}' AND fiscalyear='{$config['FISCALYEAR']}'");
$goalq->execute();
$goalr = $goalq->fetch(PDO::FETCH_OBJ);
$recq = $pdo->prepare("SELECT SUM(value) AS received FROM fundraising_donations WHERE fundraising_campaigns_id='$r->id' AND fiscalyear='{$config['FISCALYEAR']}' AND status='received'");
$recq->execute();
show_pdo_errors_if_any($pdo);
$recr = $recq->fetch(PDO::FETCH_OBJ);
$received = $recr->received;
if ($r->target)
$percent = round($received / $r->target * 100, 1);
else
$percent = 0;
$col = colour_to_percent($percent);
if (!$goalr) {
$goalr = new stdClass();
$goalr->name = '';
}
echo "<tr style=\"cursor:pointer;\" onclick=\"window.location.href='fundraising_campaigns.php?manage_campaign=$r->id'\">\n";
echo " <td>$r->name</td>\n";
echo " <td>$r->type</td>\n";
echo ' <td>' . format_date($r->startdate) . "</td>\n";
echo ' <td>' . format_date($r->enddate) . '</td>';
echo ' <td style="text-align: right;">' . format_money($r->target, false) . "</td>\n";
echo ' <td style="text-align: right;">' . format_money($received, false) . "</td>\n";
echo " <td style=\"text-align: center; background-color: $col;\">{$percent}%</td>\n";
echo " <td>$goalr->name</td>";
echo "</tr>\n";
}
?>
</tr>
</table>
<script type="text/javascript">
$('.tableview').tablesorter();
</script>
<br />
<form id="thankyouform" method="post" action="fundraising.php">
<h3><?= i18n('To Do List') ?></h3>
<h4><?= i18n("Thank You's") ?></h4>
<?
$q = $pdo->prepare("SELECT id,value, thanked, status, sponsors_id, datereceived,
\tDATE_ADD(datereceived, INTERVAL 1 MONTH) < NOW() AS onemonth,
\tDATE_ADD(datereceived, INTERVAL 2 MONTH) < NOW() AS twomonth
FROM fundraising_donations
WHERE thanked='no' AND status='received'
AND fiscalyear='{$config['FISCALYEAR']}'
ORDER BY datereceived
");
$q->execute();
show_pdo_errors_if_any($pdo);
if ($q->rowCount()) {
echo '<table class="tableview">';
echo '<thead><tr><th>' . i18n('Name') . "</th>\n";
echo '<th>' . i18n('Date Received') . "</th>\n";
echo '<th>' . i18n('Amount') . "</th>\n";
echo '<th>' . i18n('Generate Thank You') . "</th>\n";
echo '<th>' . i18n('Thanked') . "</th>\n";
echo "</tr></thead>\n";
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
$dq = $pdo->prepare("SELECT organization AS name FROM sponsors WHERE id='$r->sponsors_id'");
$dq->execute();
$dr = $dq->fetch(PDO::FETCH_OBJ);
if ($r->twomonth)
$s = 'style="background-color: ' . colour_to_percent(0) . ';"';
else if ($r->onemonth)
$s = 'style="background-color: ' . colour_to_percent(50) . ';"';
else
$s = '';
$u = getUserForSponsor($r->sponsors_id);
echo "<tr $s>";
echo " <td>$dr->name</td>";
echo ' <td>' . format_date($r->datereceived) . '</td>';
echo ' <td style="text-align: right;">' . format_money($r->value) . '</td>';
echo ' <td style="text-align: center;">';
if ($u) {
echo "<a href=\"#\" onclick=\"return opencommunicationsender('{$u['uid']}','fundraising_thankyou_template');\">" . i18n('Generate Thank You') . '</a></td>';
} else {
echo i18n('No contact');
}
echo "<td align=\"center\"><input style=\"padding: 0px; margin: 0px;\" type=\"checkbox\" name=\"thanked[]\" value=\"$r->id\" onclick=\"return thanked($r->id)\"></td>\n";
echo "</tr>\n";
}
echo "</table>\n";
} else {
echo i18n("No Thank You's pending");
echo "<br />\n";
}
?>
</form>
<br />
<h4><?= i18n('Receipts to Issue') ?></h4>
<?
$q = $pdo->prepare("SELECT value, receiptrequired, receiptsent, status, sponsors_id, datereceived,
\tDATE_ADD(datereceived, INTERVAL 1 MONTH) < NOW() AS onemonth,
\tDATE_ADD(datereceived, INTERVAL 2 MONTH) < NOW() AS twomonth
FROM fundraising_donations
WHERE (receiptrequired='yes' AND receiptsent='no') AND status='received'
AND fiscalyear='{$config['FISCALYEAR']}'
ORDER BY datereceived
");
$q->execute();
show_pdo_errors_if_any($pdo);
if ($q->rowCount()) {
echo '<table class="tableview">';
echo '<tr><th>' . i18n('Name') . "</th>\n";
echo '<th>' . i18n('Date Received') . "</th>\n";
echo '<th>' . i18n('Amount') . "</th>\n";
echo '<th>' . i18n('Generate Receipt') . "</th>\n";
echo "</tr>\n";
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
$dq = $pdo->prepare("SELECT organization AS name FROM sponsors WHERE id='$r->sponsors_id'");
$dq->execute();
$dr = $dq->fetch(PDO::FETCH_OBJ);
if ($r->twomonth)
$s = 'style="background-color: ' . colour_to_percent(0) . ';"';
else if ($r->onemonth)
$s = 'style="background-color: ' . colour_to_percent(50) . ';"';
else
$s = '';
echo "<tr $s>";
echo " <td>$dr->name</td>";
echo ' <td>' . format_date($r->datereceived) . '</td>';
echo ' <td style="text-align: right;">' . format_money($r->value) . '</td>';
echo ' <td style="text-align: center;">';
echo '<a href="#" onclick="return false;">' . i18n('Generate Receipt') . '</a></td>';
echo "</tr>\n";
}
echo "</table>\n";
} else {
echo i18n('No Receipts pending');
echo "<br />\n";
}
?>
<br />
<h4><?= i18n('Appeal Follow-Ups') ?></h4>
<?
$q = $pdo->prepare('SELECT * FROM fundraising_campaigns WHERE followupdate>=NOW() ORDER BY followupdate LIMIT 5');
$q->execute();
show_pdo_errors_if_any($pdo);
if ($q->rowCount()) {
echo '<table class="tableview">';
echo '<thead><tr>';
echo ' <th>' . i18n('Appeal') . "</th>\n";
echo ' <th>' . i18n('Start Date') . "</th>\n";
echo ' <th>' . i18n('Follow-Up Date') . "</th>\n";
echo "</tr></thead>\n";
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
echo "<tr><td>$r->name</td><td>" . format_date($r->startdate) . '</td><td>' . format_date($r->followupdate) . "</td></tr>\n";
}
echo "</table>\n";
} else {
echo i18n('No appeal follow-ups');
echo "<br />\n";
}
?>
<br />
<h4>Upcoming Proposals</h4>
<?
$q = $pdo->prepare('SELECT * FROM sponsors WHERE fundingselectiondate>=NOW() OR proposalsubmissiondate>=NOW() ORDER BY fundingselectiondate LIMIT 5');
$q->execute();
show_pdo_errors_if_any($pdo);
if ($q->rowCount()) {
echo '<table class="tableview">';
echo '<tr>';
echo ' <th>' . i18n('Name') . "</th>\n";
echo ' <th>' . i18n('Proposal Submission Date') . "</th>\n";
echo ' <th>' . i18n('Funding Selection Date') . "</th>\n";
echo "</tr>\n";
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
echo "<tr><td>$r->organization</td>";
echo '<td>' . format_date($r->proposalsubmissiondate) . '</td>';
echo '<td>' . format_date($r->fundingselectiondate) . '</td>';
echo "</tr>\n";
}
echo "</table>\n";
} else {
echo i18n('No proposals upcoming');
}
exit;
} else if (get_value_from_array($_POST, 'thanked')) {
foreach ($_POST['thanked'] as $t) {
$stmt = $pdo->prepare("UPDATE fundraising_donations SET thanked='yes' WHERE id='$t'");
$stmt->execute();
}
}
send_header(
'Fundraising',
array(
'Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php',
'Fundraising' => 'admin/fundraising.php'
),
'fundraising'
);
?>
<script type="text/javascript">
$(document).ready(function() {
refreshDashboard();
});
function refreshDashboard() {
$("#dashboard").load("fundraising.php?action=refresh");
}
function thanked() {
$.post("fundraising.php", $("#thankyouform").serializeArray(), function() {
refreshDashboard();
});
}
//key is initial or followup
//start is either 'new' to start with a blank, or 'existing' to load an existing email to start from
function opencommunicationsender(uid, template) {
$("#debug").load("communication.php?action=dialog_sender&uid=" + uid + "&template=fundraising_thankyou_template", null, function() {});
return false;
}
</script>
<div id="dashboard"></div>
<?
send_footer();
?>