Updating to the development version done in vicerveza.
authorviric@llimona
Thu, 11 May 2006 00:00:15 +0200
changeset 2 eb656142f039
parent 1 5c3469118f32
Updating to the development version done in vicerveza.
README
TODO
classes.inc
db-class.inc
getdb.inc
index.html
list-compres.php
list-gent.php
list-pagaments.php
list-persona.php
stats.php
update-compra.php
update-gent.php
update-pagament.php
view-compra.php
view-pagament.php
--- a/README	Wed May 10 23:58:52 2006 +0200
+++ b/README	Thu May 11 00:00:15 2006 +0200
@@ -2,3 +2,9 @@
 conté els passwords d'accés a la base de dades.
 
 El fitxer db.sql conté les ordres per inicialitzar la base de dades necessària.
+
+Recomano un fitxer .htaccess que no permeti veure els '*.inc':
+<FilesMatch "\.inc$">
+Deny from all
+</FilesMatch>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TODO	Thu May 11 00:00:15 2006 +0200
@@ -0,0 +1,2 @@
+* Al llistar amb "list-persona", s'haurien de donar totes les compres en una sola crida. Aix es fa amb un UNION, i el mysql 3.23 no ho soporta.
+* s possible que al llistar amb "list-persona", surti llistada tot i que l'entrada a "compradors", a "compradors_excepcions" o a "pagadors" sigui de 0 euros.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classes.inc	Thu May 11 00:00:15 2006 +0200
@@ -0,0 +1,148 @@
+<?php
+
+class accio
+{
+var $dia;
+var $mes;
+var $any;
+var $hora;
+var $minut;
+var $data_modificat; // timestamp
+
+function data()
+{
+	return mktime($this->hora, $this->minut, 0, $this->mes, $this->dia,
+		$this->any);
+}
+
+function setData($data)
+{
+	$this->dia = date('d',$data);
+	$this->mes = date('m',$data);
+	$this->any = date('Y',$data);
+	$this->hora = date('H',$data);
+	$this->minut = date('i',$data);
+}
+
+}
+
+class comprador
+{
+var $persona;
+var $pagat;
+var $toca_pagar;
+
+// Valors de lligam
+var $data;
+
+function comprador($data, $persona, $pagat, $toca_pagar)
+{
+	$this->persona = $persona;
+	$this->data = $data;
+	$this->pagat = $pagat;
+	$this->toca_pagar = $toca_pagar;
+}
+}
+
+class comprador_excepcio
+{
+var $persona;
+var $toca_pagar;
+
+// Valors de lligam
+var $id_excepcio;
+}
+
+class excepcio
+{
+var $article;
+var $preu;
+
+// Valors de lligam
+var $data;
+// Calculats o llegits de la DB
+var $id;
+
+}
+
+class compra extends accio
+{
+var $botiga;
+var $motiu;
+var $comentari;
+var $preu; // Segur?
+var $compradors; // Array d'objectes
+var $excepcions;
+
+// Calculades
+var $preu_per_compradors
+
+function compra($connexio=-1, $data=0)
+{
+	if ($connexio == -1)
+	{
+		$this->setData(time());
+		$this->botiga = "";
+		$this->motiu = "";
+		$this->comentari = "";
+		$this->preu = 0;
+		$this->compradors = array();
+		$this->excepcions = array();
+	}
+	else
+	{
+		$query="SELECT UNIX_TIMESTAMP(data),botiga,motiu,preu,comentari FROM compres WHERE data=FROM_UNIXTIME(" . $data . ")";
+		$resultat = db->($query);
+		
+		// ****** Cal comprovar que existeix
+		$fila = mysql_fetch_row($resultat)
+		$this->setData($fila[0]);
+		$this->botiga = $fila[1];
+		$this->motiu =  $fila[2];
+		$this->preu =   $fila[3];
+		$this->comentari = $fila[4];
+
+		$query = "SELECT persona,pagat,toca_pagar FROM compradors
+			WHERE compradors.data=FROM_UNIXTIME($date);"; 
+		$resultat = db->($query);
+
+		$this->compradors = array();
+		while($fila = mysql_fetch_row($resultat))
+		{
+			$this->comprador[] = new comprador($this->data,
+				$fila[0], $fila[1], $fila[2] );
+		}
+
+	}
+}
+
+function numCompradors()
+{
+	return count($this->compradors);
+}
+
+function numExcepcions()
+{
+	return count($this->excepcions);
+}
+
+}
+
+class pagament extends accio
+{
+var $comentari;
+var $motiu;
+
+}
+
+class pagador
+{
+var $persona;
+var $pagat;
+var $cobrat;
+
+// Valor de lligam
+var $data;
+
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db-class.inc	Thu May 11 00:00:15 2006 +0200
@@ -0,0 +1,25 @@
+<?php
+
+class db
+{
+var $connexio;
+
+function db($server, $user, $password, $database)
+{
+	
+	// Fem la connexió
+	$this->connexio = mysql_connect($server, $user, $password);
+	mysql_select_db($database, $connexio);
+}
+
+function query($query)
+{
+	return mysql_query($query, $this->connexio);
+}
+
+function close($query)
+{
+	mysql_close($this->connexio);
+}
+}
+?>
--- a/getdb.inc	Wed May 10 23:58:52 2006 +0200
+++ b/getdb.inc	Thu May 11 00:00:15 2006 +0200
@@ -56,7 +56,8 @@
 
 		while ($fila = mysql_fetch_row($resultat))
 			$gent[$fila[0]] = array( "nom" => $fila[1],
-									"habitant" => $fila[2]);
+									"habitant" => $fila[2],
+									"id" => $fila[0]);
 		return $gent;
 	}
 
