aboutsummaryrefslogtreecommitdiffstats
path: root/en/about/reports/template.php
diff options
context:
space:
mode:
Diffstat (limited to 'en/about/reports/template.php')
-rw-r--r--en/about/reports/template.php350
1 files changed, 350 insertions, 0 deletions
diff --git a/en/about/reports/template.php b/en/about/reports/template.php
new file mode 100644
index 000000000..2cd6e6aeb
--- /dev/null
+++ b/en/about/reports/template.php
@@ -0,0 +1,350 @@
+<?php
+/**
+ * Template for financial reports.
+ * See 201?/index.php scripts including it.
+ *
+ * TODO rewrite this properly, of course. Still use a CSV? Use a clean template anyway.
+*/
+$_months = array(
+ 1 => 'January', 2 => 'February', 3 => 'March',
+ 4 => 'April', 5 => 'May', 6 => 'June',
+ 7 => 'July', 8 => 'August', 9 => 'September',
+ 10 => 'October', 11 => 'November', 12 => 'December'
+);
+
+/**
+ * Format numbers after ISO_31 recommandation,
+ * using the comma as decimal sep.
+ * See http://en.wikipedia.org/wiki/ISO_31-0#Numbers
+ *
+ * @param float $n decimal number
+ * @param char $dec_sep
+ *
+ * @return string
+*/
+function _report_number_format($n, $dec_sep = ',')
+{
+ return str_replace('#', '&nbsp;', number_format($n, 2, $dec_sep, '#'));
+}
+
+$data = file($source_csv);
+$parsed = array();
+
+foreach ($data as $l) {
+ if (trim($l) == ',,,,,,')
+ continue;
+
+ $l = str_getcsv(str_replace(array(',,,', ",\n"), '', $l));
+ if (substr($l[0], 0, 2) == '# ') {
+ $tag = $l[0];
+ $parent = $tag;
+ } elseif (substr($l[0], 0, 2) == '##') {
+ $tag = $parent . ' > ' . $l[0];
+ } else {
+ $parsed[$tag][] = $l;
+ }
+}
+
+foreach ($parsed as $tag => $values) {
+ $val2 = array();
+ $tag2 = strtolower($tag);
+ $teststr = strlen($tag) > 12 ? substr($tag2, 0, 13) : null;
+ foreach ($values as $v) {
+ if ($tag2 == "# head"
+ || $teststr == "# account bal"
+ || $teststr == "# income stat"
+ || $teststr == "# balance she"
+ || $tag2 == '## expenses'
+ || $tag2 == '## revenues'
+ || $tag2 == '## liabilities'
+ || $tag2 == '## assets') {
+ $val2[$v[0]] = $v[1];
+ } else {
+ $val2[] = $v;
+ }
+ }
+
+ $parsed[$tag] = $val2;
+}
+$flow = array();
+
+$list = array_fill(1, 12, 0);
+$count = array_fill(1, 12, 0);
+$tmp = $parsed['# Expenses details > ## More details'];
+array_shift($tmp);
+foreach ($tmp as $line) {
+ if (count($line) < 4)
+ continue;
+
+ $month = date('n', strtotime($line[0]));
+ $list[$month] += $line[3]; // amount
+ $count[$month] += 1;
+}
+$expenses_monthly_summary = array($list, $count);
+
+$flow = array(
+ 'expenses' => $list,
+ 'expenses_op' => $count,
+ 'revenue' => null,
+ 'revenue_op' => null
+);
+
+$list = array();
+$count = array();
+
+// FIXME take ## Other revenues lines into account.
+foreach ($parsed['# Income details > ## Donations monthly summary'] as $line) {
+ if (count($line) < 3)
+ continue;
+
+ $list[] = $line[2];
+ $count[] = $line[1];
+}
+
+unset($list[0]);
+unset($list[13]);
+unset($count[0]);
+unset($count[13]);
+
+$flow['revenue'] = $list;
+$flow['revenue_op'] = $count;
+
+include 'template_lib.php';
+
+$R = get_revenues($parsed['# Income details > ## Donations monthly summary'], $_months);
+$expenses_total = array_sum($expenses_monthly_summary[0]);
+
+
+?><!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Mageia.org <?php echo $year; ?> Financial Report</title>
+ <meta name="description" content="Financial report for Mageia.org activity in <?php echo $year?>">
+ <meta name="keywords" content="<?php echo $page_kw;?>">
+ <meta name="author" content="Mageia.org">
+ <link rel="stylesheet" type="text/css" href="/g/style/all.css">
+ <?php include '../../../../analytics.php'; ?>
+ <!--Load the AJAX API-->
+ <script type="text/javascript" src="https://www.google.com/jsapi"></script>
+ <script type="text/javascript">
+ google.load('visualization', '1', {packages: ['corechart']});
+ </script>
+ <script type="text/javascript">
+ function drawVisualization() {
+ // Some raw data (not necessarily accurate)
+ var data = google.visualization.arrayToDataTable([
+ ['Month', 'Revenues', 'Expenses'],
+ <?php
+ $arr = array();
+ $qRevenues = 0;
+ $qExpenses = 0;
+ $i = 1;
+ $j = 1;
+ $qarr = array();
+ foreach ($flow['revenue'] as $month => $val) {
+
+ // save monthly data
+ $arr[] = sprintf("['%s', %s, %s]", $_months[$month], str_replace(',', '.', $val), str_replace(',', '.', $flow['expenses'][$month]));
+
+ // sum quarterly data
+ $qRevenues += str_replace(',', '.', $val);
+ $qExpenses += str_replace(',', '.', $flow['expenses'][$month]);
+
+ // save quarterly data
+ if ($i % 3 == 0) {
+ $qarr[] = sprintf("['%s', %s, %s]", 'Q' . $j, $qRevenues, $qExpenses);
+
+ $qRevenues = 0;
+ $qExpenses = 0;
+ $j += 1;
+ }
+
+ $i += 1;
+ }
+ echo implode(', ', $arr);
+ ?>
+ ]);
+
+ var options = {
+ title : 'Monthly Cash Flow',
+ vAxis: {title: "Amount (€)"},
+ hAxis: {title: "<?php echo $year?>"},
+ seriesType: "bars",
+ };
+
+ var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
+ chart.draw(data, options);
+
+ var data2 = google.visualization.arrayToDataTable([
+ ['Year', 'Revenues', 'Expenses'],
+ <?php echo $js_data2_values; ?>
+ ]);
+ var options2 = {
+ title : 'Yearly Cash Flow',
+ vAxis: {title: "Amount (€)"},
+ hAxis: {title: "Years"},
+ seriesType: "bars"
+ };
+
+ var chart2 = new google.visualization.ComboChart(document.getElementById('chart2'));
+ chart2.draw(data2, options2);
+
+ var data3 = google.visualization.arrayToDataTable([
+ ['Quarter', 'Revenues', 'Expenses'],
+ <?php echo implode(', ', $qarr); ?>
+ ]);
+ var options3 = {
+ title : 'Quarterly Cash Flow',
+ vAxis: {title: "Amount (€)"},
+ hAxis: {title: "<?php echo $year?>"},
+ seriesType: "bars"
+ };
+
+ var chart3 = new google.visualization.ComboChart(document.getElementById('chart3'));
+ chart3.draw(data3, options3);
+ }
+ google.setOnLoadCallback(drawVisualization);
+ </script>
+</head>
+<body class="about reports">
+ <?php include '../../../../langs.php'; ?>
+ <header id="mgnavt">
+ <h1><a href="../">Activity Reports</a> &raquo; <?php echo $year; ?> Financial Report</h1>
+ <ul>
+ </ul>
+ </header>
+ <style>
+ #summary { width: 300px; float: left; text-align: left; background: #fff; border-bottom: 1px solid #ddd; }
+ #report { text-align: left; width: 800px; float: left; border: 1px solid #ddd; border-top: 0; }
+ #links { width: 150px; float: left; background: #fff; text-align: left; border-right: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 1em;}
+ .accounts tr.total { font-weight: 600; }
+ </style>
+ <aside id="summary">
+ <div class="para">
+ <h2><?php echo $last_known_account_title?></h2>
+ <p>All amounts are in EURO.</p>
+ <p>Last updated on <?php echo $parsed['# Head']['last updated']; ?>.</p>
+ <?php
+ $k = sprintf('# Account balance on %d/12/31', $year);
+ $k = array_key_exists($k, $parsed) ? $k : '# Account balance';
+ $v = $parsed[$k];
+ $s = '<table class="fr-table accounts">';
+ foreach ($v as $k => $w) {
+ $s .= sprintf('<tr class="%s"><td>%s</td><td class="money">%s</td></tr>',
+ str_replace(' ', '-', $k),
+ $k,
+ _report_number_format($w));
+ }
+ $s .= '</table>';
+ echo $s;
+ ?>
+ </div>
+ <div class="para">
+ <?php echo $intro; ?>
+ <p>Feel free to <a href="/en/contact/">contact us</a> regarding this report.</p>
+ </div>
+ </aside>
+
+ <article id="report">
+ <section class="para values" id="flow">
+ <h2>Cash flow</h2>
+ <div id="chart_div" style="width: 650px; height: 280px;"></div>
+ <div id="chart3" style="width: 650px; height: 200px;"></div>
+ <div id="chart2" style="width: 650px; height: 200px;"></div>
+ <hr>
+ </section>
+ <section class="para values" id="inc-state">
+ <h2>Income statement</h2>
+ <!-- <mark>full income statement. For now, check details below.</mark>-->
+ <table summary="Income statement" class="fr-table">
+ <tbody>
+ <tr>
+ <th>Revenues</th>
+ <td></td>
+ <td class="money"><?php echo _report_number_format($R['data']['total']);?></td>
+ </tr>
+ <tr>
+ <th>Expenses</th>
+ <td class="money"><?php echo _report_number_format($expenses_total);?></td>
+ <td></td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <?php
+ $result = $R['data']['total'] - $expenses_total;
+ if ($result > 0):
+ ?>
+ <td>Net Income</td>
+ <td></td>
+ <td class="money"><?php echo _report_number_format($result); ?></td>
+ <?php else: ?>
+ <td>Net Loss</td>
+ <td class="money"><?php echo _report_number_format(-$result); ?></td>
+ <td></td>
+ <?php endif; ?>
+ </tr>
+ </tfoot>
+ </table>
+ </section>
+ <hr>
+ <!--
+ <section class="para values" id="balance">
+ <h2>Balance sheet</h2>
+ <table class="fr-table">
+ <thead><tr><th colspan="2">Assets</th>
+ <th colspan="2">Liabilities</th></tr></thead>
+ <tbody><tr><td colspan="2">
+ <table class="fr-table">
+ <?php
+ $s = '';
+ foreach ($parsed['# Balance Sheet (incomplete) > ## Assets'] as $k => $v) {
+ $v = str_replace(',', '.', $v);
+ $v = is_numeric($v) ? _report_number_format($v) : $v;
+ $s .= sprintf('<tr><td>%s</td><td class="money">%s</td></tr>', $k, $v);
+ }
+ echo $s;
+ ?>
+ </table>
+ </td><td colspan="2">
+ <table class="fr-table">
+ <?php
+ $s = '';
+ foreach ($parsed['# Balance Sheet (incomplete) > ## Liabilities'] as $k => $v) {
+ $v = str_replace(',', '.', $v);
+ $v = is_numeric($v) ? _report_number_format($v) : $v;
+ $s .= sprintf('<tr><td>%s</td><td class="money">%s</td></tr>', $k, $v);
+ }
+ echo $s;
+ ?>
+ </table>
+ </td></tr></tbody>
+ <tfoot><tr><td>Total Assets</td><td></td>
+ <td>Total Liabilities</td><td></td></tr></tfoot>
+ </table>
+ </section>
+ <hr>
+ -->
+ <section class="para values" id="expenses">
+ <h2>Expenses</h2>
+ <?php $E = get_expenses($parsed['# Expenses details > ## More details']); echo $E['html']; ?>
+ </section>
+ <hr>
+ <section class="para values" id="revenues">
+ <h2>Income, donations</h2>
+ <?php echo $R['html']; ?>
+ </section>
+ <p class="para"><a href="#top">Return to top</a></p>
+ </article>
+
+ <nav id="links">
+ <ul class="hl">
+ <li><a href="#flow">Cash flow</a></li>
+ <li><a href="#inc-state">Income statement</a></li>
+ <li><a href="#balance">Balance sheet</a></li>
+ <li><a href="#expenses">Expenses</a></li>
+ <li><a href="#revenues">Revenues</a></li>
+ </nav>
+</body>
+</html>