KissCount/www/index.php

297 lines
10 KiB
PHP
Raw Normal View History

<?php
2010-08-31 21:36:07 +02:00
/*
Copyright 2010-2011 Grégory Soutadé
2010-08-31 21:36:07 +02:00
This file is part of KissCount.
KissCount 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, either version 3 of the License, or
(at your option) any later version.
KissCount 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 KissCount. If not, see <http://www.gnu.org/licenses/>.
*/
include "kisscount.php" ;
session_start();
?>
<!DOCTYPE HTML SYSTEM>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href= "kisscount.css" />
<title>KissCount</title>
</head>
<body bgcolor="#CCCCCC">
<?php
if (isset($_GET["disconnect"]))
{
$_SESSION = array();
session_destroy();
}
if (!isset($_SESSION["user"]))
{
$display_login = 1;
if (isset($_POST["user"]))
{
if (!IsUserValid($_POST["user"], $_POST["password"]))
echo "<center><font color=\"red\"><h3>Invalid password</h3></font></center>\n";
else
$display_login = 0;
}
if ($display_login == 1)
{
$users = GetUsers();
echo "<center><h1>KissCount</h1><br /><br/>\n";
echo "<form id=\"login\" method=\"post\" action='index.php'>\n";
2010-08-31 21:36:07 +02:00
echo "Login : <select name=\"user\">\n";
foreach($users as $i => $name)
echo "<option value=\"$name\">$name</option>\n";
echo "</select><br /><br />\n";
echo "Password : <input type=\"password\" name=\"password\" /><br /><br />\n";
echo "<input type=\"submit\" value=\"Connect\"/>\n";
2010-08-31 21:36:07 +02:00
echo "</form></center>\n";
echo "<br /><br />\n";
echo "<center><a href=\"http://indefero.soutade.fr/p/kisscount\">KissCount</a> &copy; 2010 Grégory Soutadé</center>\n";
die();
}
else
$_SESSION["user"] = LoadUser($_POST["user"]);
}
if (!isset($_SESSION["operations"]))
{
$_SESSION["operations"] = GetAllOperations($_SESSION["user"], $_SESSION["last_year"], $_SESSION["last_month"]);
}
if (!isset($_POST["year"]))
{
$_SESSION["cur_year"] = $_SESSION["last_year"];
$_SESSION["cur_month"] = $_SESSION["last_month"];
}
else
{
$_SESSION["cur_year"] = $_POST["year"];
$_SESSION["cur_month"] = $_POST["month"];
}
2010-10-27 21:00:40 +02:00
if (isset($_POST["expand"]))
$_SESSION["expand"] = "1";
else
$_SESSION["expand"] = "0";
2010-08-31 21:36:07 +02:00
$operations = LoadMonth($_SESSION["user"], $_SESSION["cur_month"], $_SESSION["cur_year"]);
$cur_date = mktime(0, 0, 0, date("m") , date("d"), date("Y"));
$total_incomes = $total_outcomes = $cur_incomes = $cur_outcomes = 0;
while($operation = $operations->fetchArray())
{
2010-11-02 20:09:32 +01:00
if ($operation["meta"] == "1")
2010-11-02 19:59:49 +01:00
continue;
2010-11-02 20:09:32 +01:00
$date = mktime(0, 0, 0, $operation["month"]+1, $operation["day"]+1, $operation["year"]);
2010-08-31 21:36:07 +02:00
2010-11-02 20:09:32 +01:00
$accounts[$operation["account"]]["total"] += $operation["amount"];
2010-08-31 21:36:07 +02:00
2010-11-02 20:09:32 +01:00
if ($date <= $cur_date)
$accounts[$operation["account"]]["cur"] += $operation["amount"];
2010-11-05 19:01:23 +01:00
if (!($operation["transfert"] == "" || ($operation["amount"] > 0 && $_SESSION["user"]->IsAccountBlocked($operation["account"]))))
2010-11-02 20:09:32 +01:00
continue;
if ($operation["transfert"] != "")
2010-11-02 19:59:49 +01:00
$operation["amount"] = -$operation["amount"];
2010-08-31 21:36:07 +02:00
if ($operation["amount"] < 0)
{
$categories[$operation["category"]] -= $operation["amount"];
$total_outcomes -= $operation["amount"];
if ($date <= $cur_date)
$cur_outcomes -= $operation["amount"];
}
else
{
$total_incomes += $operation["amount"];
if ($date <= $cur_date)
$cur_incomes += $operation["amount"];
}
}
?>
<script>
function changeMonths()
{
document.getElementById("date_month").innerHTML = "";
switch(document.getElementById("date_year").value)
{
<?php
global $months_strings;
foreach($_SESSION["operations"] as $year => $months)
{
echo "case \"$year\":\n";
$tmp = "";
foreach($months as $i => $month)
{
$tmp .= "<option value=\\'" . $month . "\\'>" . $months_strings[$month] . "</option>";
}
echo "document.getElementById(\"date_month\").innerHTML = '" . $tmp . "'\n";
echo "break\n";
}
?>
}
}
</script>
<form id="date" method="POST" action="index.php">
2010-08-31 21:36:07 +02:00
<select name="month" id="date_month">
<?php
foreach($_SESSION["operations"][$_SESSION["cur_year"]] as $i => $month)
{
if ($month != $_SESSION["cur_month"])
echo "<option value='" . $month . "'>" . $months_strings[$month] . "</option>\n";
else
echo "<option value='" . $month . "' selected>" . $months_strings[$month] . "</option>\n";
}
?>
</select>
<select name="year" id="date_year" onChange="changeMonths();">
<?php
foreach($_SESSION["operations"] as $year => $months)
{
if ($year != $_SESSION["cur_year"])
echo "<option value='" . $year . "'>" . $year . "</option>\n";
else
echo "<option value='" . $year . "' selected>" . $year . "</option>\n";
}
?>
</select>
2010-10-27 21:00:40 +02:00
<input type="checkbox" name="expand" <?php if ($_SESSION["expand"] == "1") echo "checked";?>>Expand groups</input>
<input type="submit" value="OK"/>
2010-08-31 21:36:07 +02:00
</form>
<a id="disconnect" href="?disconnect=1">Disconnect</a>
<br /><br />
<div id="informations">
<div id="accounts">
<table>
<tr class="header"><td>Account number</td><td>Account name</td><td>Initial value</td><td>Cur value</td><td>Final value</td></tr>
<?php
foreach($_SESSION["user"]->accounts as $i => $account)
{
$val = GetAccountAmount($account["id"], $_SESSION["cur_month"], $_SESSION["cur_year"]);
echo "<tr class='bordered'>";
2010-10-27 21:00:40 +02:00
if ($account["shared"] == "1")
echo "<td>" . $account["number"] . "*</td>";
else
echo "<td>" . $account["number"] . "</td>";
2010-08-31 21:36:07 +02:00
echo "<td>" . $account["name"] . "</td>";
echo "<td align='right'>" . number_format($val, 2) . "</td>";
if (($accounts[$account["id"]]["cur"] + $val) < 0)
echo "<td align='right' style=\"font-weight:bold;color:red;\">" . number_format($accounts[$account["id"]]["cur"] + $val, 2) . "</td>" ;
else
echo "<td align='right' style=\"font-weight:bold;\">" . number_format($accounts[$account["id"]]["cur"] + $val, 2) . "</td>" ;
echo "<td align='right'>" . number_format($accounts[$account["id"]]["total"] + $val, 2) . "</td>" ;
echo "</tr>\n";
}
?>
</table>
</div>
<br /><br />
<div id="operations">
<table>
<tr class="header" bgcolor="#99CCFF"><td>Description</td><td>Date</td><td>Debit</td><td>Credit</td><td>Category</td><td>Account</td></tr>
<?php
$prev_week=-1;
$operations = LoadMonth($_SESSION["user"], $_SESSION["cur_month"], $_SESSION["cur_year"]);
while($operation = $operations->fetchArray())
{
2010-10-27 21:00:40 +02:00
if ($_SESSION["expand"] == "1")
{
if ($operation["meta"] == "1")
continue;
}
else
{
if ($operation["parent"] != "")
continue;
}
2010-08-31 21:36:07 +02:00
$category = $_SESSION["user"]->GetCategory($operation["category"]);
if ($operation["fix_cost"] == "0")
{
$cur_week = date("W", mktime(0, 0, 0, $operation["month"]+1, $operation["day"]+1, $operation["year"]));
if ($cur_week > $prev_week)
{
$tr_class = "class=\"new_week\"";
$prev_week = $cur_week;
}
else
$tr_class = "";
}
echo "<tr $tr_class style='" . $category["style"] . "'><td>" . $operation["description"] . "</td>";
2010-08-31 21:36:07 +02:00
echo "<td>" . date("d/m/Y", mktime(0, 0, 0, $operation["month"]+1, $operation["day"]+1, $operation["year"])) . "</td>";
2010-10-27 21:00:40 +02:00
if ($operation["meta"] == "1" && $operation["amount"] == 0)
{
$amount = MetaPositiveAmount($operation["id"]);
echo "<td align='right'>" . number_format($amount, 2) . "</td>";
echo "<td align='right'>" . number_format($amount, 2) . "</td>";
}
else
{
if ($operation["amount"] < 0)
echo "<td align='right'>" . number_format(-$operation["amount"], 2) . "</td><td />";
else
echo "<td /><td align='right'>" . number_format($operation["amount"], 2) . "</td>";
}
if ($operation["meta"] != "1")
echo "<td>" . $category["name"] . "</td>";
2010-08-31 21:36:07 +02:00
else
2010-10-27 21:00:40 +02:00
echo "<td />";
2010-08-31 21:36:07 +02:00
echo "<td>" . $_SESSION["user"]->GetAccountName($operation["account"]) . "</td>";
echo "</tr>\n";
}
?>
</table>
</div>
</div>
<div id="stats">
<div id="money_stats">
<table>
<tr class="bordered"><td style="font-weight:bold">Cur credit</td><td align="right"><?php echo number_format($cur_incomes, 2) ?></td></tr>
<tr class="bordered"><td style="font-weight:bold">Cur debit</td><td align="right"><?php echo number_format($cur_outcomes, 2) ?></td></tr>
<tr class="bordered"><td>Total credit</td><td align="right"><?php echo number_format($total_incomes, 2); ?></td></tr>
<tr class="bordered"><td>Total debit</td><td align="right"><?php echo number_format($total_outcomes, 2); ?></td></tr>
<tr class="bordered"><td style="font-weight:bold">Remains</td>
<?php
if ($total_outcomes < $total_incomes)
echo "<td style=\"text-align:right;font-weight:bold;color:green\">" . number_format($total_incomes - $total_outcomes, 2) . "</td>";
else
echo "<td style=\"text-align:right;font-weight:bold;color:red\"> " . number_format($total_incomes - $total_outcomes, 2) . "</td>";
?>
</tr>
<tr class="bordered"><td>_</td><td> </td></tr>
<?php
foreach($_SESSION["user"]->categories as $i => $category)
{
$percent = ($categories[$category["id"]] * 100) / $total_outcomes;
$percent = round($percent, 0);
$percent = ($percent < 10) ? "0$percent" : "$percent";
echo "<tr class=\"bordered\"><td>" . $category["name"]. "</td><td align=\"right\">" . number_format($categories[$category["id"]], 2) . " ($percent %)</td></tr>\n";
}
?>
</table>
</div>
</div>
<br /><br />
<center><a href="http://indefero.soutade.fr/p/kisscount">KissCount</a> &copy; 2010-2011 Grégory Soutadé</center>
2010-08-31 21:36:07 +02:00
</body>
</html>