@@ -192,9 +193,44 @@
 		echo "</SELECT>";
 	}
 
+	function select_gent_multi($variable)
+	{
+		$num_gent = count($GLOBALS["gent"]);
+
+		echo "<SELECT name=\"$variable"."[]\" multiple>\n";
+
+		foreach($GLOBALS["gent"] as $i)
+		{
+			echo "<OPTION value=\"" .$i["id"] . "\"";
+			echo ">" . strtohtml($i["nom"]) . "\n";
+		}
+
+		echo "</SELECT>";
+	}
+
+	function select_botigues_multi($variable, $connection)
+	{
+		$resultat = mysql_query("SELECT botiga FROM compres GROUP BY botiga ORDER BY botiga ASC;", $connection);
+
+		while ($fila = mysql_fetch_row($resultat))
+			$botigues[] = $fila[0];
+		$num_botigues = count($botigues);
+
+		echo "<SELECT name=\"$variable". "[]\" multiple>\n";
+
+		foreach($botigues as $i)
+		{
+			echo "<OPTION value=\"" . strforquotes($i) . "\"";
+			echo ">" . strtohtml($i) . "\n";
+		}
+
+		echo "</SELECT>";
+	}
+
+
 	function strtosql($cadena)
 	{
-		return ereg_replace("\'", "\'", $cadena);
+		return ereg_replace("'", "'", $cadena);
 	}
 
 	function strtohtml($cadena)
@@ -206,6 +242,20 @@
 		return $new;
 	}
 
+	function strforquotes($cadena)
+	{
+		$new= ereg_replace("\"", "&quotes;", $cadena);
+
+		return $new;
+	}
+
+	function strfromquotes($cadena)
+	{
+		$new= ereg_replace("&quotes;", "\"", $cadena);
+
+		return $new;
+	}
+
 	function pricetohtml($price)
 	{
 		if ($price < 0)
--- a/index.html	Wed May 10 23:58:52 2006 +0200
+++ b/index.html	Thu May 11 00:00:15 2006 +0200
@@ -28,6 +28,8 @@
 	<TD ALIGN=center> <A HREF="update-gent">Afegir nova</A>
 <TR>
 	<TD COLSPAN=3 ALIGN=center> <A HREF="calc-deutes">Calcular deutes</A>
+<TR>
+	<TD COLSPAN=3 ALIGN=center> <A HREF="stats">Estadstiques de consum</A>
 </TABLE>
 
 <BR>
--- a/list-compres.php	Wed May 10 23:58:52 2006 +0200
+++ b/list-compres.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>txelon - Consulta de compres</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- a/list-gent.php	Wed May 10 23:58:52 2006 +0200
+++ b/list-gent.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>txelon - Llistat de gent</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- a/list-pagaments.php	Wed May 10 23:58:52 2006 +0200
+++ b/list-pagaments.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>txelon - Consulta de pagaments</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- a/list-persona.php	Wed May 10 23:58:52 2006 +0200
+++ b/list-persona.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>txelon - Consulta de compres</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stats.php	Thu May 11 00:00:15 2006 +0200
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>txelon - Estadstiques</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
+</head>
+
+<body>
+
+<H1 ALIGN=center>txelon</H1>
+
+
+<?php
+	include("getdb.inc");
+	
+	// Fem la connexi
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+	mysql_select_db($mysql_db, $connexio);
+
+	// Crides a funcions per obtenir parametres
+	$habitants = obtenir_habitants($connexio);
+	$num_habitants = count($habitants);
+	$altres = obtenir_altres($connexio);
+	$gent = obtenir_gent($connexio);
+
+	if (!isset($_POST["demanar"]))
+	{
+?>
+
+<h2>Estadstiques de consum - Formulari</h2>
+
+<form action="stats" method="post">
+<table>
+<tr>
+<th>Data d'inici:
+<td><input type=text name="data_inici" value="<?php echo date("d/m/Y",
+	time() - 365*24*3600); ?>"size=20>
+<tr>
+<th>Data final:
+<td><input type=text name="data_final" value="<?php echo date("d/m/Y");
+	?>"size=20>
+<tr>
+<th>Usuaris:
+<td><?php select_gent_multi("gent_stats"); ?>
+<tr>
+<th>Botigues:
+<td><?php select_botigues_multi("botigues",$connexio); ?>
+<tr>
+<td>
+<td><input type=submit name="demanar" value="Demanar" size=20>
+</table>
+</form>
+
+
+<?php
+	}
+	else
+	{  // ************** CALCULEM SEGONS L'ENTRAT AL FORMULARI ***********
+		// Dates
+		$i = preg_split("/[^0-9]/", $_POST["data_inici"]);
+		$data_inici = mktime(0,0,0,$i[1],$i[0], $i[2]);
+		$i = preg_split("/[^0-9]/", $_POST["data_final"]);
+		$data_final = mktime(23,59,0,$i[1],$i[0], $i[2]);
+
+		$dies = (int)(($data_final - $data_inici) / (24*3600));
+
+		// Iniciem els deutes de cadascun
+		$total_a_pagar = 0;
+
+		// Obtenim totes les compres
+		$compres = obtenir_compres($connexio);
+
+		// Per cada compra...
+		foreach($compres as $data => $compra)
+		{
+			if ($data > $data_inici and $data < $data_final and
+				in_array($compra["botiga"], $_POST["botigues"]))
+			{
+				$compradors = obtenir_compradors($data, $connexio);
+
+				// Calcul dels compradors globals
+				foreach($compradors as $persona => $dades)
+				{
+					if (in_array($persona, $_POST["gent_stats"]))
+						$total_a_pagar += $dades["toca_pagar"];
+				}
+
+				$excepcions = obtenir_excepcions($data, $connexio);
+
+				$max_compradors_ex = 0;
+				if ($excepcions != 0)
+					foreach($excepcions as $key => $value)
+					{
+						$compradors_excepcions[$key] = obtenir_compradors_excepcions($key, $connexio);
+						foreach($compradors_excepcions[$key] as $persona => $dades)
+						{
+							if (in_array($persona, $_POST["gent_stats"]))
+								$total_a_pagar += $dades["toca_pagar"];
+						}
+					}
+			}
+		}
+?>
+
+<H2>Estadstiques</H2>
+
+<!-- Taula de compradors globals -->
+<TABLE BORDER=1>
+<TR>
+	<TH>Persones
+	<TD><?php
+		foreach ($_POST["gent_stats"] as $id)
+			$gent_stats[] = $gent[$id]["nom"];
+		echo implode(",", $gent_stats); ?>
+<TR>
+	<TH>Botigues
+	<TD><?php
+		echo implode(",", $_POST["botigues"]); ?>
+<TR>
+	<TH>Des en el perode
+	<TD><?php echo $dies;?>
+<TR>
+	<TH>Toca pagar en el perode
+	<TD><?php echo $total_a_pagar; ?>
+<TR>
+	<TH>Mitjana de consum al dia
+	<TD><?php echo $total_a_pagar / $dies; ?>
+<TR>
+	<TH>Mitjana de consum en 30 dies
+	<TD><?php echo 30* $total_a_pagar / $dies; ?>
+</TABLE>
+
+<HR WIDTH="70%">
+
+<H2>Llegenda</H2>
+
+<!--
+<ul>
+<li>El percentatge es calcula segons el que <em>toca pagar</em> respecte al
+	<em>total a pagar</em>.
+<li>Els pagaments negatius sn cobraments del grup. Els positius sn pagaments
+	al grup.
+<li>La suma del <em>percentatge</em> ha de ser <strong>100</strong>.
+<li>El <em>total pagat</em> ha de ser igual al <em>total a pagar</em>.
+<li>La suma dels pagaments ha de ser <strong>0</strong>
+	(pagaments = cobraments).
+<li>El <em>balan positiu</em> indica diners que s'han de cobrar en un futur,
+	i el <em>negatiu</em> diners que s'han de pagar.
+<LI>s important <strong>no confondre</strong> el que s'ha <em>pagat</em> (que
+	fa referncia a les <em>compres</em>), i els <em>pagaments</em>, que fan
+	referncia als prstecs o saldades de deutes.
+</ul>
+-->
+
+<?php
+	}
+?>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al men d'inici</A>
+
+</body>
+</html>
--- a/update-compra.php	Wed May 10 23:58:52 2006 +0200
+++ b/update-compra.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>Edici de les compres</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
@@ -446,6 +447,7 @@
 						echo $query . "<BR>";
 
 					// Obtenim l'ID de la excepci
+
 					$query = "SELECT id FROM excepcions WHERE data = FROM_UNIXTIME($data) AND article = '" . strtosql($_POST["earticle"][$i]) .
 								"' AND preu = ". $_POST["epreu"][$i] . ";";
 					$resultat = 1; // Per si no es fa la query, assumim que no hi ha errors
--- a/update-gent.php	Wed May 10 23:58:52 2006 +0200
+++ b/update-gent.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>Edici dels pagaments</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- a/update-pagament.php	Wed May 10 23:58:52 2006 +0200
+++ b/update-pagament.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>Edici dels pagaments</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- a/view-compra.php	Wed May 10 23:58:52 2006 +0200
+++ b/view-compra.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>txelon - Veure compra</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>
--- a/view-pagament.php	Wed May 10 23:58:52 2006 +0200
+++ b/view-pagament.php	Thu May 11 00:00:15 2006 +0200
@@ -3,6 +3,7 @@
 <head>
 	<title>txelon - Veure pagament</title>
 	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
 </head>
 
 <body>